From 4fe201237faef8f30b395f1c5b350ce393f95ad3 Mon Sep 17 00:00:00 2001 From: Neil Conway Date: Thu, 27 Jan 2005 01:32:00 +0000 Subject: [PATCH] Add regression tests for recent cursor/savepoint bug fixed by Alvaro and Tom. --- src/test/regress/expected/transactions.out | 47 ++++++++++++++++++++++ src/test/regress/sql/transactions.sql | 35 ++++++++++++++++ 2 files changed, 82 insertions(+) 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; -- 2.40.0