diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2016-03-03 19:37:13 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2016-03-03 19:37:13 -0300 |
commit | d561f1caecbbeca2f7adab39a29432923d15b8ef (patch) | |
tree | 7d70e8552435b68d4b055b379fa46a216a51a04b /src | |
parent | 2c83f435a3deca745c666e9778229d64cb2dfc79 (diff) | |
download | postgresql-d561f1caecbbeca2f7adab39a29432923d15b8ef.tar.gz postgresql-d561f1caecbbeca2f7adab39a29432923d15b8ef.zip |
pgbench: accept unambiguous builtin prefixes for -b
This makes it easier to use "-b se" instead of typing the full "-b
select-only".
Author: Fabien Coelho
Reviewed-by: Michaƫl Paquier
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pgbench/pgbench.c | 24 |
1 files changed, 19 insertions, 5 deletions
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); } |