added back the r3131 tests in concise form, wrapped S::DBI::_execute in dbh_do to fix
Brandon L. Black [Sun, 10 Jun 2007 15:09:33 +0000 (15:09 +0000)]
lib/DBIx/Class/Storage/DBI.pm
t/92storage.t

index e1d50ef..b3cbdc7 100644 (file)
@@ -840,8 +840,8 @@ sub _prep_for_execute {
   return ($sql, \@bind);
 }
 
-sub _execute {
-  my ($self, $op, $extra_bind, $ident, $bind_attributes, @args) = @_;
+sub _dbh_execute {
+  my ($self, $dbh, $op, $extra_bind, $ident, $bind_attributes, @args) = @_;
   
   if( blessed($ident) && $ident->isa("DBIx::Class::ResultSource") ) {
     $ident = $ident->from();
@@ -888,9 +888,15 @@ sub _execute {
        map { defined ($_ && $_->[1]) ? qq{'$_->[1]'} : q{'NULL'} } @$bind; 
      $self->debugobj->query_end($sql, @debug_bind);
   }
+
   return (wantarray ? ($rv, $sth, @$bind) : $rv);
 }
 
+sub _execute {
+    my $self = shift;
+    $self->dbh_do($self->can('_dbh_execute'), @_)
+}
+
 sub insert {
   my ($self, $source, $to_insert) = @_;
   
index 67a594f..5c69f30 100644 (file)
@@ -5,11 +5,55 @@ use Test::More;
 use lib qw(t/lib);
 use DBICTest;
 
-plan tests => 1;
+{
+    package DBICTest::ExplodingStorage::Sth;
+    use strict;
+    use warnings;
+
+    sub execute { die "Kablammo!" }
+
+    sub bind_param {}
+
+    package DBICTest::ExplodingStorage;
+    use strict;
+    use warnings;
+    use base 'DBIx::Class::Storage::DBI::SQLite';
+
+    my $count = 0;
+    sub sth {
+      my ($self, $sql) = @_;
+      return bless {},  "DBICTest::ExplodingStorage::Sth" unless $count++;
+      return $self->next::method($sql);
+    }
+
+    sub connected {
+      return 0 if $count == 1;
+      return shift->next::method(@_);
+    }
+}
+
+plan tests => 3;
 
 my $schema = DBICTest->init_schema();
 
 is( ref($schema->storage), 'DBIx::Class::Storage::DBI::SQLite',
     'Storage reblessed correctly into DBIx::Class::Storage::DBI::SQLite' );
 
+
+my $storage = $schema->storage;
+$storage->ensure_connected;
+
+bless $storage, "DBICTest::ExplodingStorage";
+$schema->storage($storage);
+
+eval { 
+    $schema->resultset('Artist')->create({ name => "Exploding Sheep" }) 
+};
+
+is($@, "", "Exploding \$sth->execute was caught");
+
+is(1, $schema->resultset('Artist')->search({name => "Exploding Sheep" })->count,
+  "And the STH was retired");
+
+
 1;