atom feed23 messages in org.perl.dbi-devRe: AutoCommit and connect_cached()
FromSent OnAttachments
David WheelerJan 31, 2005 10:28 pm 
Tim BunceFeb 1, 2005 2:43 am 
David WheelerFeb 1, 2005 9:16 am 
Tim BunceFeb 2, 2005 2:58 am 
David WheelerFeb 2, 2005 10:49 am 
David WheelerFeb 2, 2005 10:57 am 
Tim BunceFeb 3, 2005 7:44 am 
David WheelerFeb 3, 2005 8:40 am 
Tim BunceFeb 3, 2005 3:30 pm 
David WheelerFeb 3, 2005 3:48 pm 
Tim BunceFeb 4, 2005 2:07 am 
David WheelerFeb 4, 2005 10:38 am 
Sheikin SergeiFeb 4, 2005 11:31 am 
Michael A ChaseFeb 4, 2005 12:22 pm 
David WheelerFeb 11, 2005 11:18 am 
Tim BunceFeb 12, 2005 10:11 am 
David WheelerFeb 12, 2005 4:35 pm 
Tim BunceFeb 13, 2005 2:44 pm 
David WheelerFeb 13, 2005 5:54 pm 
Tim BunceFeb 14, 2005 3:09 am 
David WheelerFeb 15, 2005 10:37 am 
Tim BunceFeb 15, 2005 2:21 pm 
David WheelerFeb 15, 2005 9:01 pm 
Subject:Re: AutoCommit and connect_cached()
From:Tim Bunce (Tim.@pobox.com)
Date:Feb 1, 2005 2:43:50 am
List:org.perl.dbi-dev

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.