Fix a forgotten nested try::tiny usage
Peter Rabbitson [Sun, 14 Nov 2010 12:37:28 +0000 (13:37 +0100)]
Changes
lib/DBIx/Class/Storage/DBI.pm
t/52leaks.t

diff --git a/Changes b/Changes
index 0392453..d464eea 100644 (file)
--- a/Changes
+++ b/Changes
@@ -16,16 +16,17 @@ Revision history for DBIx::Class
           on insert
         - Fixed incorrect composition of select/as/columns attributes during
           chaining (RT#61235)
+        - Proper serialization of resultsets with open cursors
         - Refactor handling of RDBMS-side values during insert() - fix
           regression of inserts into a Postgres / ::Replicated combination
         - Missing dependency check in t/60core.t (RT#62635)
         - Fix regressions in IC::DT registration logic
+        - Fix infinite loops on old perls with a recent Try::Tiny
+
+    * Misc
         - Switch all serialization to use Storable::nfreeze for portable
           architecture independent ice
 
-    * Fixes
-        - Proper serialization of resultsets with open cursors
-
 0.08124 2010-10-28 14:23 (UTC)
     * New Features / Changes
         - Add new -ident "function" indicating rhs is a column name
index cd2da9e..c7f0ec8 100644 (file)
@@ -1849,15 +1849,14 @@ sub _dbh_execute_inserts_with_no_binds {
   }
   catch {
     $err = shift;
+  };
+
+  # Make sure statement is finished even if there was an exception.
+  try {
+    $sth->finish
   }
-  finally {
-    # Make sure statement is finished even if there was an exception.
-    try {
-      $sth->finish
-    }
-    catch {
-      $err = shift unless defined $err;
-    };
+  catch {
+    $err = shift unless defined $err;
   };
 
   $self->throw_exception($err) if defined $err;
index 79f6a1c..4f75810 100644 (file)
@@ -97,9 +97,10 @@ unless (DBICTest::RunMode->is_plain) {
 
   ok ($storage->connected, 'we are connected');
 
-  my $row_obj = $rs->next;
+  my $row_obj = $rs->search({}, { rows => 1})->next;  # so that commits/rollbacks work
   ok ($row_obj, 'row from db');
 
+  # txn_do to invoke more codepaths
   my ($mc_row_obj, $pager, $pager_explicit_count) = $schema->txn_do (sub {
 
     my $artist = $rs->create ({
@@ -122,6 +123,25 @@ unless (DBICTest::RunMode->is_plain) {
   # based on 66 per 10 pages
   is ($pager_explicit_count->last_page, 7, 'Correct last page');
 
+  # do some population (invokes some extra codepaths)
+  # also exercise the guard code and the manual txn control
+  {
+    my $guard = $schema->txn_scope_guard;
+    # populate with bindvars
+    $rs->populate([{ name => 'James Bound' }]);
+    $guard->commit;
+
+    $schema->txn_begin;
+    # populate mixed
+    $rs->populate([{ name => 'James Rebound', rank => \ '11'  }]);
+    $schema->txn_commit;
+
+    $schema->txn_begin;
+    # and without bindvars
+    $rs->populate([{ name => \ '"James Unbound"' }]);
+    $schema->txn_rollback;
+  }
+
   my $base_collection = {
     schema => $schema,
     storage => $storage,