]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 286672: Require correct DBD depending on the $db_driver in use
authormkanat%kerio.com <>
Fri, 27 May 2005 03:09:22 +0000 (03:09 +0000)
committermkanat%kerio.com <>
Fri, 27 May 2005 03:09:22 +0000 (03:09 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave

Bugzilla/DB.pm
Bugzilla/DB/Mysql.pm
Bugzilla/DB/Pg.pm
checksetup.pl

index 850ea683a2c71a2114abf0070e31c05dfe47e476..f252420f66eebc4706dda574ae765c2a257f9595 100644 (file)
@@ -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
index afa7fe17dfdc29c6cdaf8382fed9c7a2ab4f60e4..4fb755da7c1ee74e1afc8e6f430827aa56a01830 100644 (file)
@@ -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) = @_;
index 4fe8d2244fd5f43a30bbbb0af010fead6fc236e5..86c5497cd42af348558535f343286ad3665452c7 100644 (file)
@@ -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) = @_;
index ef3d80735c9a7840c417f9c83a10d1c0c2b9bb9d..7151b86bf29d2f37c85ca9582dc834d75e7b1d44 100755 (executable)
@@ -299,10 +299,6 @@ my $modules = [
         name => 'DBI', 
         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;