summaryrefslogtreecommitdiff
path: root/t/45_savepoints.t
diff options
context:
space:
mode:
Diffstat (limited to 't/45_savepoints.t')
-rw-r--r--t/45_savepoints.t44
1 files changed, 44 insertions, 0 deletions
diff --git a/t/45_savepoints.t b/t/45_savepoints.t
new file mode 100644
index 0000000..87e5d49
--- /dev/null
+++ b/t/45_savepoints.t
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use t::lib::Test;
+use Test::More tests => 5;
+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;