From 1af7f272868e1d7fa84c69be59be55abd62993d2 Mon Sep 17 00:00:00 2001 From: "mkanat%kerio.com" <> Date: Fri, 27 May 2005 03:09:22 +0000 Subject: Bug 286672: Require correct DBD depending on the $db_driver in use Patch By Max Kanat-Alexander r=LpSolit, a=justdave --- Bugzilla/DB.pm | 6 +++++- Bugzilla/DB/Mysql.pm | 1 + Bugzilla/DB/Pg.pm | 1 + checksetup.pl | 22 ++++++++++++++++++---- 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 + +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 @@ -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; -- cgit v1.2.3-24-g4f1b