[Bast-commits] r4838 - in DBIx-Class/0.08/branches/warnfree:
lib/DBIx/Class/Storage t
ribasushi at dev.catalyst.perl.org
ribasushi at dev.catalyst.perl.org
Sun Sep 21 23:37:45 BST 2008
Author: ribasushi
Date: 2008-09-21 23:37:45 +0100 (Sun, 21 Sep 2008)
New Revision: 4838
Modified:
DBIx-Class/0.08/branches/warnfree/lib/DBIx/Class/Storage/DBI.pm
DBIx-Class/0.08/branches/warnfree/t/33storage_reconnect.t
Log:
SQLite is rather peculiar on disconnection as described at http://www.perlmonks.org/?node_id=666210. Add an ugly workaround to Storage::DBI, and add a TODO test to detect if the problem is resolved
Modified: DBIx-Class/0.08/branches/warnfree/lib/DBIx/Class/Storage/DBI.pm
===================================================================
--- DBIx-Class/0.08/branches/warnfree/lib/DBIx/Class/Storage/DBI.pm 2008-09-21 22:35:22 UTC (rev 4837)
+++ DBIx-Class/0.08/branches/warnfree/lib/DBIx/Class/Storage/DBI.pm 2008-09-21 22:37:45 UTC (rev 4838)
@@ -703,7 +703,10 @@
$self->_do_connection_actions($connection_do) if ref($connection_do);
$self->_dbh->rollback unless $self->_dbh_autocommit;
- $self->_dbh->disconnect;
+
+ # SQLite is evil/brainded and must be DESTROYed without disconnecting: http://www.perlmonks.org/?node_id=666210
+ $self->_dbh->disconnect if $self->_dbh->get_info(17) ne 'SQLite';
+
$self->_dbh(undef);
$self->{_dbh_gen}++;
}
Modified: DBIx-Class/0.08/branches/warnfree/t/33storage_reconnect.t
===================================================================
--- DBIx-Class/0.08/branches/warnfree/t/33storage_reconnect.t 2008-09-21 22:35:22 UTC (rev 4837)
+++ DBIx-Class/0.08/branches/warnfree/t/33storage_reconnect.t 2008-09-21 22:37:45 UTC (rev 4838)
@@ -7,7 +7,7 @@
use lib qw(t/lib);
use DBICTest;
-plan tests => 5;
+plan tests => 6;
my $db_orig = "$FindBin::Bin/var/DBIxClass.db";
my $db_tmp = "$db_orig.tmp";
@@ -20,7 +20,14 @@
cmp_ok(@art, '==', 3, "Three artists returned");
# Disconnect the dbh, and be sneaky about it
-$schema->storage->_dbh->disconnect;
+# Also test if DBD::SQLite finaly knows how to ->disconnect properly
+TODO: {
+ local $TODO = 'SQLite is evil/braindead. Once this test starts passing, remove the related atrocity from DBIx::Class::Storage::DBI::disconnect()';
+ my $w;
+ local $SIG{__WARN__} = sub { $w = shift };
+ $schema->storage->_dbh->disconnect;
+ ok ($w !~ /active statement handles/, 'SQLite can disconnect properly \o/');
+}
# Try the operation again - What should happen here is:
# 1. S::DBI blindly attempts the SELECT, which throws an exception
@@ -40,10 +47,14 @@
chmod 0000, $db_orig;
### Try the operation again... it should fail, since there's no db
-eval {
- my @art_three = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } );
-};
-ok( $@, 'The operation failed' );
+{
+ # Catch the DBI connection error (disabling PrintError entirely is unwise)
+ local $SIG{__WARN__} = sub {};
+ eval {
+ my @art_three = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } );
+ };
+ ok( $@, 'The operation failed' );
+}
### Now, move the db file back to the correct name
unlink($db_orig);
More information about the Bast-commits
mailing list