]> granicus.if.org Git - postgresql/commitdiff
Add regression tests for recent cursor/savepoint bug fixed by Alvaro and
authorNeil Conway <neilc@samurai.com>
Thu, 27 Jan 2005 01:32:00 +0000 (01:32 +0000)
committerNeil Conway <neilc@samurai.com>
Thu, 27 Jan 2005 01:32:00 +0000 (01:32 +0000)
Tom.

src/test/regress/expected/transactions.out
src/test/regress/sql/transactions.sql

index 1c8ba64c5c016cb15c8aa5316d92a03c152d5977..952875cfdf1a269d323e1bffa0cf5d651164790e 100644 (file)
@@ -470,3 +470,50 @@ ROLLBACK;
 DROP TABLE foo;
 DROP TABLE baz;
 DROP TABLE barbaz;
+-- verify that cursors created during an aborted subtransaction are
+-- closed, but that we do not rollback the effect of any FETCHs
+-- performed in the aborted subtransaction
+begin;
+savepoint x;
+create table abc (a int);
+insert into abc values (5);
+insert into abc values (10);
+declare foo cursor for select * from abc;
+fetch from foo;
+ a 
+---
+ 5
+(1 row)
+
+rollback to x;
+-- should fail
+fetch from foo;
+ERROR:  cursor "foo" does not exist
+commit;
+begin;
+create table abc (a int);
+insert into abc values (5);
+insert into abc values (10);
+insert into abc values (15);
+declare foo cursor for select * from abc;
+fetch from foo;
+ a 
+---
+ 5
+(1 row)
+
+savepoint x;
+fetch from foo;
+ a  
+----
+ 10
+(1 row)
+
+rollback to x;
+fetch from foo;
+ a  
+----
+ 15
+(1 row)
+
+abort;
index 0046974402b8ae2f96fac94fb913efad1f7e0a8a..6aebfcc867e6770a8d4441ef48c1a9e5295bd959 100644 (file)
@@ -290,3 +290,38 @@ ROLLBACK;
 DROP TABLE foo;
 DROP TABLE baz;
 DROP TABLE barbaz;
+
+-- verify that cursors created during an aborted subtransaction are
+-- closed, but that we do not rollback the effect of any FETCHs
+-- performed in the aborted subtransaction
+begin;
+
+savepoint x;
+create table abc (a int);
+insert into abc values (5);
+insert into abc values (10);
+declare foo cursor for select * from abc;
+fetch from foo;
+rollback to x;
+
+-- should fail
+fetch from foo;
+commit;
+
+begin;
+
+create table abc (a int);
+insert into abc values (5);
+insert into abc values (10);
+insert into abc values (15);
+declare foo cursor for select * from abc;
+
+fetch from foo;
+
+savepoint x;
+fetch from foo;
+rollback to x;
+
+fetch from foo;
+
+abort;