diff options
author | Jeff Davis <jdavis@postgresql.org> | 2024-07-30 00:58:06 -0700 |
---|---|---|
committer | Jeff Davis <jdavis@postgresql.org> | 2024-07-30 00:58:06 -0700 |
commit | 72fe6d24a38c88e112d5e63a8e907c3e96ae46ad (patch) | |
tree | 73bff00c25ec951c6fcd7781b17e1590511c895a /src/test | |
parent | 9b282a9359a12831c087eba7f0f5f0b1dba7b7eb (diff) |
Make collation not depend on setlocale().
Now that the result of pg_newlocale_from_collation() is always
non-NULL, then we can move the collate_is_c and ctype_is_c flags into
pg_locale_t. That simplifies the logic in lc_collate_is_c() and
lc_ctype_is_c(), removing the dependence on setlocale().
This commit also eliminates the multi-stage initialization of the
collation cache.
As long as we have catalog access, then it's now safe to call
pg_newlocale_from_collation() without checking lc_collate_is_c()
first.
Discussion: https://postgr.es/m/cfd9eb85-c52a-4ec9-a90e-a5e4de56e57d@eisentraut.org
Reviewed-by: Peter Eisentraut, Andreas Karlsson
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/collate.utf8.out | 26 | ||||
-rw-r--r-- | src/test/regress/sql/collate.utf8.sql | 15 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/test/regress/expected/collate.utf8.out b/src/test/regress/expected/collate.utf8.out index eff0ef21ac5..4558d2521a2 100644 --- a/src/test/regress/expected/collate.utf8.out +++ b/src/test/regress/expected/collate.utf8.out @@ -9,6 +9,32 @@ SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset \endif SET client_encoding TO UTF8; -- +-- Test builtin "C" +-- +CREATE COLLATION regress_builtin_c ( + provider = builtin, locale = 'C'); +-- non-ASCII characters are unchanged +SELECT LOWER(U&'\00C1' COLLATE regress_builtin_c) = U&'\00C1'; + ?column? +---------- + t +(1 row) + +SELECT UPPER(U&'\00E1' COLLATE regress_builtin_c) = U&'\00E1'; + ?column? +---------- + t +(1 row) + +-- non-ASCII characters are not alphabetic +SELECT U&'\00C1\00E1' !~ '[[:alpha:]]' COLLATE regress_builtin_c; + ?column? +---------- + t +(1 row) + +DROP COLLATION regress_builtin_c; +-- -- Test PG_C_UTF8 -- CREATE COLLATION regress_pg_c_utf8 ( diff --git a/src/test/regress/sql/collate.utf8.sql b/src/test/regress/sql/collate.utf8.sql index 1f5f9ef491d..87fe06ddf1b 100644 --- a/src/test/regress/sql/collate.utf8.sql +++ b/src/test/regress/sql/collate.utf8.sql @@ -12,6 +12,21 @@ SELECT getdatabaseencoding() <> 'UTF8' AS skip_test \gset SET client_encoding TO UTF8; -- +-- Test builtin "C" +-- +CREATE COLLATION regress_builtin_c ( + provider = builtin, locale = 'C'); + +-- non-ASCII characters are unchanged +SELECT LOWER(U&'\00C1' COLLATE regress_builtin_c) = U&'\00C1'; +SELECT UPPER(U&'\00E1' COLLATE regress_builtin_c) = U&'\00E1'; + +-- non-ASCII characters are not alphabetic +SELECT U&'\00C1\00E1' !~ '[[:alpha:]]' COLLATE regress_builtin_c; + +DROP COLLATION regress_builtin_c; + +-- -- Test PG_C_UTF8 -- |