$new->cursor("DBIx::Class::Storage::DBI::Cursor");
$new->transaction_depth(0);
$new->_sql_maker_opts({});
+ $new->{_in_dbh_do} = 0;
+ $new->{_dbh_gen} = 0;
$new;
}
my $self = shift;
my $coderef = shift;
- return $coderef->($self, $self->_dbh, @_) if $self->{_in_txn_do};
-
ref $coderef eq 'CODE' or $self->throw_exception
('$coderef must be a CODE reference');
+ return $coderef->($self, $self->_dbh, @_) if $self->{_in_dbh_do};
+ local $self->{_in_dbh_do} = 1;
+
my @result;
my $want_array = wantarray;
# This is basically a blend of dbh_do above and DBIx::Class::Storage::txn_do.
# It also informs dbh_do to bypass itself while under the direction of txn_do,
-# via $self->{_in_txn_do} (this saves some redundant eval and errorcheck, etc)
+# via $self->{_in_dbh_do} (this saves some redundant eval and errorcheck, etc)
sub txn_do {
my $self = shift;
my $coderef = shift;
ref $coderef eq 'CODE' or $self->throw_exception
('$coderef must be a CODE reference');
- local $self->{_in_txn_do} = 1;
+ local $self->{_in_dbh_do} = 1;
my @result;
my $want_array = wantarray;
$self->_dbh->rollback unless $self->_dbh->{AutoCommit};
$self->_dbh->disconnect;
$self->_dbh(undef);
+ $self->{_dbh_gen}++;
}
}
if(my $dbh = $self->_dbh) {
if(defined $self->_conn_tid && $self->_conn_tid != threads->tid) {
- return $self->_dbh(undef);
+ $self->_dbh(undef);
+ $self->{_dbh_gen}++;
+ return;
}
else {
$self->_verify_pid;
$self->_dbh->{InactiveDestroy} = 1;
$self->_dbh(undef);
+ $self->{_dbh_gen}++;
return;
}
$dbh = DBI->connect(@info);
$dbh->{RaiseError} = 1;
$dbh->{PrintError} = 0;
+ $dbh->{PrintWarn} = 0;
}
};
$self->debugobj->query_start($sql, @debug_bind);
}
- my $sth = eval { $self->sth($sql) };
-
- if (!$sth || $@) {
- $self->throw_exception(
- 'no sth generated via sql (' . ($@ || $self->_dbh->errstr) . "): $sql"
- );
- }
+ my $sth = $self->sth($sql);
my $rv;
if ($sth) {
sub _dbh_sth {
my ($self, $dbh, $sql) = @_;
# 3 is the if_active parameter which avoids active sth re-use
- $dbh->prepare_cached($sql, {}, 3);
+ $dbh->prepare_cached($sql, {}, 3) or
+ $self->throw_exception(
+ 'no sth generated via sql (' . ($@ || $dbh->errstr) . "): $sql"
+ );
}
sub sth {