diff options
author | bugreport%peshkin.net <> | 2004-05-27 11:40:17 +0200 |
---|---|---|
committer | bugreport%peshkin.net <> | 2004-05-27 11:40:17 +0200 |
commit | 3a5de3cbf019668cc3963caa566feb1ee15b6e19 (patch) | |
tree | 822d974afbbc3e1092cb690faaa2a3a4cbfaec23 | |
parent | c5718f3890535bb27a2db35c1f08b22b05e89ac4 (diff) | |
download | bugzilla-3a5de3cbf019668cc3963caa566feb1ee15b6e19.tar.gz bugzilla-3a5de3cbf019668cc3963caa566feb1ee15b6e19.tar.xz |
Bug 243351: Fix mysql version sensitivity in case-sensitive search
r=jouni
a=justdave
-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) { |