From d561f1caecbbeca2f7adab39a29432923d15b8ef Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 3 Mar 2016 19:37:13 -0300 Subject: [PATCH] pgbench: accept unambiguous builtin prefixes for -b MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it easier to use "-b se" instead of typing the full "-b select-only". Author: Fabien Coelho Reviewed-by: Michaƫl Paquier --- doc/src/sgml/ref/pgbench.sgml | 1 + src/bin/pgbench/pgbench.c | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml index f39f341a269..cc80b3fc4f5 100644 --- a/doc/src/sgml/ref/pgbench.sgml +++ b/doc/src/sgml/ref/pgbench.sgml @@ -269,6 +269,7 @@ pgbench options dbname Add the specified builtin script to the list of executed scripts. Available builtin scripts are: tpcb-like, simple-update and select-only. + Unambiguous prefixes of builtin names are accepted. With special name list, show the list of builtin scripts and exit immediately. diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 66cfdc9af8b..8b0b17a74ce 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -2746,22 +2746,36 @@ listAvailableScripts(void) fprintf(stderr, "\n"); } +/* return builtin script "name" if unambiguous */ static char * findBuiltin(const char *name, char **desc) { - int i; + int i, + found = 0, + len = strlen(name); + char *commands = NULL; for (i = 0; i < N_BUILTIN; i++) { - if (strncmp(builtin_script[i].name, name, - strlen(builtin_script[i].name)) == 0) + if (strncmp(builtin_script[i].name, name, len) == 0) { *desc = builtin_script[i].desc; - return builtin_script[i].commands; + commands = builtin_script[i].commands; + found++; } } - fprintf(stderr, "no builtin script found for name \"%s\"\n", name); + /* ok, unambiguous result */ + if (found == 1) + return commands; + + /* error cases */ + if (found == 0) + fprintf(stderr, "no builtin script found for name \"%s\"\n", name); + else /* found > 1 */ + fprintf(stderr, + "ambiguous builtin name: %d builtin scripts found for prefix \"%s\"\n", found, name); + listAvailableScripts(); exit(1); }