Use version for builtin collations.

Given that the version field already exists, there's little reason not
to use it. Suggestion from Peter Eisentraut.

Discussion: https://postgr.es/m/613c120a-5413-4fa7-a501-6590eae558f8@eisentraut.org
Reviewed-by: Peter Eisentraut
This commit is contained in:
Jeff Davis 2024-03-29 10:52:24 -07:00
parent c2df2ed90a
commit 46a44dc372
3 changed files with 15 additions and 5 deletions

View File

@ -1732,13 +1732,23 @@ get_collation_actual_version(char collprovider, const char *collcollate)
/* /*
* The only two supported locales (C and C.UTF-8) are both based on memcmp * The only two supported locales (C and C.UTF-8) are both based on memcmp
* and are not expected to change. * and are not expected to change, but track the version anyway.
* *
* Note that the character semantics may change for some locales, but the * Note that the character semantics may change for some locales, but the
* collation version only tracks changes to sort order. * collation version only tracks changes to sort order.
*/ */
if (collprovider == COLLPROVIDER_BUILTIN) if (collprovider == COLLPROVIDER_BUILTIN)
return NULL; {
if (strcmp(collcollate, "C") == 0)
return "1";
else if (strcmp(collcollate, "C.UTF-8") == 0)
return "1";
else
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("invalid locale name \"%s\" for builtin provider",
collcollate)));
}
#ifdef USE_ICU #ifdef USE_ICU
if (collprovider == COLLPROVIDER_ICU) if (collprovider == COLLPROVIDER_ICU)

View File

@ -57,6 +57,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 202403272 #define CATALOG_VERSION_NO 202403291
#endif #endif

View File

@ -25,13 +25,13 @@
collcollate => 'POSIX', collctype => 'POSIX' }, collcollate => 'POSIX', collctype => 'POSIX' },
{ oid => '962', descr => 'sorts by Unicode code point, C character semantics', { oid => '962', descr => 'sorts by Unicode code point, C character semantics',
collname => 'ucs_basic', collprovider => 'b', collencoding => '6', collname => 'ucs_basic', collprovider => 'b', collencoding => '6',
colllocale => 'C' }, colllocale => 'C', collversion => '1' },
{ oid => '963', { oid => '963',
descr => 'sorts using the Unicode Collation Algorithm with default settings', descr => 'sorts using the Unicode Collation Algorithm with default settings',
collname => 'unicode', collprovider => 'i', collencoding => '-1', collname => 'unicode', collprovider => 'i', collencoding => '-1',
colllocale => 'und' }, colllocale => 'und' },
{ oid => '811', descr => 'sorts by Unicode code point; Unicode and POSIX character semantics', { oid => '811', descr => 'sorts by Unicode code point; Unicode and POSIX character semantics',
collname => 'pg_c_utf8', collprovider => 'b', collencoding => '6', collname => 'pg_c_utf8', collprovider => 'b', collencoding => '6',
colllocale => 'C.UTF-8' }, colllocale => 'C.UTF-8', collversion => '1' },
] ]