From cda2992685caa6112e9cc5d2f1fd831f0fbb1321 Mon Sep 17 00:00:00 2001 From: Dilip Kumar Date: Fri, 11 Mar 2022 11:48:55 +0530 Subject: [PATCH v13 6/6] Support create database strategy in createdb tool Support create database strategy in createdb tool and add test case --- src/bin/scripts/createdb.c | 10 +++++++++- src/bin/scripts/t/020_createdb.pl | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/bin/scripts/createdb.c b/src/bin/scripts/createdb.c index b0c6805..479b295 100644 --- a/src/bin/scripts/createdb.c +++ b/src/bin/scripts/createdb.c @@ -37,6 +37,7 @@ main(int argc, char *argv[]) {"lc-collate", required_argument, NULL, 1}, {"lc-ctype", required_argument, NULL, 2}, {"locale", required_argument, NULL, 'l'}, + {"strategy", required_argument, NULL, 'S'}, {"maintenance-db", required_argument, NULL, 3}, {NULL, 0, NULL, 0} }; @@ -61,6 +62,7 @@ main(int argc, char *argv[]) char *lc_collate = NULL; char *lc_ctype = NULL; char *locale = NULL; + char *strategy = NULL; PQExpBufferData sql; @@ -73,7 +75,7 @@ main(int argc, char *argv[]) handle_help_version_opts(argc, argv, "createdb", help); - while ((c = getopt_long(argc, argv, "h:p:U:wWeO:D:T:E:l:", long_options, &optindex)) != -1) + while ((c = getopt_long(argc, argv, "h:p:U:wWeO:D:T:E:l:S:", long_options, &optindex)) != -1) { switch (c) { @@ -119,6 +121,9 @@ main(int argc, char *argv[]) case 3: maintenance_db = pg_strdup(optarg); break; + case 'S': + strategy = pg_strdup(optarg); + break; default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -217,6 +222,8 @@ main(int argc, char *argv[]) appendPQExpBufferStr(&sql, " LC_CTYPE "); appendStringLiteralConn(&sql, lc_ctype, conn); } + if (strategy) + appendPQExpBuffer(&sql, " STRATEGY=%s ", fmtId(strategy)); appendPQExpBufferChar(&sql, ';'); @@ -273,6 +280,7 @@ help(const char *progname) printf(_(" -l, --locale=LOCALE locale settings for the database\n")); printf(_(" --lc-collate=LOCALE LC_COLLATE setting for the database\n")); printf(_(" --lc-ctype=LOCALE LC_CTYPE setting for the database\n")); + printf(_(" -S, --strategy=STRATEGY database creation strategy wal_log or file_copy\n")); printf(_(" -O, --owner=OWNER database user to own the new database\n")); printf(_(" -T, --template=TEMPLATE template database to copy\n")); printf(_(" -V, --version output version information, then exit\n")); diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl index 6392454..2f9f3be 100644 --- a/src/bin/scripts/t/020_createdb.pl +++ b/src/bin/scripts/t/020_createdb.pl @@ -76,4 +76,24 @@ $node->command_checks_all( ], 'createdb with incorrect --lc-ctype'); +$node->command_checks_all( + [ 'createdb', '--strategy', "foo", 'foobar2' ], + 1, + [qr/^$/], + [ + qr/^createdb: error: database creation failed: ERROR: invalid create database strategy|^createdb: error: database creation failed: ERROR: invalid create database strategy foo/s + ], + 'createdb with incorrect --strategy'); + +# Check database creation strategy +$node->issues_sql_like( + [ 'createdb', '-T', 'foobar2', 'foobar4', '-S', 'wal_log'], + qr/statement: CREATE DATABASE foobar4 TEMPLATE foobar2 STRATEGY=wal_log/, + 'create database with WAL_LOG strategy'); + +$node->issues_sql_like( + [ 'createdb', '-T', 'foobar2', 'foobar5', '-S', 'file_copy'], + qr/statement: CREATE DATABASE foobar5 TEMPLATE foobar2 STRATEGY=file_copy/, + 'create database with FILE_COPY strategy'); + done_testing(); -- 1.8.3.1