Subject: | savepoint rollback alters AC state |
Attached is a test that illustrates this behavior.
Subject: | dbd_sqlite_savepoint_rollback_test.patch |
Index: t/45_savepoints.t
===================================================================
--- t/45_savepoints.t (revision 0)
+++ t/45_savepoints.t (revision 0)
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use t::lib::Test;
+use Test::More tests => 3;
+use Test::NoWarnings;
+
+my $dbh = connect_ok(
+ AutoCommit => 1,
+ RaiseError => 1,
+);
+
+$dbh->begin_work;
+
+$dbh->do("CREATE TABLE MST (id, lbl)");
+
+$dbh->do("SAVEPOINT svp_0");
+
+$dbh->do("INSERT INTO MST VALUES(1, 'ITEM1')");
+$dbh->do("INSERT INTO MST VALUES(2, 'ITEM2')");
+$dbh->do("INSERT INTO MST VALUES(3, 'ITEM3')");
+
+my $ac = $dbh->{AutoCommit};
+
+ok((not $ac), 'AC != 1 inside txn');
+
+{
+ local $dbh->{AutoCommit} = $dbh->{AutoCommit};
+
+ $dbh->do("ROLLBACK TRANSACTION TO SAVEPOINT svp_0");
+
+ is $dbh->{AutoCommit}, $ac,
+ "rolling back savepoint doesn't alter AC";
+}
+
+is $dbh->selectrow_array("SELECT COUNT(*) FROM MST"), 0,
+ "savepoint rolled back";
+
+$dbh->rollback;