On Mon, Jan 31, 2005 at 10:28:30PM -0800, David Wheeler wrote:
> Fellow DBIers,
> 
> This script reveals two issues, one with DBD::SQLite and one with the 
> DBI itself:
> 
> #!/usr/bin/perl
> 
> use strict;
> 
> use DBI;
> my $dbh = DBI->connect_cached('dbi:SQLite:dbname=test.db', {RaiseError 
> => 1 });
> $dbh->begin_work;
> print "SQLite $dbh: $dbh->{AutoCommit}\n";
> $dbh = DBI->connect_cached('dbi:SQLite:dbname=test.db', {RaiseError => 
> 1 });
> print "SQLite $dbh: $dbh->{AutoCommit}\n";
> 
> 
> $dbh = DBI->connect_cached('dbi:Pg:dbname=testing', 'postgres', 
> 'postgres',
>                               {RaiseError => 1 });
> $dbh->begin_work;
> print "Pg     $dbh: $dbh->{AutoCommit}\n";
> $dbh = DBI->connect_cached('dbi:Pg:dbname=testing', 'postgres', 
> 'postgres',
>                               {RaiseError => 1 });
> print "Pg     $dbh: $dbh->{AutoCommit}\n";
> 
> The output is:
> 
> SQLite DBI::db=HASH(0x80a44c):
> SQLite DBI::db=HASH(0x80843c): 1
> Pg     DBI::db=HASH(0x85cc3c):
> Pg     DBI::db=HASH(0x85cc3c): 1
> 
> The first two lines tell me that DBD::SQLite doesn't work properly with 
> connect_cached().
> 
> The second two lines tell me that, somehow, connect_cached() is 
> resetting AutoCommit. I wouldn't think that this should happen, but 
> perhaps I'm wrong.
> 
> Am I wrong?

Depends what you mean by wrong. I don't see any 'bugs' here.

DBI->connect and connect_cached both explicitly set any supplied
attributes plus some implicit defaults like PrintError=1 and AutoCommit=1.

You could certainly argue that connect_cached shouldn't do that.
On the other hand, I'd argue that it should perhaps compare the existing
and new values and warn if they differ.

I think the docs say somewhere that attributes shouldn't be altered
when using connect_cached (because you can get this kind of problem).
The connect_cached docs need to spell it out though.

Tim.

Reply via email to