Trying to track down bug in DBD::Multi

Dan <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Organization http://groups.google.com
Message-ID <701e9f99-18ea-4b79-abb1-433072477e05@x21g2000yqa.googlegroups.com>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.