git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 08aed66)
Copy collencoding in CREATE COLLATION / FROM
2017年6月30日 12:50:39 +0000 (08:50 -0400)
2017年6月30日 12:50:39 +0000 (08:50 -0400)
This command used to compute the collencoding entry like when a
completely new collation is created. But for example when copying the
"C" collation, this would then result in a collation that has a
collencoding entry for the current database encoding rather than -1,
thus not making an exact copy. This has probably no practical impact,
but making this change keeps the catalog contents neat.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>

diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c
index 7f2ce4db4c67e463494c654cabbb6686e4992f59..418f7342c77fccb4c7bb5783cdf1f6f5b343b35d 100644 (file)
--- a/src/backend/commands/collationcmds.c
+++ b/src/backend/commands/collationcmds.c
@@ -64,7 +64,7 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e
char *collcollate = NULL;
char *collctype = NULL;
char *collproviderstr = NULL;
- int collencoding;
+ int collencoding = 0;
char collprovider = 0;
char *collversion = NULL;
Oid newoid;
@@ -126,6 +126,7 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e
collcollate = pstrdup(NameStr(((Form_pg_collation) GETSTRUCT(tp))->collcollate));
collctype = pstrdup(NameStr(((Form_pg_collation) GETSTRUCT(tp))->collctype));
collprovider = ((Form_pg_collation) GETSTRUCT(tp))->collprovider;
+ collencoding = ((Form_pg_collation) GETSTRUCT(tp))->collencoding;
ReleaseSysCache(tp);
@@ -185,12 +186,15 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
errmsg("parameter \"lc_ctype\" must be specified")));
- if (collprovider == COLLPROVIDER_ICU)
- collencoding = -1;
- else
+ if (!fromEl)
{
- collencoding = GetDatabaseEncoding();
- check_encoding_locale_matches(collencoding, collcollate, collctype);
+ if (collprovider == COLLPROVIDER_ICU)
+ collencoding = -1;
+ else
+ {
+ collencoding = GetDatabaseEncoding();
+ check_encoding_locale_matches(collencoding, collcollate, collctype);
+ }
}
if (!collversion)
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /