]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 455857: [Oracle] 'Find a Specific Bug' doesn't work - Patch by Xiaoou <xiaoou...
authorlpsolit%gmail.com <>
Fri, 17 Oct 2008 18:33:41 +0000 (18:33 +0000)
committerlpsolit%gmail.com <>
Fri, 17 Oct 2008 18:33:41 +0000 (18:33 +0000)
Bugzilla/DB.pm
Bugzilla/DB/Oracle.pm
Bugzilla/Search.pm

index 399f3c64301c3d4b5c49a97096d31fd39849ed9a..e264dc443fd908d7a079782d8be4a9921c539954 100644 (file)
@@ -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
index cddb23da1acfd2b23c89cdb02e4ea668290de352..9399bf225010a88f367616bff9212242aabcd55b 100644 (file)
@@ -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;
 }
index 6dc2703fc149186ec46aaee6076f2d0d3665d071..ac0099ea56522ef8476081c1f25b6e82744e2354 100644 (file)
@@ -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);
         }
     }