From 1f7e1925410f1f74e599fda43a8c775401182863 Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas@2ndquadrant.com>
Date: Sun, 21 Apr 2024 14:28:46 +0200
Subject: [PATCH 2/2] add regression tests for CREATE DATABASE

---
 src/test/regress/expected/create_database.out | 55 +++++++++++++++++++
 src/test/regress/parallel_schedule            |  2 +-
 src/test/regress/sql/create_database.sql      | 44 +++++++++++++++
 3 files changed, 100 insertions(+), 1 deletion(-)
 create mode 100644 src/test/regress/expected/create_database.out
 create mode 100644 src/test/regress/sql/create_database.sql

diff --git a/src/test/regress/expected/create_database.out b/src/test/regress/expected/create_database.out
new file mode 100644
index 00000000000..241f178a370
--- /dev/null
+++ b/src/test/regress/expected/create_database.out
@@ -0,0 +1,55 @@
+-- error cases
+CREATE DATABASE regress_create_db_1 TEMPLATE regress_db_notexisting;
+ERROR:  template database "regress_db_notexisting" does not exist
+CREATE DATABASE regress_create_db_1 ENCODING 'incorrect-encoding';
+ERROR:  incorrect-encoding is not a valid encoding name
+LINE 1: CREATE DATABASE regress_create_db_1 ENCODING 'incorrect-enco...
+                                            ^
+CREATE DATABASE regress_create_db_1 STRATEGY incorrect_strategy;
+ERROR:  invalid create database strategy "incorrect_strategy"
+HINT:  Valid strategies are "wal_log" and "file_copy".
+CREATE DATABASE regress_create_db_1 LOCALE 'incorrect-locale';
+ERROR:  invalid LC_COLLATE locale name: "incorrect-locale"
+HINT:  If the locale name is specific to ICU, use ICU_LOCALE.
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER 'incorrect-locale-provider';
+ERROR:  unrecognized locale provider: incorrect-locale-provider
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin;
+ERROR:  LOCALE or BUILTIN_LOCALE must be specified
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin TEMPLATE template0;
+ERROR:  LOCALE or BUILTIN_LOCALE must be specified
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin LOCALE 'incorrect-locale';
+ERROR:  invalid LC_COLLATE locale name: "incorrect-locale"
+HINT:  If the locale name is specific to ICU, use ICU_LOCALE.
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin BUILTIN_LOCALE 'incorrect-locale';
+ERROR:  invalid locale name "incorrect-locale" for builtin provider
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin BUILTIN_LOCALE "C";
+ERROR:  new locale provider (builtin) does not match locale provider of the template database (libc)
+HINT:  Use the same locale provider as in the template database, or use template0 as template.
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc BUILTIN_LOCALE "C";
+ERROR:  BUILTIN_LOCALE cannot be specified unless locale provider is builtin
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc LOCALE "C";
+ERROR:  new collation (C) is incompatible with the collation of the template database (C.UTF-8)
+HINT:  Use the same collation as in the template database, or use template0 as template.
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc LOCALE "C" ENCODING "UTF-8";
+ERROR:  new collation (C) is incompatible with the collation of the template database (C.UTF-8)
+HINT:  Use the same collation as in the template database, or use template0 as template.
+CREATE DATABASE regress_create_db_1;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 ENCODING 'UTF-8';
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 STRATEGY wal_log;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 STRATEGY WAL_LOG;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 STRATEGY file_copy;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 STRATEGY FILE_COPY;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc LOCALE "C.UTF-8";
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin BUILTIN_LOCALE "C" TEMPLATE template0;
+DROP DATABASE regress_create_db_1;
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc;
+DROP DATABASE regress_create_db_1;
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index 675c5676171..f4e99a1775e 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -78,7 +78,7 @@ test: brin_bloom brin_multi
 # psql depends on create_am
 # amutils depends on geometry, create_index_spgist, hash_index, brin
 # ----------
-test: create_table_like alter_generic alter_operator misc async dbsize merge misc_functions sysviews tsrf tid tidscan tidrangescan collate.utf8 collate.icu.utf8 incremental_sort create_role without_overlaps
+test: create_table_like alter_generic alter_operator misc async dbsize merge misc_functions sysviews tsrf tid tidscan tidrangescan collate.utf8 collate.icu.utf8 incremental_sort create_database create_role without_overlaps
 
 # collate.linux.utf8 and collate.icu.utf8 tests cannot be run in parallel with each other
 test: rules psql psql_crosstab amutils stats_ext collate.linux.utf8 collate.windows.win1252
diff --git a/src/test/regress/sql/create_database.sql b/src/test/regress/sql/create_database.sql
new file mode 100644
index 00000000000..d4b7b194551
--- /dev/null
+++ b/src/test/regress/sql/create_database.sql
@@ -0,0 +1,44 @@
+-- error cases
+CREATE DATABASE regress_create_db_1 TEMPLATE regress_db_notexisting;
+CREATE DATABASE regress_create_db_1 ENCODING 'incorrect-encoding';
+CREATE DATABASE regress_create_db_1 STRATEGY incorrect_strategy;
+CREATE DATABASE regress_create_db_1 LOCALE 'incorrect-locale';
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER 'incorrect-locale-provider';
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin;
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin TEMPLATE template0;
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin LOCALE 'incorrect-locale';
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin BUILTIN_LOCALE 'incorrect-locale';
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin BUILTIN_LOCALE "C";
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc BUILTIN_LOCALE "C";
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc LOCALE "C";
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc LOCALE "C" ENCODING "UTF-8";
+
+CREATE DATABASE regress_create_db_1;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 ENCODING 'UTF-8';
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 STRATEGY wal_log;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 STRATEGY WAL_LOG;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 STRATEGY file_copy;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 STRATEGY FILE_COPY;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc LOCALE "C.UTF-8";
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER builtin BUILTIN_LOCALE "C" TEMPLATE template0;
+DROP DATABASE regress_create_db_1;
+
+CREATE DATABASE regress_create_db_1 LOCALE_PROVIDER libc;
+DROP DATABASE regress_create_db_1;
-- 
2.44.0

