Hi,
I'm not a member of this list (yet), so please
CC me on responses and
discussion.
The patch below seems to be completion of work already
started, because the boolean remoteTrFlag was already defined, and all
I had to add was its setting and two references.
I hope someone will find it useful,
Jonathan
--- dblink.c Sat Jan 1 00:43:05 2005
+++ /home/jbeitaharon/dev/third/postgreSQL/contrib/dblink/dblink.c
Thu Sep 22 16:10:20 2005
@@ -329,12 +329,16 @@
if (!conn)
DBLINK_CONN_NOT_AVAIL;
+
+ if (rcon)
+ rcon->remoteTrFlag = (PQtransactionStatus(conn) !=
PQTRANS_IDLE);
- res = PQexec(conn, "BEGIN");
- if (PQresultStatus(res) != PGRES_COMMAND_OK)
- DBLINK_RES_INTERNALERROR("begin error");
-
- PQclear(res);
+ if ((!rcon) || (!(rcon->remoteTrFlag))) {
+ res = PQexec(conn, "BEGIN");
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ DBLINK_RES_INTERNALERROR("begin error");
+ PQclear(res);
+ }
appendStringInfo(str, "DECLARE %s CURSOR FOR %s", curname, sql);
res = PQexec(conn, str->data);
@@ -424,12 +428,13 @@
PQclear(res);
- /* commit the transaction */
- res = PQexec(conn, "COMMIT");
- if (PQresultStatus(res) != PGRES_COMMAND_OK)
- DBLINK_RES_INTERNALERROR("commit error");
-
- PQclear(res);
+ if ((!rcon) || (!(rcon->remoteTrFlag))) {
+ /* commit the transaction */
+ res = PQexec(conn, "COMMIT");
+ if (PQresultStatus(res) != PGRES_COMMAND_OK)
+ DBLINK_RES_INTERNALERROR("commit error");
+ PQclear(res);
+ }
PG_RETURN_TEXT_P(GET_TEXT("OK"));
}