X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FTxnScopeGuard.pm;h=d69913874f04a995e05384f6d065e3f988849a83;hb=ed213e857791d1cfb0f1a0e32674e81358e19564;hp=04978f93a3816706a39f841fcd2e757e2e6126e7;hpb=1bc193ac4c3bb934d1877e49bf7c465fc82815d6;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/TxnScopeGuard.pm b/lib/DBIx/Class/Storage/TxnScopeGuard.pm index 04978f9..d699138 100644 --- a/lib/DBIx/Class/Storage/TxnScopeGuard.pm +++ b/lib/DBIx/Class/Storage/TxnScopeGuard.pm @@ -1,4 +1,5 @@ -package DBIx::Class::Storage::TxnScopeGuard; +package # Hide from pause for now - till we get it working + DBIx::Class::Storage::TxnScopeGuard; use strict; use warnings; @@ -20,7 +21,23 @@ sub commit { sub DESTROY { my ($dismiss, $storage) = @{$_[0]}; - $storage->txn_rollback unless $dismiss; + return if $dismiss; + + my $exception = $@; + + $DB::single = 1; + + local $@; + eval { $storage->txn_rollback }; + my $rollback_exception = $@; + if($rollback_exception) { + my $exception_class = "DBIx::Class::Storage::NESTED_ROLLBACK_EXCEPTION"; + + $storage->throw_exception( + "Transaction aborted: ${exception}. " + . "Rollback failed: ${rollback_exception}" + ) unless $rollback_exception =~ /$exception_class/; + } } 1;