mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-05 19:09:58 +08:00
Copy collencoding in CREATE COLLATION / FROM
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>
This commit is contained in:
parent
08aed6604d
commit
54baa48139
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user