At 2004-10-16 18:41:05 -0400, [EMAIL PROTECTED] wrote: > > I think the cleanest solution is probably to add a state flag indicating > whether ParseComplete should generate a PGresult or not.
Like the appended (incremental) patch? (I didn't think this would work, because I thought libpq would allow you to send multiple queries before trying to read results. But you said it didn't support that, so...) -- ams --- libpq-int.h.1~ 2004-10-18 17:42:13.175759981 +0530 +++ libpq-int.h 2004-10-18 17:43:40.105986570 +0530 @@ -269,6 +269,8 @@ * nonblock sending semantics */ bool ext_query; /* was our last query sent with extended * query protocol? */ + bool sent_prepare; /* was our last Parse message sent with + * PQprepare? */ char copy_is_binary; /* 1 = copy binary, 0 = copy text */ int copy_already_done; /* # bytes already returned in * COPY OUT */ --- fe-exec.c.2~ 2004-10-18 17:47:55.540189274 +0530 +++ fe-exec.c 2004-10-18 17:48:30.119038902 +0530 @@ -686,6 +686,7 @@ goto sendFailed; conn->ext_query = true; + conn->sent_prepare = true; if (pqFlush(conn) < 0) goto sendFailed; conn->asyncStatus = PGASYNC_BUSY; --- fe-protocol3.c.2~ 2004-10-18 17:44:06.616198123 +0530 +++ fe-protocol3.c 2004-10-18 17:46:34.431656569 +0530 @@ -220,10 +220,13 @@ conn->asyncStatus = PGASYNC_READY; break; case '1': /* Parse Complete */ - if (conn->result == NULL) - conn->result = PQmakeEmptyPGresult(conn, - PGRES_COMMAND_OK); - conn->asyncStatus = PGASYNC_READY; + if (conn->sent_prepare) { + if (!conn->result) + conn->result = PQmakeEmptyPGresult(conn, + PGRES_COMMAND_OK); + conn->asyncStatus = PGASYNC_READY; + conn->sent_prepare = false; + } break; case '2': /* Bind Complete */ case '3': /* Close Complete */ --- libpq-fe.h.2~ 2004-10-18 17:55:40.632064120 +0530 +++ libpq-fe.h 2004-10-18 17:56:26.501634328 +0530 @@ -312,9 +312,9 @@ int resultFormat); /* Interface for multiple-result or asynchronous queries */ -extern PGresult *PQsendPrepare(PGconn *conn, const char *stmtName, - const char *query, int nParams, - const Oid *paramTypes); +extern int PQsendPrepare(PGconn *conn, const char *stmtName, + const char *query, int nParams, + const Oid *paramTypes); extern int PQsendQuery(PGconn *conn, const char *query); extern int PQsendQueryParams(PGconn *conn, const char *command, ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faqs/FAQ.html