diff options
-rw-r--r-- | Bugzilla/DB.pm | 10 | ||||
-rw-r--r-- | Bugzilla/Search.pm | 10 | ||||
-rwxr-xr-x | checksetup.pl | 5 |
3 files changed, 24 insertions, 1 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm index 684869006..a766a6e04 100644 --- a/Bugzilla/DB.pm +++ b/Bugzilla/DB.pm @@ -164,6 +164,16 @@ sub _handle_error { return 0; # Now let DBI handle raising the error } +my $cached_server_version; +sub server_version { + return $cached_server_version if defined($cached_server_version); + my $dbh = Bugzilla->dbh; + my $sth = $dbh->prepare('SELECT VERSION()'); + $sth->execute(); + ($cached_server_version) = $sth->fetchrow_array(); + return $cached_server_version; +} + 1; __END__ diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 241439cf5..5f0e625aa 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -711,7 +711,15 @@ sub init { $term = "$ff != $q"; }, ",casesubstring" => sub { - $term = "INSTR(CAST($ff AS BINARY), CAST($q AS BINARY))"; + # mysql 4.0.1 and lower do not support CAST + # mysql 3.*.* had a case-sensitive INSTR + # (checksetup has a check for unsupported versions) + my $server_version = Bugzilla::DB->server_version; + if ($server_version =~ /^3\./) { + $term = "INSTR($ff ,$q)"; + } else { + $term = "INSTR(CAST($ff AS BINARY), CAST($q AS BINARY))"; + } }, ",substring" => sub { $term = "INSTR(LOWER($ff), " . lc($q) . ")"; diff --git a/checksetup.pl b/checksetup.pl index 8fc37f2ad..9d2357945 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -1449,6 +1449,11 @@ if ($my_db_check) { " Bugzilla requires version $sql_want or later of MySQL.\n" . " Please visit http://www.mysql.com/ and download a newer version.\n"; } + if (( $sql_vers =~ /^4\.0\.(\d+)/ ) && ($1 < 2)) { + die "\nYour MySQL server is incompatible with Bugzilla.\n" . + " Bugzilla does not support versions 4.x.x below 4.0.2.\n" . + " Please visit http://www.mysql.com/ and download a newer version.\n"; + } my @databases = $dbh->func('_ListDBs'); unless (grep /^$my_db_name$/, @databases) { |