diff options
| author | Joe Conway | 2006-06-21 16:43:11 +0000 |
|---|---|---|
| committer | Joe Conway | 2006-06-21 16:43:11 +0000 |
| commit | 1d895f426fdad4a0bfa9037b325f14004ceb9262 (patch) | |
| tree | 04420a159f46f1a8aed739a607c834df12c46c85 /contrib | |
| parent | 04c5b69603c4ec7f80022d0ae6d92ad8a6730141 (diff) | |
- 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.
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/dblink/dblink.c | 9 | ||||
| -rw-r--r-- | contrib/dblink/expected/dblink.out | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index e8b30185762..3b7afb7ac8f 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -8,7 +8,7 @@ * Darko Prenosil <Darko.Prenosil@finteh.hr> * Shridhar Daithankar <shridhar_daithankar@persistent.co.in> * - * $PostgreSQL: pgsql/contrib/dblink/dblink.c,v 1.55 2006/05/30 22:12:12 tgl Exp $ + * $PostgreSQL: pgsql/contrib/dblink/dblink.c,v 1.56 2006/06/21 16:43:11 joe Exp $ * Copyright (c) 2001-2006, PostgreSQL Global Development Group * ALL RIGHTS RESERVED; * @@ -361,6 +361,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'); |
