Hi,

I received a bug report (#60193) regarding the following error with
DBD::Multi:

DBD::Multi initialisation failed: invalid method name 'versions' at
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/DBI/DBD/
SqlEngine.pm line 88
at t/dbd-multi-db.t line 10

>From what I can tell, that "invalid method name" error originates from
DBI::install_method:

        Carp::croak("invalid method name '$method'")
            unless $method =~ m/^([a-z]+_)\w+$/;

>From what I can gather, DBI::DBD::SqlEngine is calling DBI-
>driver_prefix('DBD::multi'), getting back undef, concatenating that
undef with 'versions', and then making a call to
DBD::_::common::install_method('DBD::Multi::db', 'versions').   This
dying because the method name is lacking an underscore.

Here's a call stack from the perl debugger right before it dies:

. = DBD::_::common::install_method('DBD::Multi::db', 'versions')
called from file `/usr/local/lib/perl5/site_perl/5.10.1/i386-freebsd/
DBI/DBD/SqlEngine.pm' line 88
$ = DBI::DBD::SqlEngine::driver('DBD::Multi', ref(HASH)) called from
file `/usr/local/lib/perl5/site_perl/5.10.1/i386-freebsd/DBD/File.pm'
line 73
$ = DBD::File::driver('DBD::Multi', ref(HASH)) called from file `/usr/
local/lib/perl5/site_perl/5.10.1/DBD/Multi.pm' line 20
$ = DBD::Multi::driver('DBD::Multi', ref(HASH)) called from file `/usr/
local/lib/perl5/site_perl/5.10.1/i386-freebsd/DBI.pm' line 811
$ = eval {...} called from file `/usr/local/lib/perl5/site_perl/5.10.1/
i386-freebsd/DBI.pm' line 811
$ = DBI::install_driver('DBI', 'Multi') called from file `/usr/local/
lib/perl5/site_perl/5.10.1/i386-freebsd/DBI.pm' line 643
$ = DBI::connect('DBI', 'DBI:Multi:') called from file `t/dbd-multi-
dr.t' line 9

This appears to be a chance in functionality of DBD::File that was
introduced in 1.611_90.   Prior to that, I don't think it attempted to
inject the versions method.

So, I have two questions:

1.  Does my analysis seem correct?

2.  Any suggestions on the best way to allow DBD::Multi to continue to
work with both older releases of DBI and also work with revisions >=
1.612?

Thanks,
-Dan

Reply via email to