From: Brandon L. Black Date: Sun, 10 Jun 2007 15:09:33 +0000 (+0000) Subject: added back the r3131 tests in concise form, wrapped S::DBI::_execute in dbh_do to fix X-Git-Tag: v0.08010~150^2~15 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=baa31d2f7fd5d2d8931ef5206ec53f5f58212898;p=dbsrgits%2FDBIx-Class.git added back the r3131 tests in concise form, wrapped S::DBI::_execute in dbh_do to fix --- diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index e1d50ef..b3cbdc7 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -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) = @_; diff --git a/t/92storage.t b/t/92storage.t index 67a594f..5c69f30 100644 --- a/t/92storage.t +++ b/t/92storage.t @@ -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;