Call ensure_connected in txn_begin to avoid stomping on the transaction depth
Cory G Watson [Tue, 19 Jun 2007 21:07:39 +0000 (21:07 +0000)]
Changes
lib/DBIx/Class/Storage/DBI.pm
t/81transactions.t

diff --git a/Changes b/Changes
index a6dca8f..e82e213 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
 Revision history for DBIx::Class
 
+        - ensure_connected before txn_begin to catch stomping on transaction
+          depth
         - new method "rethrow" for our exception objects
 
 0.08001 2007-06-17 21:21:02
index 7d1ced1..7251ccf 100644 (file)
@@ -788,6 +788,7 @@ sub _connect {
 
 sub txn_begin {
   my $self = shift;
+  $self->ensure_connected();
   if($self->{transaction_depth}++ == 0) {
     $self->debugobj->txn_begin()
       if $self->debug;
index 4a7830f..e16ff2b 100644 (file)
@@ -7,7 +7,7 @@ use DBICTest;
 
 my $schema = DBICTest->init_schema();
 
-plan tests => 39;
+plan tests => 40;
 
 my $code = sub {
   my ($artist, @cd_titles) = @_;
@@ -178,3 +178,13 @@ my $fail_code = sub {
   ok(!defined($cd), q{failed txn_do didn't add failed txn's cd});
 }
 
+# Grab a new schema to test txn before connect
+{
+    my $schema2 = DBICTest->init_schema(no_deploy => 1);
+    eval {
+        $schema2->txn_begin();
+        $schema2->txn_begin();
+    };
+    my $err = $@;
+    ok(($err eq ''), 'Pre-connection nested transactions.');
+}