Hello,
Patch looks good to me, and work fine on my machine. One minor observation is option 'list' mostly used to list the elements like "pgbench -b list" shows the available builtin scripts. Therefore we should use a word which seems to be more relevant like --show-script.
Thanks for the review.Here is a version with "--show-script". I also thought about "--listing", maybe.
The new status of this patch is: Waiting on Author
-- Fabien.
diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml index ee2501be55..c48593cfb9 100644 --- a/doc/src/sgml/ref/pgbench.sgml +++ b/doc/src/sgml/ref/pgbench.sgml @@ -355,7 +355,6 @@ pgbench <optional> <replaceable>options</replaceable> </optional> <replaceable>d </listitem> </varlistentry> - <varlistentry> <term><option>-c</option> <replaceable>clients</replaceable></term> <term><option>--client=</option><replaceable>clients</replaceable></term> @@ -617,6 +616,16 @@ pgbench <optional> <replaceable>options</replaceable> </optional> <replaceable>d </listitem> </varlistentry> + <varlistentry> + <term><option>--show-script</option><replaceable>scriptname</replaceable></term> + <listitem> + <para> + Show the actual code of builtin script <replaceable>scriptname</replaceable> + on stderr, and exit immediately. + </para> + </listitem> + </varlistentry> + <varlistentry> <term><option>-t</option> <replaceable>transactions</replaceable></term> <term><option>--transactions=</option><replaceable>transactions</replaceable></term> diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index a03ab281a5..55e6f6464a 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -651,6 +651,7 @@ usage(void) " --progress-timestamp use Unix epoch timestamps for progress\n" " --random-seed=SEED set random seed (\"time\", \"rand\", integer)\n" " --sampling-rate=NUM fraction of transactions to log (e.g., 0.01 for 1%%)\n" + " --show-script=NAME show builtin script code, then exit\n" "\nCommon options:\n" " -d, --debug print debugging output\n" " -h, --host=HOSTNAME database server host or socket directory\n" @@ -4648,7 +4649,7 @@ listAvailableScripts(void) fprintf(stderr, "Available builtin scripts:\n"); for (i = 0; i < lengthof(builtin_script); i++) - fprintf(stderr, "\t%s\n", builtin_script[i].name); + fprintf(stderr, " %13s: %s\n", builtin_script[i].name, builtin_script[i].desc); fprintf(stderr, "\n"); } @@ -5088,6 +5089,7 @@ main(int argc, char **argv) {"log-prefix", required_argument, NULL, 7}, {"foreign-keys", no_argument, NULL, 8}, {"random-seed", required_argument, NULL, 9}, + {"show-script", required_argument, NULL, 10}, {NULL, 0, NULL, 0} }; @@ -5440,6 +5442,13 @@ main(int argc, char **argv) exit(1); } break; + case 10: /* list */ + { + const BuiltinScript *s = findBuiltin(optarg); + fprintf(stderr, "-- %s: %s\n%s\n", s->name, s->desc, s->script); + exit(0); + } + break; default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl index 69a6d03bb3..f7fa18418b 100644 --- a/src/bin/pgbench/t/002_pgbench_no_server.pl +++ b/src/bin/pgbench/t/002_pgbench_no_server.pl @@ -218,6 +218,15 @@ pgbench( ], 'pgbench builtin list'); +# builtin listing +pgbench( + '--show-script se', + 0, + [qr{^$}], + [ qr{select-only: }, qr{SELECT abalance FROM pgbench_accounts WHERE}, + qr{(?!UPDATE)}, qr{(?!INSERT)} ], + 'pgbench builtin listing'); + my @script_tests = ( # name, err, { file => contents }