aboutsummaryrefslogtreecommitdiff
path: root/src/test/modules/libpq_pipeline/libpq_pipeline.c
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2022-09-23 18:11:48 +0200
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2022-09-23 18:11:48 +0200
commit27e04412c9c3c3c3b2d182821c759f95693c0039 (patch)
tree00660fc2d9493906f0963c0d994ce03520cbed19 /src/test/modules/libpq_pipeline/libpq_pipeline.c
parenta2ab0ad88cf87e0dcd9fc4c7fcfac132a4e88d2a (diff)
downloadpostgresql-27e04412c9c3c3c3b2d182821c759f95693c0039.tar.gz
postgresql-27e04412c9c3c3c3b2d182821c759f95693c0039.zip
Stop using PQsendQuery in libpq_pipeline
The "emulation" I wrote for PQsendQuery in pipeline mode to use extended query protocol, in commit acb7e4eb6b1c, is problematic. Due to numerous bugs we'll soon remove it. As a first step and for all branches back to 14, stop using PQsendQuery in libpq_pipeline. Also remove a few test lines that will no longer be relevant. Backpatch to 14. Discussion: https://postgr.es/m/CA+mi_8ZGSQNmW6-mk_iSR4JZB_LJ4ww3suOF+1vGNs3MrLsv4g@mail.gmail.com
Diffstat (limited to 'src/test/modules/libpq_pipeline/libpq_pipeline.c')
-rw-r--r--src/test/modules/libpq_pipeline/libpq_pipeline.c138
1 files changed, 8 insertions, 130 deletions
diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c
index 04a56ca505c..ac62d475b91 100644
--- a/src/test/modules/libpq_pipeline/libpq_pipeline.c
+++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c
@@ -499,7 +499,7 @@ test_pipeline_abort(PGconn *conn)
PQerrorMessage(conn));
/* Try to send two queries in one command */
- if (PQsendQuery(conn, "SELECT 1; SELECT 2") != 1)
+ if (PQsendQueryParams(conn, "SELECT 1; SELECT 2", 0, NULL, NULL, NULL, NULL, 0) != 1)
pg_fatal("failed to send query: %s", PQerrorMessage(conn));
if (PQpipelineSync(conn) != 1)
pg_fatal("pipeline sync failed: %s", PQerrorMessage(conn));
@@ -531,7 +531,8 @@ test_pipeline_abort(PGconn *conn)
fprintf(stderr, "ok\n");
/* Test single-row mode with an error partways */
- if (PQsendQuery(conn, "SELECT 1.0/g FROM generate_series(3, -1, -1) g") != 1)
+ if (PQsendQueryParams(conn, "SELECT 1.0/g FROM generate_series(3, -1, -1) g",
+ 0, NULL, NULL, NULL, NULL, 0) != 1)
pg_fatal("failed to send query: %s", PQerrorMessage(conn));
if (PQpipelineSync(conn) != 1)
pg_fatal("pipeline sync failed: %s", PQerrorMessage(conn));
@@ -991,133 +992,10 @@ test_pipeline_idle(PGconn *conn)
PQsetNoticeProcessor(conn, notice_processor, &n_notices);
- /*
- * Cause a Close message to be sent to the server, and watch libpq's
- * reaction to the resulting CloseComplete. libpq must not get in IDLE
- * state until that has been received.
- */
- if (PQenterPipelineMode(conn) != 1)
- pg_fatal("failed to enter pipeline mode: %s", PQerrorMessage(conn));
-
- if (PQsendQuery(conn, "SELECT 1") != 1)
- pg_fatal("failed to send query: %s", PQerrorMessage(conn));
- PQsendFlushRequest(conn);
- res = PQgetResult(conn);
- if (res == NULL)
- pg_fatal("PQgetResult returned null when there's a pipeline item: %s",
- PQerrorMessage(conn));
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- pg_fatal("Unexpected result code %s from first pipeline item",
- PQresStatus(PQresultStatus(res)));
- PQclear(res);
-
- res = PQgetResult(conn);
- if (res != NULL)
- pg_fatal("expected NULL result");
-
- if (PQpipelineSync(conn) != 1)
- pg_fatal("pipeline sync failed: %s", PQerrorMessage(conn));
- res = PQgetResult(conn);
- if (res == NULL)
- pg_fatal("PQgetResult returned null when there's a pipeline item: %s",
- PQerrorMessage(conn));
- if (PQresultStatus(res) != PGRES_PIPELINE_SYNC)
- pg_fatal("Unexpected result code %s instead of PGRES_PIPELINE_SYNC, error: %s",
- PQresStatus(PQresultStatus(res)), PQerrorMessage(conn));
- PQclear(res);
- res = NULL;
-
- if (PQexitPipelineMode(conn) != 1)
- pg_fatal("attempt to exit pipeline mode failed when it should've succeeded: %s",
- PQerrorMessage(conn));
-
- /*
- * Must not have got any notices here; note bug as described in
- * https://postgr.es/m/CA+mi_8bvD0_CW3sumgwPvWdNzXY32itoG_16tDYRu_1S2gV2iw@mail.gmail.com
- */
- if (n_notices > 0)
- pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 1\n");
-
- /*
- * Verify that we can send a query using simple query protocol after one
- * in pipeline mode.
- */
- if (PQenterPipelineMode(conn) != 1)
- pg_fatal("failed to enter pipeline mode: %s", PQerrorMessage(conn));
- if (PQsendQuery(conn, "SELECT 1") != 1)
- pg_fatal("failed to send query: %s", PQerrorMessage(conn));
- PQsendFlushRequest(conn);
- res = PQgetResult(conn);
- if (res == NULL)
- pg_fatal("PQgetResult returned null when there's a pipeline item: %s",
- PQerrorMessage(conn));
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- pg_fatal("unexpected result code %s from first pipeline item",
- PQresStatus(PQresultStatus(res)));
- res = PQgetResult(conn);
- if (res != NULL)
- pg_fatal("got unexpected non-null result");
- /* We can exit pipeline mode now */
- if (PQexitPipelineMode(conn) != 1)
- pg_fatal("attempt to exit pipeline mode failed when it should've succeeded: %s",
- PQerrorMessage(conn));
- res = PQexec(conn, "SELECT 2");
- if (n_notices > 0)
- pg_fatal("got %d notice(s)", n_notices);
- if (res == NULL)
- pg_fatal("PQexec returned NULL");
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- pg_fatal("unexpected result code %s from non-pipeline query",
- PQresStatus(PQresultStatus(res)));
- res = PQgetResult(conn);
- if (res != NULL)
- pg_fatal("did not receive terminating NULL");
- if (n_notices > 0)
- pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 2\n");
-
- /*
- * Case 2: exiting pipeline mode is not OK if a second command is sent.
- */
-
- if (PQenterPipelineMode(conn) != 1)
- pg_fatal("failed to enter pipeline mode: %s", PQerrorMessage(conn));
- if (PQsendQuery(conn, "SELECT 1") != 1)
- pg_fatal("failed to send query: %s", PQerrorMessage(conn));
- PQsendFlushRequest(conn);
- res = PQgetResult(conn);
- if (res == NULL)
- pg_fatal("PQgetResult returned null when there's a pipeline item: %s",
- PQerrorMessage(conn));
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- pg_fatal("unexpected result code %s from first pipeline item",
- PQresStatus(PQresultStatus(res)));
- if (PQsendQuery(conn, "SELECT 2") != 1)
- pg_fatal("failed to send query: %s", PQerrorMessage(conn));
- PQsendFlushRequest(conn);
- /* read terminating null from first query */
- res = PQgetResult(conn);
- if (res != NULL)
- pg_fatal("did not receive terminating NULL");
- res = PQgetResult(conn);
- if (res == NULL)
- pg_fatal("PQgetResult returned null when there's a pipeline item: %s",
- PQerrorMessage(conn));
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- pg_fatal("unexpected result code %s from first pipeline item",
- PQresStatus(PQresultStatus(res)));
- res = PQgetResult(conn);
- if (res != NULL)
- pg_fatal("did not receive terminating NULL");
- if (PQexitPipelineMode(conn) != 1)
- pg_fatal("attempt to exit pipeline mode failed when it should've succeeded: %s",
- PQerrorMessage(conn));
-
/* Try to exit pipeline mode in pipeline-idle state */
if (PQenterPipelineMode(conn) != 1)
pg_fatal("failed to enter pipeline mode: %s", PQerrorMessage(conn));
- if (PQsendQuery(conn, "SELECT 1") != 1)
+ if (PQsendQueryParams(conn, "SELECT 1", 0, NULL, NULL, NULL, NULL, 0) != 1)
pg_fatal("failed to send query: %s", PQerrorMessage(conn));
PQsendFlushRequest(conn);
res = PQgetResult(conn);
@@ -1131,7 +1009,7 @@ test_pipeline_idle(PGconn *conn)
res = PQgetResult(conn);
if (res != NULL)
pg_fatal("did not receive terminating NULL");
- if (PQsendQuery(conn, "SELECT 2") != 1)
+ if (PQsendQueryParams(conn, "SELECT 2", 0, NULL, NULL, NULL, NULL, 0) != 1)
pg_fatal("failed to send query: %s", PQerrorMessage(conn));
if (PQexitPipelineMode(conn) == 1)
pg_fatal("exiting pipeline succeeded when it shouldn't");
@@ -1153,12 +1031,12 @@ test_pipeline_idle(PGconn *conn)
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 3\n");
+ fprintf(stderr, "ok - 1\n");
/* Have a WARNING in the middle of a resultset */
if (PQenterPipelineMode(conn) != 1)
pg_fatal("entering pipeline mode failed: %s", PQerrorMessage(conn));
- if (PQsendQuery(conn, "SELECT pg_catalog.pg_advisory_unlock(1,1)") != 1)
+ if (PQsendQueryParams(conn, "SELECT pg_catalog.pg_advisory_unlock(1,1)", 0, NULL, NULL, NULL, NULL, 0) != 1)
pg_fatal("failed to send query: %s", PQerrorMessage(conn));
PQsendFlushRequest(conn);
res = PQgetResult(conn);
@@ -1168,7 +1046,7 @@ test_pipeline_idle(PGconn *conn)
pg_fatal("unexpected result code %s", PQresStatus(PQresultStatus(res)));
if (PQexitPipelineMode(conn) != 1)
pg_fatal("failed to exit pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok - 4\n");
+ fprintf(stderr, "ok - 2\n");
}
static void