On 2021-Jun-07, Alvaro Herrera wrote: > The attached patch does it. Any opinions?
Eh, really attached. -- Álvaro Herrera 39°49'30"S 73°17'W "No es bueno caminar con un hombre muerto"
>From c5c6e8860e9d425ddea82e32868fedc7562ec51c Mon Sep 17 00:00:00 2001 From: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Mon, 7 Jun 2021 18:06:28 -0400 Subject: [PATCH] Add 'Portal Close' to pipelined PQsendQuery() --- src/interfaces/libpq/fe-exec.c | 8 +++++++- .../modules/libpq_pipeline/traces/pipeline_abort.trace | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 03592bdce9..213e5576a1 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -1329,7 +1329,8 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery) { /* * In pipeline mode we cannot use the simple protocol, so we send - * Parse, Bind, Describe Portal, Execute. + * Parse, Bind, Describe Portal, Execute, Close Portal (with the + * unnamed portal). */ if (pqPutMsgStart('P', conn) < 0 || pqPuts("", conn) < 0 || @@ -1355,6 +1356,11 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery) pqPutInt(0, 4, conn) < 0 || pqPutMsgEnd(conn) < 0) goto sendFailed; + if (pqPutMsgStart('C', conn) < 0 || + pqPutc('P', conn) < 0 || + pqPuts("", conn) < 0 || + pqPutMsgEnd(conn) < 0) + goto sendFailed; entry->queryclass = PGQUERY_EXTENDED; entry->query = strdup(query); diff --git a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace index 254e485997..3fce548b99 100644 --- a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace +++ b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace @@ -38,6 +38,7 @@ F 26 Parse "" "SELECT 1; SELECT 2" 0 F 12 Bind "" "" 0 0 0 F 6 Describe P "" F 9 Execute "" 0 +F 6 Close P "" F 4 Sync B NN ErrorResponse S "ERROR" V "ERROR" C "42601" M "cannot insert multiple commands into a prepared statement" F "SSSS" L "SSSS" R "SSSS" \x00 B 5 ReadyForQuery I @@ -45,6 +46,7 @@ F 54 Parse "" "SELECT 1.0/g FROM generate_series(3, -1, -1) g" 0 F 12 Bind "" "" 0 0 0 F 6 Describe P "" F 9 Execute "" 0 +F 6 Close P "" F 4 Sync B 4 ParseComplete B 4 BindComplete -- 2.20.1