diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c index b57ed946c42bb54ede800e95045aa937a8dbad85..b3c0f6f753f8428274389844ccf9778a7ed47ea4 100644 --- a/src/backend/access/hash/hashfunc.c +++ b/src/backend/access/hash/hashfunc.c @@ -281,6 +281,14 @@ hashtext(PG_FUNCTION_ARGS) if (!lc_collate_is_c(collid)) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "hashtext lc_collate_is_c(collid) %d mylocale %p", lc_collate_is_c(collid), mylocale); + if (mylocale) + { + elog(NOTICE, "hashtext mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "hashtext mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + if (!mylocale || mylocale->deterministic) { result = hash_any((unsigned char *) VARDATA_ANY(key), @@ -337,6 +345,14 @@ hashtextextended(PG_FUNCTION_ARGS) if (!lc_collate_is_c(collid)) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "hashtextextended lc_collate_is_c(collid) %d mylocale %p", lc_collate_is_c(collid), mylocale); + if (mylocale) + { + elog(NOTICE, "hashtextextended mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "hashtextextended mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + if (!mylocale || mylocale->deterministic) { result = hash_any_extended((unsigned char *) VARDATA_ANY(key), diff --git a/src/backend/regex/regc_pg_locale.c b/src/backend/regex/regc_pg_locale.c index 02d462a659778016f3c4479d425ba0a84feb6e26..9627c84a7ccfb4c4013556a51c989e9e6d611634 100644 --- a/src/backend/regex/regc_pg_locale.c +++ b/src/backend/regex/regc_pg_locale.c @@ -243,6 +243,8 @@ pg_set_regex_collation(Oid collation) errhint("Use the COLLATE clause to set the collation explicitly."))); } + elog(NOTICE, "pg_set_regex_collation lc_ctype_is_c(collid) %d", lc_ctype_is_c(collation)); + if (lc_ctype_is_c(collation)) { /* C/POSIX collations use this path regardless of database encoding */ @@ -259,6 +261,14 @@ pg_set_regex_collation(Oid collation) */ pg_regex_locale = pg_newlocale_from_collation(collation); + elog(NOTICE, "pg_set_regex_collation pg_regex_locale %p", pg_regex_locale); + if (pg_regex_locale) + { + elog(NOTICE, "pg_set_regex_collation pg_regex_locale->provider %c", pg_regex_locale->provider); + if (pg_regex_locale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "pg_set_regex_collation pg_regex_locale->info.icu.locale %s", pg_regex_locale->info.icu.locale ? pg_regex_locale->info.icu.locale : "(null)"); + } + if (pg_regex_locale && !pg_regex_locale->deterministic) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 26f498b5df4d8eb280a0e6af69fd92d4ce0d89b7..a0616a0457c9abe4635064964146027008271ff8 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1682,6 +1682,8 @@ str_tolower(const char *buff, size_t nbytes, Oid collid) errhint("Use the COLLATE clause to set the collation explicitly."))); } + elog(NOTICE, "str_tolower lc_ctype_is_c(collid) %d", lc_ctype_is_c(collid)); + /* C/POSIX collations use this path regardless of database encoding */ if (lc_ctype_is_c(collid)) { @@ -1693,6 +1695,14 @@ str_tolower(const char *buff, size_t nbytes, Oid collid) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "str_tolower mylocale %p", mylocale); + if (mylocale) + { + elog(NOTICE, "str_tolower mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "str_tolower mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + #ifdef USE_ICU if (mylocale && mylocale->provider == COLLPROVIDER_ICU) { @@ -1804,6 +1814,8 @@ str_toupper(const char *buff, size_t nbytes, Oid collid) errhint("Use the COLLATE clause to set the collation explicitly."))); } + elog(NOTICE, "str_toupper lc_ctype_is_c(collid) %d", lc_ctype_is_c(collid)); + /* C/POSIX collations use this path regardless of database encoding */ if (lc_ctype_is_c(collid)) { @@ -1815,6 +1827,14 @@ str_toupper(const char *buff, size_t nbytes, Oid collid) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "str_toupper mylocale %p", mylocale); + if (mylocale) + { + elog(NOTICE, "str_toupper mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "str_toupper mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + #ifdef USE_ICU if (mylocale && mylocale->provider == COLLPROVIDER_ICU) { @@ -1927,6 +1947,8 @@ str_initcap(const char *buff, size_t nbytes, Oid collid) errhint("Use the COLLATE clause to set the collation explicitly."))); } + elog(NOTICE, "str_initcap lc_ctype_is_c(collid) %d", lc_ctype_is_c(collid)); + /* C/POSIX collations use this path regardless of database encoding */ if (lc_ctype_is_c(collid)) { @@ -1938,6 +1960,14 @@ str_initcap(const char *buff, size_t nbytes, Oid collid) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "str_initcap mylocale %p", mylocale); + if (mylocale) + { + elog(NOTICE, "str_initcap mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "str_initcap mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + #ifdef USE_ICU if (mylocale && mylocale->provider == COLLPROVIDER_ICU) { diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 68e2e6f7a719866eacc506e1780f6d1b58951599..dacf044a4ee05555b4742300d0c078b3880db60c 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -1010,6 +1010,14 @@ hashbpchar(PG_FUNCTION_ARGS) if (!lc_collate_is_c(collid)) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "hashbpchar lc_collate_is_c(collid) %d mylocale %p", lc_collate_is_c(collid), mylocale); + if (mylocale) + { + elog(NOTICE, "hashbpchar mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "hashbpchar mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + if (!mylocale || mylocale->deterministic) { result = hash_any((unsigned char *) keydata, keylen); @@ -1070,6 +1078,14 @@ hashbpcharextended(PG_FUNCTION_ARGS) if (!lc_collate_is_c(collid)) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "hashbpcharextended lc_collate_is_c(collid) %d mylocale %p", lc_collate_is_c(collid), mylocale); + if (mylocale) + { + elog(NOTICE, "hashbpcharextended mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "hashbpcharextended mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + if (!mylocale || mylocale->deterministic) { result = hash_any_extended((unsigned char *) keydata, keylen, diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index c5e7ee7ca2d3073c067928cfa35c1e746218bb64..012565dd2986c7ae9781f61dbb5f724770575fab 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -1521,6 +1521,8 @@ varstr_cmp(const char *arg1, int len1, const char *arg2, int len2, Oid collid) check_collation_set(collid); + elog(NOTICE, "varstr_cmp lc_collate_is_c(collid) %d", lc_collate_is_c(collid)); + /* * Unfortunately, there is no strncoll(), so in the non-C locale case we * have to do some memory copying. This turns out to be significantly @@ -1543,6 +1545,14 @@ varstr_cmp(const char *arg1, int len1, const char *arg2, int len2, Oid collid) mylocale = pg_newlocale_from_collation(collid); + elog(NOTICE, "varstr_cmp mylocale %p", mylocale); + if (mylocale) + { + elog(NOTICE, "varstr_cmp mylocale->provider %c", mylocale->provider); + if (mylocale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "varstr_cmp mylocale->info.icu.locale %s", mylocale->info.icu.locale ? mylocale->info.icu.locale : "(null)"); + } + /* * memcmp() can't tell us which of two unequal strings sorts first, * but it's a cheap way to tell if they're equal. Testing shows that @@ -2377,6 +2387,14 @@ varstrfastcmp_locale(char *a1p, int len1, char *a2p, int len2, SortSupport ssup) return sss->last_returned; } + elog(NOTICE, "varstrfastcmp_locale sss->collate_c %d sss->locale %p", sss->collate_c, sss->locale); + if (sss->locale) + { + elog(NOTICE, "varstrfastcmp_locale sss->locale->provider %c", sss->locale->provider); + if (sss->locale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "varstrfastcmp_locale sss->locale->info.icu.locale %s", sss->locale->info.icu.locale ? sss->locale->info.icu.locale : "(null)"); + } + if (sss->locale) { if (sss->locale->provider == COLLPROVIDER_ICU) @@ -2472,6 +2490,14 @@ varstr_abbrev_convert(Datum original, SortSupport ssup) if (sss->typid == BPCHAROID) len = bpchartruelen(authoritative_data, len); + elog(NOTICE, "varstr_abbrev_convert sss->collate_c %d sss->locale %p", sss->collate_c, sss->locale); + if (sss->locale) + { + elog(NOTICE, "varstr_abbrev_convert sss->locale->provider %c", sss->locale->provider); + if (sss->locale->provider == COLLPROVIDER_ICU) + elog(NOTICE, "varstr_abbrev_convert sss->locale->info.icu.locale %s", sss->locale->info.icu.locale ? sss->locale->info.icu.locale : "(null)"); + } + /* * If we're using the C collation, use memcpy(), rather than strxfrm(), to * abbreviate keys. The full comparator for the C locale is always