From e582d2ee1a149502f49c7a337707b4a0f940a51d Mon Sep 17 00:00:00 2001 From: Joe Conway Date: Wed, 21 Jun 2006 16:43:46 +0000 Subject: [PATCH] - During dblink_open, if transaction state was IDLE, force cursor count to initially be 0. This is needed as a previous ABORT might have wiped out an automatically opened transaction without maintaining the cursor count. - Fix regression test expected file for the correct ERROR message, which we now get given the above bug fix. --- contrib/dblink/dblink.c | 7 +++++++ contrib/dblink/expected/dblink.out | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 7e98987dad8..61b5ab6d1da 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -354,6 +354,13 @@ dblink_open(PG_FUNCTION_ARGS) DBLINK_RES_INTERNALERROR("begin error"); PQclear(res); rconn->newXactForCursor = TRUE; + /* + * Since transaction state was IDLE, we force cursor count to + * initially be 0. This is needed as a previous ABORT might + * have wiped out our transaction without maintaining the + * cursor count for us. + */ + rconn->openCursorCount = 0; } /* if we started a transaction, increment cursor count */ diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out index 55d2b9e7c4c..f2e364a9423 100644 --- a/contrib/dblink/expected/dblink.out +++ b/contrib/dblink/expected/dblink.out @@ -509,7 +509,7 @@ SELECT dblink_close('myconn','rmt_foo_cursor'); -- this should fail because there is no open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ERROR: sql error -DETAIL: ERROR: cursor "xact_test" already exists +DETAIL: ERROR: DECLARE CURSOR may only be used in transaction blocks -- reset remote transaction state SELECT dblink_exec('myconn','ABORT');