summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%kerio.com <>2005-05-27 05:09:22 +0200
committermkanat%kerio.com <>2005-05-27 05:09:22 +0200
commit1af7f272868e1d7fa84c69be59be55abd62993d2 (patch)
treeff06e4732e6aeaa9e8eaf638da518e7e28786a9a
parent31985208f02a64aed42d915663504ba2eefd6bcf (diff)
downloadbugzilla-1af7f272868e1d7fa84c69be59be55abd62993d2.tar.gz
bugzilla-1af7f272868e1d7fa84c69be59be55abd62993d2.tar.xz
Bug 286672: Require correct DBD depending on the $db_driver in use
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave
-rw-r--r--Bugzilla/DB.pm6
-rw-r--r--Bugzilla/DB/Mysql.pm1
-rw-r--r--Bugzilla/DB/Pg.pm1
-rwxr-xr-xchecksetup.pl22
4 files changed, 25 insertions, 5 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 850ea683a..f252420f6 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -187,7 +187,7 @@ sub _handle_error {
}
# List of abstract methods we are checking the derived class implements
-our @_abstract_methods = qw(REQUIRED_VERSION PROGRAM_NAME
+our @_abstract_methods = qw(REQUIRED_VERSION PROGRAM_NAME DBD_VERSION
new sql_regexp sql_not_regexp sql_limit sql_to_days
sql_date_format sql_interval
bz_lock_tables bz_unlock_tables);
@@ -963,6 +963,10 @@ to the admin to let them know what DB they're running.
The name of the Bugzilla::DB module that we are. For example, for the MySQL
Bugzilla::DB module, this would be "Mysql." For PostgreSQL it would be "Pg."
+=item C<DBD_VERSION>
+
+The minimum version of the DBD module that we require for this database.
+
=head1 CONNECTION
A new database handle to the required database can be created using this
diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm
index afa7fe17d..4fb755da7 100644
--- a/Bugzilla/DB/Mysql.pm
+++ b/Bugzilla/DB/Mysql.pm
@@ -49,6 +49,7 @@ use base qw(Bugzilla::DB);
use constant REQUIRED_VERSION => '3.23.41';
use constant PROGRAM_NAME => 'MySQL';
use constant MODULE_NAME => 'Mysql';
+use constant DBD_VERSION => '2.9003';
sub new {
my ($class, $user, $pass, $host, $dbname, $port, $sock) = @_;
diff --git a/Bugzilla/DB/Pg.pm b/Bugzilla/DB/Pg.pm
index 4fe8d2244..86c5497cd 100644
--- a/Bugzilla/DB/Pg.pm
+++ b/Bugzilla/DB/Pg.pm
@@ -51,6 +51,7 @@ use constant BLOB_TYPE => { pg_type => DBD::Pg::PG_BYTEA };
use constant REQUIRED_VERSION => '7.03.0000';
use constant PROGRAM_NAME => 'PostgreSQL';
use constant MODULE_NAME => 'Pg';
+use constant DBD_VERSION => '1.31';
sub new {
my ($class, $user, $pass, $host, $dbname, $port) = @_;
diff --git a/checksetup.pl b/checksetup.pl
index ef3d80735..7151b86bf 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -300,10 +300,6 @@ my $modules = [
version => '1.38'
},
{
- name => 'DBD::mysql',
- version => '2.9003'
- },
- {
name => 'File::Spec',
version => '0.82'
},
@@ -1469,9 +1465,27 @@ $::ENV{'PATH'} = $origPath;
if ($my_db_check) {
# Do we have the database itself?
+ # Unfortunately, $my_db_driver doesn't map perfectly between DBD
+ # and Bugzilla::DB. We need to fix the case a bit.
+ (my $dbd_name = trim($my_db_driver)) =~ s/(\w+)/\u\L$1/g;
+ # And MySQL is special, because it's all lowercase in DBD.
+ $dbd_name = 'mysql' if $dbd_name eq 'Mysql';
+
+ my $dbd = "DBD::$dbd_name";
+ unless (eval("require $dbd")) {
+ print "Bugzilla requires that perl's $dbd be installed.\n"
+ . "To install this module, you can do:\n "
+ . " " . install_command($dbd) . "\n";
+ exit;
+ }
+
my $dbh = Bugzilla::DB::connect_main("no database connection");
my $sql_want = $dbh->REQUIRED_VERSION;
my $sql_server = $dbh->PROGRAM_NAME;
+ my $dbd_ver = $dbh->DBD_VERSION;
+ unless (have_vers($dbd, $dbd_ver)) {
+ die "Bugzilla requires at least version $dbd_ver of $dbd.";
+ }
printf("Checking for %15s %-9s ", $sql_server, "(v$sql_want)") unless $silent;
my $sql_vers = $dbh->bz_server_version;