mirror of
https://github.com/postgres/postgres.git
synced 2025-11-22 12:22:45 +03:00
Refactor: make default_locale internal to pg_locale.c.
Discussion: https://postgr.es/m/2228884bb1f1a02614b39f71a90c94d2cc8a3a2f.camel@j-davis.com Reviewed-by: Peter Eisentraut, Andreas Karlsson
This commit is contained in:
@@ -318,7 +318,6 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect
|
||||
bool isnull;
|
||||
char *collate;
|
||||
char *ctype;
|
||||
char *datlocale;
|
||||
|
||||
/* Fetch our pg_database row normally, via syscache */
|
||||
tup = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(MyDatabaseId));
|
||||
@@ -423,42 +422,7 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect
|
||||
strcmp(ctype, "POSIX") == 0)
|
||||
database_ctype_is_c = true;
|
||||
|
||||
if (dbform->datlocprovider == COLLPROVIDER_BUILTIN)
|
||||
{
|
||||
datum = SysCacheGetAttrNotNull(DATABASEOID, tup, Anum_pg_database_datlocale);
|
||||
datlocale = TextDatumGetCString(datum);
|
||||
|
||||
builtin_validate_locale(dbform->encoding, datlocale);
|
||||
|
||||
default_locale.info.builtin.locale = MemoryContextStrdup(
|
||||
TopMemoryContext, datlocale);
|
||||
}
|
||||
else if (dbform->datlocprovider == COLLPROVIDER_ICU)
|
||||
{
|
||||
char *icurules;
|
||||
|
||||
datum = SysCacheGetAttrNotNull(DATABASEOID, tup, Anum_pg_database_datlocale);
|
||||
datlocale = TextDatumGetCString(datum);
|
||||
|
||||
datum = SysCacheGetAttr(DATABASEOID, tup, Anum_pg_database_daticurules, &isnull);
|
||||
if (!isnull)
|
||||
icurules = TextDatumGetCString(datum);
|
||||
else
|
||||
icurules = NULL;
|
||||
|
||||
make_icu_collator(datlocale, icurules, &default_locale);
|
||||
}
|
||||
else
|
||||
datlocale = NULL;
|
||||
|
||||
default_locale.provider = dbform->datlocprovider;
|
||||
|
||||
/*
|
||||
* Default locale is currently always deterministic. Nondeterministic
|
||||
* locales currently don't support pattern matching, which would break a
|
||||
* lot of things if applied globally.
|
||||
*/
|
||||
default_locale.deterministic = true;
|
||||
init_database_collation();
|
||||
|
||||
/*
|
||||
* Check collation version. See similar code in
|
||||
@@ -478,7 +442,10 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect
|
||||
if (dbform->datlocprovider == COLLPROVIDER_LIBC)
|
||||
locale = collate;
|
||||
else
|
||||
locale = datlocale;
|
||||
{
|
||||
datum = SysCacheGetAttrNotNull(DATABASEOID, tup, Anum_pg_database_datlocale);
|
||||
locale = TextDatumGetCString(datum);
|
||||
}
|
||||
|
||||
actual_versionstr = get_collation_actual_version(dbform->datlocprovider, locale);
|
||||
if (!actual_versionstr)
|
||||
|
||||
Reference in New Issue
Block a user