summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/DB.pm10
-rw-r--r--Bugzilla/Search.pm10
-rwxr-xr-xchecksetup.pl5
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) {