mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Don't install ICU collation keyword variants
Users can still create them themselves. Instead, document Unicode TR 35 collation options for ICU, so users can create all this themselves. Reviewed-by: Peter Geoghegan <pg@bowt.ie>
This commit is contained in:
@ -687,30 +687,11 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
|
||||
*/
|
||||
for (i = -1; i < uloc_countAvailable(); i++)
|
||||
{
|
||||
/*
|
||||
* In ICU 4.2, ucol_getKeywordValuesForLocale() sometimes returns
|
||||
* values that will not be accepted by uloc_toLanguageTag(). Skip
|
||||
* loading keyword variants in that version. (Both
|
||||
* ucol_getKeywordValuesForLocale() and uloc_toLanguageTag() are
|
||||
* new in ICU 4.2, so older versions are not supported at all.)
|
||||
*
|
||||
* XXX We have no information about ICU 4.3 through 4.7, but we
|
||||
* know the code below works with 4.8.
|
||||
*/
|
||||
#if U_ICU_VERSION_MAJOR_NUM > 4 || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM > 2)
|
||||
#define LOAD_ICU_KEYWORD_VARIANTS
|
||||
#endif
|
||||
|
||||
const char *name;
|
||||
char *langtag;
|
||||
char *icucomment;
|
||||
const char *collcollate;
|
||||
Oid collid;
|
||||
#ifdef LOAD_ICU_KEYWORD_VARIANTS
|
||||
UEnumeration *en;
|
||||
UErrorCode status;
|
||||
const char *val;
|
||||
#endif
|
||||
|
||||
if (i == -1)
|
||||
name = ""; /* ICU root locale */
|
||||
@ -744,58 +725,6 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
|
||||
CreateComments(collid, CollationRelationId, 0,
|
||||
icucomment);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add keyword variants, if enabled.
|
||||
*/
|
||||
#ifdef LOAD_ICU_KEYWORD_VARIANTS
|
||||
status = U_ZERO_ERROR;
|
||||
en = ucol_getKeywordValuesForLocale("collation", name, TRUE, &status);
|
||||
if (U_FAILURE(status))
|
||||
ereport(ERROR,
|
||||
(errmsg("could not get keyword values for locale \"%s\": %s",
|
||||
name, u_errorName(status))));
|
||||
|
||||
status = U_ZERO_ERROR;
|
||||
uenum_reset(en, &status);
|
||||
while ((val = uenum_next(en, NULL, &status)))
|
||||
{
|
||||
char *localeid = psprintf("%s@collation=%s", name, val);
|
||||
|
||||
langtag = get_icu_language_tag(localeid);
|
||||
collcollate = U_ICU_VERSION_MAJOR_NUM >= 54 ? langtag : localeid;
|
||||
|
||||
/*
|
||||
* Be paranoid about not allowing any non-ASCII strings into
|
||||
* pg_collation
|
||||
*/
|
||||
if (!is_all_ascii(langtag) || !is_all_ascii(collcollate))
|
||||
continue;
|
||||
|
||||
collid = CollationCreate(psprintf("%s-x-icu", langtag),
|
||||
nspid, GetUserId(),
|
||||
COLLPROVIDER_ICU, -1,
|
||||
collcollate, collcollate,
|
||||
get_collation_actual_version(COLLPROVIDER_ICU, collcollate),
|
||||
true, true);
|
||||
if (OidIsValid(collid))
|
||||
{
|
||||
ncreated++;
|
||||
|
||||
CommandCounterIncrement();
|
||||
|
||||
icucomment = get_icu_locale_comment(localeid);
|
||||
if (icucomment)
|
||||
CreateComments(collid, CollationRelationId, 0,
|
||||
icucomment);
|
||||
}
|
||||
}
|
||||
if (U_FAILURE(status))
|
||||
ereport(ERROR,
|
||||
(errmsg("could not get keyword values for locale \"%s\": %s",
|
||||
name, u_errorName(status))));
|
||||
uenum_close(en);
|
||||
#endif /* LOAD_ICU_KEYWORD_VARIANTS */
|
||||
}
|
||||
}
|
||||
#endif /* USE_ICU */
|
||||
|
Reference in New Issue
Block a user