pgbench-into-23-delta.patch
text/x-diff
Filename: pgbench-into-23-delta.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| doc/src/sgml/ref/pgbench.sgml | 24 | 21 |
| src/bin/pgbench/pgbench.c | 2 | 5 |
| src/bin/pgbench/pgbench.h | 0 | 1 |
commit 32076235c0d7fc59ad4b1b1ff876c74c40b34efb[m
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
AuthorDate: Mon Nov 19 14:29:14 2018 -0300
CommitDate: Mon Nov 19 14:29:17 2018 -0300
tweaks
diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
index 246944ea79..3d9dd512bb 100644
--- a/doc/src/sgml/ref/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -961,25 +961,33 @@ pgbench <optional> <replaceable>options</replaceable> </optional> <replaceable>d
<listitem>
<para>
- This command may be used to end SQL queries, replacing an embedded
- semicolon (<literal>\;</literal>) within a compound SQL command.
+ This command may be used to end individual SQL queries within a
+ compound SQL command, acting as a command separator
+ like an escaped semicolon (<literal>\;</literal>).
+ A query terminated with <literal>\cset</literal> will
+ have its results stored into variables instead of the
+ usual behavior of discarding the result.
</para>
<para>
- When this command is used, the preceding SQL query is expected to
- return one row, the columns of which are stored into variables named after
- column names, and prefixed with <replaceable>prefix</replaceable> if provided.
+ Queries terminated by <literal>\cset</literal> are expected
+ to return exactly one row. The values in the row are saved
+ into <application>pgbench</application> variables, the name
+ of each variable being determined by prefixing each column name
+ with <replaceable>prefix</replaceable> if one is provided.
</para>
<para>
- The following example sends three queries as one compound SQL command,
- inducing one message sent at the protocol level.
- The result of the second query is stored into variable <replaceable>two</replaceable>,
- whereas the results of the other queries are discarded.
+ The following example sends one message to the server, containing three
+ SQL queries. The result of the second query is processed and stored into
+ variables <replaceable>v_two</replaceable> and
+ <replaceable>v_three</replaceable>.
+ The results of the other queries are discarded in the usual way.
<programlisting>
-- compound of 3 queries
-SELECT 1 AS one \; SELECT 2 AS two \cset
-SELECT 2;
+SELECT * AS one FROM generate_series(1,100) \;
+select count(*) as accounts from pgbench_accounts \cset num_
+TABLE pgbench_accounts LIMIT 1;
</programlisting>
</para>
@@ -999,14 +1007,12 @@ SELECT 2;
<listitem>
<para>
- This commands may be used to end SQL queries, replacing a final semicolon
+ This command may be used to end an SQL query, like a semicolon
(<literal>;</literal>).
- </para>
-
- <para>
When this command is used, the preceding SQL query is expected to
- return one row, the columns of which are stored into variables named after
- column names, and prefixed with <replaceable>prefix</replaceable> if provided.
+ return one row, the columns of which are stored into variables named
+ after each column name prefixed with <replaceable>prefix</replaceable>
+ if provided.
</para>
<para>
@@ -1019,10 +1025,7 @@ SELECT 2;
UPDATE pgbench_accounts
SET abalance = abalance + :delta
WHERE aid = :aid
- RETURNING abalance \gset
--- compound of two queries
-SELECT 1 \;
-SELECT 2 AS two, 3 AS three \gset p_
+ RETURNING abalance \gset p_
</programlisting>
</para>
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 3467598aa9..60e5fe972a 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -34,6 +34,7 @@
#include "postgres_fe.h"
#include "common/int.h"
#include "fe_utils/conditional.h"
+#include "fe_utils/psqlscan_int.h"
#include "getopt_long.h"
#include "libpq-fe.h"
#include "portability/instr_time.h"
@@ -1630,14 +1631,12 @@ assignVariables(CState *st, char *sql)
if (name == NULL)
{
while (*p == ':')
- {
p++;
- }
continue;
}
val = getVariable(st, name);
- free(name);
+ pg_free(name);
if (val == NULL)
{
p++;
@@ -4106,9 +4105,7 @@ parseQuery(Command *cmd)
if (name == NULL)
{
while (*p == ':')
- {
p++;
- }
continue;
}
diff --git a/src/bin/pgbench/pgbench.h b/src/bin/pgbench/pgbench.h
index f4a7327dc7..de50340434 100644
--- a/src/bin/pgbench/pgbench.h
+++ b/src/bin/pgbench/pgbench.h
@@ -11,7 +11,6 @@
#ifndef PGBENCH_H
#define PGBENCH_H
-#include "fe_utils/psqlscan_int.h"
#include "fe_utils/psqlscan.h"
/*