From: Brandon L. Black Date: Thu, 31 May 2007 17:28:59 +0000 (+0000) Subject: reverting changeset 3131, probably needs to be fixed in another way, and it overlaps... X-Git-Tag: v0.08010~150^2~39 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2654e84a2867bf711cfa9ec5e0d0717ce4c53218;p=dbsrgits%2FDBIx-Class.git reverting changeset 3131, probably needs to be fixed in another way, and it overlaps a different possibly bad merge resolution that needs to be fixed as well --- diff --git a/Changes b/Changes index d806c8c..ffc3639 100644 --- a/Changes +++ b/Changes @@ -7,8 +7,6 @@ Revision history for DBIx::Class - Added Oracle/WhereJoins.pm for Oracle >= 8 to support Oracle <= 9i, and provide Oracle with a better join method for later versions. (I use the term better loosely.) - - select et al weren't properly detecing when the server connection - had timed out when not in a transaction - The SQL::T parser class now respects a relationship attribute of is_foreign_key_constrain to allow explicit control over wether or not a foreign constraint is needed diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 14a8f61..cdfc1ee 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -858,55 +858,47 @@ sub _execute { map { defined ($_ && $_->[1]) ? qq{'$_->[1]'} : q{'NULL'} } @bind; $self->debugobj->query_start($sql, @debug_bind); } + my $sth = eval { $self->sth($sql,$op) }; - my ($rv, $sth); - RETRY: while (1) { - $sth = eval { $self->sth($sql,$op) }; + if (!$sth || $@) { + $self->throw_exception( + 'no sth generated via sql (' . ($@ || $self->_dbh->errstr) . "): $sql" + ); + } - if (!$sth || $@) { - $self->throw_exception( - 'no sth generated via sql (' . ($@ || $self->_dbh->errstr) . "): $sql" - ); - } + my $rv; + if ($sth) { + my $time = time(); + $rv = eval { + my $placeholder_index = 1; - if ($sth) { - my $time = time(); - $rv = eval { - my $placeholder_index = 1; + foreach my $bound (@bind) { - foreach my $bound (@bind) { + my $attributes = {}; + my($column_name, @data) = @$bound; - my $attributes = {}; - my($column_name, @data) = @$bound; - - if( $bind_attributes ) { - $attributes = $bind_attributes->{$column_name} - if defined $bind_attributes->{$column_name}; - } + if( $bind_attributes ) { + $attributes = $bind_attributes->{$column_name} + if defined $bind_attributes->{$column_name}; + } - foreach my $data (@data) - { - $data = ref $data ? ''.$data : $data; # stringify args + foreach my $data (@data) + { + $data = ref $data ? ''.$data : $data; # stringify args - $sth->bind_param($placeholder_index, $data, $attributes); - $placeholder_index++; - } + $sth->bind_param($placeholder_index, $data, $attributes); + $placeholder_index++; } - $sth->execute(); - }; - - if ($@ || !$rv) { - $self->throw_exception("Error executing '$sql': ".($@ || $sth->errstr)) - if $self->connected; - $self->_populate_dbh; - } else { - last RETRY; } - } else { - $self->throw_exception("'$sql' did not generate a statement."); + $sth->execute(); + }; + + if ($@ || !$rv) { + $self->throw_exception("Error executing '$sql': ".($@ || $sth->errstr)); } - } # While(1) to retry if disconencted - + } else { + $self->throw_exception("'$sql' did not generate a statement."); + } if ($self->debug) { my @debug_bind = map { defined ($_ && $_->[1]) ? qq{'$_->[1]'} : q{'NULL'} } @bind; diff --git a/t/92storage.t b/t/92storage.t index 5994e2a..67a594f 100644 --- a/t/92storage.t +++ b/t/92storage.t @@ -4,30 +4,12 @@ use warnings; use Test::More; use lib qw(t/lib); use DBICTest; -use DBICTest::ExplodingStorage; -plan tests => 3; +plan tests => 1; 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; diff --git a/t/lib/DBICTest/ExplodingStorage.pm b/t/lib/DBICTest/ExplodingStorage.pm deleted file mode 100644 index e5dd455..0000000 --- a/t/lib/DBICTest/ExplodingStorage.pm +++ /dev/null @@ -1,28 +0,0 @@ -package DBICTest::ExplodingStorage::Sth; - -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(@_); -} - -1;