|
|
|
@ -1221,7 +1221,7 @@ text_position_setup(text *t1, text *t2, Oid collid, TextPositionState *state) |
|
|
|
|
if (!lc_collate_is_c(collid)) |
|
|
|
|
mylocale = pg_newlocale_from_collation(collid); |
|
|
|
|
|
|
|
|
|
if (mylocale && !mylocale->deterministic) |
|
|
|
|
if (!pg_locale_deterministic(mylocale)) |
|
|
|
|
ereport(ERROR, |
|
|
|
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
|
|
|
|
errmsg("nondeterministic collations are not supported for substring searches"))); |
|
|
|
@ -1572,8 +1572,7 @@ varstr_cmp(const char *arg1, int len1, const char *arg2, int len2, Oid collid) |
|
|
|
|
result = pg_strncoll(arg1, len1, arg2, len2, mylocale); |
|
|
|
|
|
|
|
|
|
/* Break tie if necessary. */ |
|
|
|
|
if (result == 0 && |
|
|
|
|
(!mylocale || mylocale->deterministic)) |
|
|
|
|
if (result == 0 && pg_locale_deterministic(mylocale)) |
|
|
|
|
{ |
|
|
|
|
result = memcmp(arg1, arg2, Min(len1, len2)); |
|
|
|
|
if ((result == 0) && (len1 != len2)) |
|
|
|
@ -1628,7 +1627,7 @@ texteq(PG_FUNCTION_ARGS) |
|
|
|
|
else |
|
|
|
|
mylocale = pg_newlocale_from_collation(collid); |
|
|
|
|
|
|
|
|
|
if (locale_is_c || !mylocale || mylocale->deterministic) |
|
|
|
|
if (locale_is_c || pg_locale_deterministic(mylocale)) |
|
|
|
|
{ |
|
|
|
|
Datum arg1 = PG_GETARG_DATUM(0); |
|
|
|
|
Datum arg2 = PG_GETARG_DATUM(1); |
|
|
|
@ -1687,7 +1686,7 @@ textne(PG_FUNCTION_ARGS) |
|
|
|
|
else |
|
|
|
|
mylocale = pg_newlocale_from_collation(collid); |
|
|
|
|
|
|
|
|
|
if (locale_is_c || !mylocale || mylocale->deterministic) |
|
|
|
|
if (locale_is_c || pg_locale_deterministic(mylocale)) |
|
|
|
|
{ |
|
|
|
|
Datum arg1 = PG_GETARG_DATUM(0); |
|
|
|
|
Datum arg2 = PG_GETARG_DATUM(1); |
|
|
|
@ -1801,7 +1800,7 @@ text_starts_with(PG_FUNCTION_ARGS) |
|
|
|
|
if (!lc_collate_is_c(collid)) |
|
|
|
|
mylocale = pg_newlocale_from_collation(collid); |
|
|
|
|
|
|
|
|
|
if (mylocale && !mylocale->deterministic) |
|
|
|
|
if (!pg_locale_deterministic(mylocale)) |
|
|
|
|
ereport(ERROR, |
|
|
|
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
|
|
|
|
errmsg("nondeterministic collations are not supported for substring searches"))); |
|
|
|
@ -2217,8 +2216,7 @@ varstrfastcmp_locale(char *a1p, int len1, char *a2p, int len2, SortSupport ssup) |
|
|
|
|
result = pg_strcoll(sss->buf1, sss->buf2, sss->locale); |
|
|
|
|
|
|
|
|
|
/* Break tie if necessary. */ |
|
|
|
|
if (result == 0 && |
|
|
|
|
(!sss->locale || sss->locale->deterministic)) |
|
|
|
|
if (result == 0 && pg_locale_deterministic(sss->locale)) |
|
|
|
|
result = strcmp(sss->buf1, sss->buf2); |
|
|
|
|
|
|
|
|
|
/* Cache result, perhaps saving an expensive strcoll() call next time */ |
|
|
|
|