diff options
author | lpsolit%gmail.com <> | 2008-10-17 20:33:41 +0200 |
---|---|---|
committer | lpsolit%gmail.com <> | 2008-10-17 20:33:41 +0200 |
commit | 3f8fe270407b35a2f123074e61fe87720c5e994b (patch) | |
tree | c8d20fbef1158a8614530e2cede3cd4594102930 | |
parent | 50035ffc59885e32f744389e732a12d533ec1e66 (diff) | |
download | bugzilla-3f8fe270407b35a2f123074e61fe87720c5e994b.tar.gz bugzilla-3f8fe270407b35a2f123074e61fe87720c5e994b.tar.xz |
Bug 455857: [Oracle] 'Find a Specific Bug' doesn't work - Patch by Xiaoou <xiaoou.wu@oracle.com> r/a=mkanat
-rw-r--r-- | Bugzilla/DB.pm | 1 | ||||
-rw-r--r-- | Bugzilla/DB/Oracle.pm | 3 | ||||
-rw-r--r-- | Bugzilla/Search.pm | 6 |
3 files changed, 7 insertions, 3 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm index 399f3c643..e264dc443 100644 --- a/Bugzilla/DB.pm +++ b/Bugzilla/DB.pm @@ -52,6 +52,7 @@ use Storable qw(dclone); use constant BLOB_TYPE => DBI::SQL_BLOB; use constant ISOLATION_LEVEL => 'REPEATABLE READ'; +use constant GROUPBY_REGEXP => '(?:.*\s+AS\s+)?(\w+(\.\w+)?)(?:\s+(ASC|DESC))?$'; # Set default values for what used to be the enum types. These values # are no longer stored in localconfig. If we are upgrading from a diff --git a/Bugzilla/DB/Oracle.pm b/Bugzilla/DB/Oracle.pm index cddb23da1..9399bf225 100644 --- a/Bugzilla/DB/Oracle.pm +++ b/Bugzilla/DB/Oracle.pm @@ -52,6 +52,7 @@ use base qw(Bugzilla::DB); use constant EMPTY_STRING => '__BZ_EMPTY_STR__'; use constant ISOLATION_LEVEL => 'READ COMMITTED'; use constant BLOB_TYPE => { ora_type => ORA_BLOB }; +use constant GROUPBY_REGEXP => '((CASE\s+WHEN.+END)|(TO_CHAR\(.+\))|(\(SCORE.+\))|(\(MATCH.+\))|(\w+(\.\w+)?))(\s+AS\s+)?(.*)?$'; sub new { my ($class, $user, $pass, $host, $dbname, $port) = @_; @@ -80,7 +81,7 @@ sub new { $self->do("ALTER SESSION SET NLS_LENGTH_SEMANTICS='CHAR'") if Bugzilla->params->{'utf8'}; # To allow case insensitive query. - $self->do("ALTER SESSION SET NLS_COMP='LINGUISTIC'"); + $self->do("ALTER SESSION SET NLS_COMP='ANSI'"); $self->do("ALTER SESSION SET NLS_SORT='BINARY_AI'"); return $self; } diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 6dc2703fc..ac0099ea5 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -802,8 +802,10 @@ sub init { $field =~ /^(relevance|actual_time|percentage_complete)/); # The structure of fields is of the form: # [foo AS] {bar | bar.baz} [ASC | DESC] - # Only the mandatory part bar OR bar.baz is of interest - if ($field =~ /(?:.*\s+AS\s+)?(\w+(\.\w+)?)(?:\s+(ASC|DESC))?$/i) { + # Only the mandatory part bar OR bar.baz is of interest. + # But for Oracle, it needs the real name part instead. + my $regexp = $dbh->GROUPBY_REGEXP; + if ($field =~ /$regexp/i) { push(@groupby, $1) if !grep($_ eq $1, @groupby); } } |