diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml index 72a77a873c..715824f21d 100644 --- a/doc/src/sgml/charset.sgml +++ b/doc/src/sgml/charset.sgml @@ -1,4 +1,4 @@ - + Localization</> @@ -749,7 +749,7 @@ createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr Another way to accomplish this is to use this SQL command: <programlisting> -CREATE DATABASE korean WITH ENCODING 'EUC_KR' COLLATE='ko_KR.euckr' CTYPE='ko_KR.euckr' TEMPLATE=template0; +CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0; </programlisting> The encoding for a database is stored in the system catalog diff --git a/doc/src/sgml/keywords.sgml b/doc/src/sgml/keywords.sgml index 5ea6da68a6..e7641dc468 100644 --- a/doc/src/sgml/keywords.sgml +++ b/doc/src/sgml/keywords.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/keywords.sgml,v 2.23 2009/02/24 10:06:31 petere Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/keywords.sgml,v 2.24 2009/04/06 08:42:52 heikki Exp $ --> <appendix id="sql-keywords-appendix"> <title><acronym>SQL</acronym> Key Words @@ -800,7 +800,7 @@ non-reserved - COLLATE + LC_COLLATE reserved reserved reserved @@ -1168,7 +1168,7 @@ - CTYPE + LC_CTYPE non-reserved diff --git a/doc/src/sgml/ref/create_database.sgml b/doc/src/sgml/ref/create_database.sgml index 05b3177201..5866ca7ef5 100644 --- a/doc/src/sgml/ref/create_database.sgml +++ b/doc/src/sgml/ref/create_database.sgml @@ -1,5 +1,5 @@ @@ -25,8 +25,8 @@ CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] - [ COLLATE [=] collate ] - [ CTYPE [=] ctype ] + [ LC_COLLATE [=] lc_collate ] + [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ] @@ -207,7 +207,7 @@ CREATE DATABASE name The character set encoding specified for the new database must be - compatible with the chosen COLLATE and CTYPE settings. + compatible with the chosen LC_COLLATE and LC_CTYPE settings. If LC_CTYPE is C (or equivalently POSIX), then all encodings are allowed, but for other locale settings there is only one encoding that will work properly. @@ -219,9 +219,9 @@ CREATE DATABASE name - The COLLATE and CTYPE settings must match + The LC_COLLATE and LC_CTYPE settings must match those of the template database, except when template0 is used as - template. This is because COLLATE and CTYPE + template. This is because LC_COLLATE and LC_CTYPE affects the ordering in indexes, so that any indexes copied from the template database would be invalid in the new database with different settings. template0, however, is known to not diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index f9dcb973c0..2b9b11e2fe 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.219 2009/01/30 17:24:47 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.220 2009/04/06 08:42:52 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -169,7 +169,7 @@ createdb(const CreatedbStmt *stmt) errmsg("conflicting or redundant options"))); dencoding = defel; } - else if (strcmp(defel->defname, "collate") == 0) + else if (strcmp(defel->defname, "lc_collate") == 0) { if (dcollate) ereport(ERROR, @@ -177,7 +177,7 @@ createdb(const CreatedbStmt *stmt) errmsg("conflicting or redundant options"))); dcollate = defel; } - else if (strcmp(defel->defname, "ctype") == 0) + else if (strcmp(defel->defname, "lc_ctype") == 0) { if (dctype) ereport(ERROR, @@ -362,7 +362,7 @@ createdb(const CreatedbStmt *stmt) (errmsg("encoding %s does not match locale %s", pg_encoding_to_char(encoding), dbctype), - errdetail("The chosen CTYPE setting requires encoding %s.", + errdetail("The chosen LC_CTYPE setting requires encoding %s.", pg_encoding_to_char(ctype_encoding)))); if (!(collate_encoding == encoding || @@ -375,7 +375,7 @@ createdb(const CreatedbStmt *stmt) (errmsg("encoding %s does not match locale %s", pg_encoding_to_char(encoding), dbcollate), - errdetail("The chosen COLLATE setting requires encoding %s.", + errdetail("The chosen LC_COLLATE setting requires encoding %s.", pg_encoding_to_char(collate_encoding)))); /* @@ -394,8 +394,8 @@ createdb(const CreatedbStmt *stmt) if (strcmp(dbctype, src_ctype)) ereport(ERROR, - (errmsg("new ctype is incompatible with the ctype of the template database (%s)", src_ctype), - errhint("Use the same ctype as in the template database, or use template0 as template"))); + (errmsg("new LC_CTYPE is incompatible with LC_CTYPE of the template database (%s)", src_ctype), + errhint("Use the same LC_CTYPE as in the template database, or use template0 as template"))); } /* Resolve default tablespace for new database */ diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 9821bc15b5..d1ff21946b 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.661 2009/04/04 21:12:31 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.662 2009/04/06 08:42:52 heikki Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -437,7 +437,7 @@ static TypeName *TableFuncTypeName(List *columns); CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONVERSION_P COPY COST CREATE CREATEDB - CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P + CREATEROLE CREATEUSER CROSS CSV CURRENT_P CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE @@ -464,9 +464,9 @@ static TypeName *TableFuncTypeName(List *columns); KEY - LANCOMPILER LANGUAGE LARGE_P LAST_P LEADING LEAST LEFT LEVEL - LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION - LOCK_P LOGIN_P + LANCOMPILER LANGUAGE LARGE_P LAST_P LC_COLLATE_P LC_CTYPE_P LEADING + LEAST LEFT LEVEL LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP + LOCATION LOCK_P LOGIN_P MAPPING MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE @@ -6011,21 +6011,21 @@ createdb_opt_item: { $$ = makeDefElem("encoding", NULL); } - | COLLATE opt_equal Sconst + | LC_COLLATE_P opt_equal Sconst { - $$ = makeDefElem("collate", (Node *)makeString($3)); + $$ = makeDefElem("lc_collate", (Node *)makeString($3)); } - | COLLATE opt_equal DEFAULT + | LC_COLLATE_P opt_equal DEFAULT { - $$ = makeDefElem("collate", NULL); + $$ = makeDefElem("lc_collate", NULL); } - | CTYPE opt_equal Sconst + | LC_CTYPE_P opt_equal Sconst { - $$ = makeDefElem("ctype", (Node *)makeString($3)); + $$ = makeDefElem("lc_ctype", (Node *)makeString($3)); } - | CTYPE opt_equal DEFAULT + | LC_CTYPE_P opt_equal DEFAULT { - $$ = makeDefElem("ctype", NULL); + $$ = makeDefElem("lc_ctype", NULL); } | CONNECTION LIMIT opt_equal SignedIconst { @@ -10169,7 +10169,6 @@ unreserved_keyword: | CREATEROLE | CREATEUSER | CSV - | CTYPE | CURRENT_P | CURSOR | CYCLE @@ -10236,6 +10235,8 @@ unreserved_keyword: | LANGUAGE | LARGE_P | LAST_P + | LC_COLLATE_P + | LC_CTYPE_P | LEVEL | LISTEN | LOAD diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 7e4e7381fc..f67002bd4f 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12,7 +12,7 @@ * by PostgreSQL * * IDENTIFICATION - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.533 2009/04/05 04:19:58 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.534 2009/04/06 08:42:53 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -1716,12 +1716,12 @@ dumpDatabase(Archive *AH) } if (strlen(collate) > 0) { - appendPQExpBuffer(creaQry, " COLLATE = "); + appendPQExpBuffer(creaQry, " LC_COLLATE = "); appendStringLiteralAH(creaQry, collate, AH); } if (strlen(ctype) > 0) { - appendPQExpBuffer(creaQry, " CTYPE = "); + appendPQExpBuffer(creaQry, " LC_CTYPE = "); appendStringLiteralAH(creaQry, ctype, AH); } if (strlen(tablespace) > 0 && strcmp(tablespace, "pg_default") != 0) diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 949f9cd0f3..019c641135 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.121 2009/04/05 04:19:58 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.122 2009/04/06 08:42:53 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -1048,13 +1048,13 @@ dumpCreateDB(PGconn *conn) if (strlen(dbcollate) != 0) { - appendPQExpBuffer(buf, " COLLATE = "); + appendPQExpBuffer(buf, " LC_COLLATE = "); appendStringLiteralConn(buf, dbcollate, conn); } if (strlen(dbctype) != 0) { - appendPQExpBuffer(buf, " CTYPE = "); + appendPQExpBuffer(buf, " LC_CTYPE = "); appendStringLiteralConn(buf, dbctype, conn); } diff --git a/src/bin/scripts/createdb.c b/src/bin/scripts/createdb.c index 773107e487..50777acd52 100644 --- a/src/bin/scripts/createdb.c +++ b/src/bin/scripts/createdb.c @@ -5,7 +5,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/bin/scripts/createdb.c,v 1.33 2009/02/26 16:20:55 petere Exp $ + * $PostgreSQL: pgsql/src/bin/scripts/createdb.c,v 1.34 2009/04/06 08:42:53 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -186,9 +186,9 @@ main(int argc, char *argv[]) if (template) appendPQExpBuffer(&sql, " TEMPLATE %s", fmtId(template)); if (lc_collate) - appendPQExpBuffer(&sql, " COLLATE '%s'", lc_collate); + appendPQExpBuffer(&sql, " LC_COLLATE '%s'", lc_collate); if (lc_ctype) - appendPQExpBuffer(&sql, " CTYPE '%s'", lc_ctype); + appendPQExpBuffer(&sql, " LC_CTYPE '%s'", lc_ctype); appendPQExpBuffer(&sql, ";\n"); diff --git a/src/include/parser/kwlist.h b/src/include/parser/kwlist.h index 1fb2c7a51a..23f5d87a7a 100644 --- a/src/include/parser/kwlist.h +++ b/src/include/parser/kwlist.h @@ -11,7 +11,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/include/parser/kwlist.h,v 1.1 2009/03/07 00:13:58 alvherre Exp $ + * $PostgreSQL: pgsql/src/include/parser/kwlist.h,v 1.2 2009/04/06 08:42:53 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -98,7 +98,6 @@ PG_KEYWORD("createrole", CREATEROLE, UNRESERVED_KEYWORD) PG_KEYWORD("createuser", CREATEUSER, UNRESERVED_KEYWORD) PG_KEYWORD("cross", CROSS, TYPE_FUNC_NAME_KEYWORD) PG_KEYWORD("csv", CSV, UNRESERVED_KEYWORD) -PG_KEYWORD("ctype", CTYPE, UNRESERVED_KEYWORD) PG_KEYWORD("current", CURRENT_P, UNRESERVED_KEYWORD) PG_KEYWORD("current_catalog", CURRENT_CATALOG, RESERVED_KEYWORD) PG_KEYWORD("current_date", CURRENT_DATE, RESERVED_KEYWORD) @@ -209,6 +208,8 @@ PG_KEYWORD("lancompiler", LANCOMPILER, UNRESERVED_KEYWORD) PG_KEYWORD("language", LANGUAGE, UNRESERVED_KEYWORD) PG_KEYWORD("large", LARGE_P, UNRESERVED_KEYWORD) PG_KEYWORD("last", LAST_P, UNRESERVED_KEYWORD) +PG_KEYWORD("lc_collate", LC_COLLATE_P, UNRESERVED_KEYWORD) +PG_KEYWORD("lc_ctype", LC_CTYPE_P, UNRESERVED_KEYWORD) PG_KEYWORD("leading", LEADING, RESERVED_KEYWORD) PG_KEYWORD("least", LEAST, COL_NAME_KEYWORD) PG_KEYWORD("left", LEFT, TYPE_FUNC_NAME_KEYWORD) diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index b31f06018a..93cc43d176 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.trailer,v 1.6 2009/01/30 12:53:43 petere Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.trailer,v 1.7 2009/04/06 08:42:53 heikki Exp $ */ statements: /*EMPTY*/ | statements statement @@ -1547,7 +1547,6 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); } | CREATEROLE { $$ = make_str("createrole"); } | CREATEUSER { $$ = make_str("createuser"); } | CSV { $$ = make_str("csv"); } - | CTYPE { $$ = make_str("ctype"); } | CURSOR { $$ = make_str("cursor"); } | CYCLE { $$ = make_str("cycle"); } | DATA_P { $$ = make_str("data"); } @@ -1610,6 +1609,8 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); } | LANGUAGE { $$ = make_str("language"); } | LARGE_P { $$ = make_str("large"); } | LAST_P { $$ = make_str("last"); } + | LC_COLLATE_P { $$ = make_str("lc_collate"); } + | LC_CTYPE_P { $$ = make_str("lc_ctype"); } | LEVEL { $$ = make_str("level"); } | LISTEN { $$ = make_str("listen"); } | LOAD { $$ = make_str("load"); }