It looks like something in DBI 1.24 broke $dbh->func.

If I try to call this:


$dbh->func( 'createdb', 'foo', 'admin' )

I get an array message about being unable to call func on an undef value
at DBD::mysql line 217.

sub admin {
    my($dbh) = shift;
    my($command) = shift;
    my($dbname) = ($command eq 'createdb'  ||  $command eq 'dropdb') ?
        shift : '';
    $dbh->{'Driver'}->func($dbh, $command, $dbname, '', '', '',
                           '_admin_internal');
}

Line 217 is the line above starting with $dbh->{'Driver'}->func

If I had to guess at what was broken I'd say it had to do with this change
from 1.16:

  Fixed $dbh->{Driver} & $sth->{Database} to return 'outer' handles.

and then this change from 1.24:

  Fixed reference loop causing a handle/memory leak
    that was introduced in DBI 1.16.


I'm guessing these are related?  I also noticed that this code in DBI.xs
(from 1.23):

        case DBIt_DB:
            /* pre-load Driver attribute */
            hv_store((HV*)SvRV(h), "Driver", 6, newRV((SV*)DBIc_MY_H(parent_imp)), 0);
            break;

is gone in 1.24.  So just for yucks I added it back and that seemed to fix
the problem.

I don't know _why_ it fixed it, but it did.


-dave

/*==================
www.urth.org
we await the New Sun
==================*/

Reply via email to