aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pgbench/pgbench.c15
-rw-r--r--src/bin/pgbench/t/001_pgbench_with_server.pl28
2 files changed, 41 insertions, 2 deletions
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 25744548392..7b53f9c24da 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -3763,10 +3763,21 @@ advanceConnectionState(TState *thread, CState *st, StatsData *agg)
case CSTATE_START_COMMAND:
command = sql_script[st->use_file].commands[st->command];
- /* Transition to script end processing if done */
+ /*
+ * Transition to script end processing if done, but close up
+ * shop if a pipeline is open at this point.
+ */
if (command == NULL)
{
- st->state = CSTATE_END_TX;
+ if (PQpipelineStatus(st->con) == PQ_PIPELINE_OFF)
+ st->state = CSTATE_END_TX;
+ else
+ {
+ pg_log_error("client %d aborted: end of script reached with pipeline open",
+ st->id);
+ st->state = CSTATE_ABORTED;
+ }
+
break;
}
diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl
index fc57facf9e2..f60f7e89c1f 100644
--- a/src/bin/pgbench/t/001_pgbench_with_server.pl
+++ b/src/bin/pgbench/t/001_pgbench_with_server.pl
@@ -876,6 +876,34 @@ select 1 \gset f
}
});
+# Try \startpipeline without \endpipeline in a single transaction
+$node->pgbench(
+ '-t 1 -n -M extended',
+ 2,
+ [],
+ [qr{end of script reached with pipeline open}],
+ 'error: call \startpipeline without \endpipeline in a single transaction',
+ {
+ '001_pgbench_pipeline_5' => q{
+-- startpipeline only with single transaction
+\startpipeline
+}
+ });
+
+# Try \startpipeline without \endpipeline
+$node->pgbench(
+ '-t 2 -n -M extended',
+ 2,
+ [],
+ [qr{end of script reached with pipeline open}],
+ 'error: call \startpipeline without \endpipeline',
+ {
+ '001_pgbench_pipeline_6' => q{
+-- startpipeline only
+\startpipeline
+}
+ });
+
# Working \startpipeline in prepared query mode with serializable
$node->pgbench(
'-c4 -t 10 -n -M prepared',