summaryrefslogtreecommitdiff
path: root/src/backend/commands/dbcommands.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/dbcommands.c')
-rw-r--r--src/backend/commands/dbcommands.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 327aac29593..291770f98cc 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.106 2002/10/21 22:06:19 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.107 2002/11/02 18:41:21 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -122,14 +122,34 @@ createdb(const CreatedbStmt *stmt)
defel->defname);
}
- if (downer)
+ if (downer && downer->arg)
dbowner = strVal(downer->arg);
- if (dpath)
+ if (dpath && dpath->arg)
dbpath = strVal(dpath->arg);
- if (dtemplate)
+ if (dtemplate && dtemplate->arg)
dbtemplate = strVal(dtemplate->arg);
- if (dencoding)
- encoding = intVal(dencoding->arg);
+ if (dencoding && dencoding->arg)
+ {
+ const char *encoding_name;
+
+ if (IsA(dencoding->arg, Integer))
+ {
+ encoding = intVal(dencoding->arg);
+ encoding_name = pg_encoding_to_char(encoding);
+ if (strcmp(encoding_name, "") == 0 ||
+ pg_valid_server_encoding(encoding_name) < 0)
+ elog(ERROR, "%d is not a valid encoding code", encoding);
+ }
+ else if (IsA(dencoding->arg, String))
+ {
+ encoding_name = strVal(dencoding->arg);
+ if (pg_valid_server_encoding(encoding_name) < 0)
+ elog(ERROR, "%s is not a valid encoding name", encoding_name);
+ encoding = pg_char_to_encoding(encoding_name);
+ }
+ else
+ elog(ERROR, "CREATE DATABASE: bogus encoding parameter");
+ }
/* obtain sysid of proposed owner */
if (dbowner)