}
# 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);
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
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) = @_;
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) = @_;
name => 'DBI',
version => '1.38'
},
- {
- name => 'DBD::mysql',
- version => '2.9003'
- },
{
name => 'File::Spec',
version => '0.82'
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;