From: Neil Conway Date: Thu, 27 Jan 2005 01:32:00 +0000 (+0000) Subject: Add regression tests for recent cursor/savepoint bug fixed by Alvaro and X-Git-Tag: REL9_0_0~10877 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4fe201237faef8f30b395f1c5b350ce393f95ad3;p=pg-rex%2Fsyncrep.git Add regression tests for recent cursor/savepoint bug fixed by Alvaro and Tom. --- diff --git a/src/test/regress/expected/transactions.out b/src/test/regress/expected/transactions.out index 1c8ba64c5c..952875cfdf 100644 --- a/src/test/regress/expected/transactions.out +++ b/src/test/regress/expected/transactions.out @@ -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; diff --git a/src/test/regress/sql/transactions.sql b/src/test/regress/sql/transactions.sql index 0046974402..6aebfcc867 100644 --- a/src/test/regress/sql/transactions.sql +++ b/src/test/regress/sql/transactions.sql @@ -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;