diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/Makefile | 3 | ||||
-rw-r--r-- | src/test/locale/.gitignore | 1 | ||||
-rw-r--r-- | src/test/locale/Makefile | 7 | ||||
-rw-r--r-- | src/test/locale/t/001_index.pl | 67 | ||||
-rw-r--r-- | src/test/regress/expected/collate.icu.utf8.out | 195 | ||||
-rw-r--r-- | src/test/regress/expected/collate.linux.utf8.out | 3 | ||||
-rw-r--r-- | src/test/regress/expected/create_index.out | 6 | ||||
-rw-r--r-- | src/test/regress/expected/misc_sanity.out | 4 | ||||
-rw-r--r-- | src/test/regress/sql/collate.icu.utf8.sql | 138 | ||||
-rw-r--r-- | src/test/regress/sql/collate.linux.utf8.sql | 5 | ||||
-rw-r--r-- | src/test/regress/sql/create_index.sql | 4 |
11 files changed, 24 insertions, 409 deletions
diff --git a/src/test/Makefile b/src/test/Makefile index f7859c2fd5e..46275915ff3 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -12,8 +12,7 @@ subdir = src/test top_builddir = ../.. include $(top_builddir)/src/Makefile.global -SUBDIRS = perl regress isolation modules authentication recovery subscription \ - locale +SUBDIRS = perl regress isolation modules authentication recovery subscription # Test suites that are not safe by default but can be run if selected # by the user via the whitespace-separated list in variable diff --git a/src/test/locale/.gitignore b/src/test/locale/.gitignore index 64e1bf2a803..620d3df4254 100644 --- a/src/test/locale/.gitignore +++ b/src/test/locale/.gitignore @@ -1,2 +1 @@ /test-ctype -/tmp_check/ diff --git a/src/test/locale/Makefile b/src/test/locale/Makefile index 673e14dcd08..7ba096b5427 100644 --- a/src/test/locale/Makefile +++ b/src/test/locale/Makefile @@ -4,7 +4,6 @@ subdir = src/test/locale top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -export with_icu PROGS = test-ctype DIRS = de_DE.ISO8859-1 gr_GR.ISO8859-7 koi8-r koi8-to-win1251 @@ -21,9 +20,3 @@ clean distclean maintainer-clean: # These behave like installcheck targets. check-%: all @$(MAKE) -C `echo $@ | sed 's/^check-//'` test - -check: - $(prove_check) - -installcheck: - $(prove_installcheck) diff --git a/src/test/locale/t/001_index.pl b/src/test/locale/t/001_index.pl deleted file mode 100644 index a67f78cb719..00000000000 --- a/src/test/locale/t/001_index.pl +++ /dev/null @@ -1,67 +0,0 @@ -use strict; -use warnings; - -use Config; -use PostgresNode; -use TestLib; -use Test::More; - -if ($ENV{with_icu} eq 'yes') -{ - plan tests => 10; -} -else -{ - plan skip_all => 'ICU not supported by this build'; -} - -#### Set up the server - -note "setting up data directory"; -my $node = get_new_node('main'); -$node->init(extra => [ '--encoding=UTF8' ]); - -$ENV{PGHOST} = $node->host; -$ENV{PGPORT} = $node->port; -$node->start; - -sub test_index -{ - my ($err_like, $err_comm) = @_; - my ($ret, $out, $err) = $node->psql('postgres', "SELECT * FROM icu1"); - is($ret, 0, 'SELECT should succeed.'); - like($err, $err_like, $err_comm); -} - -$node->safe_psql('postgres', 'CREATE TABLE icu1(val text);'); -$node->safe_psql('postgres', 'CREATE INDEX icu1_fr ON icu1 (val COLLATE "fr-x-icu");'); - -test_index(qr/^$/, 'No warning should be raised'); - -# Simulate different collation version -$node->safe_psql('postgres', - "UPDATE pg_depend SET refobjversion = 'not_a_version'" - . " WHERE refobjversion IS NOT NULL" - . " AND objid::regclass::text = 'icu1_fr';"); - -test_index(qr/index "icu1_fr" depends on collation "fr-x-icu" version "not_a_version", but the current version is/, - 'Different collation version warning should be raised.'); - -$node->safe_psql('postgres', 'ALTER INDEX icu1_fr ALTER COLLATION "fr-x-icu" REFRESH VERSION;'); - -test_index(qr/^$/, 'No warning should be raised'); - -# Simulate different collation version -$node->safe_psql('postgres', - "UPDATE pg_depend SET refobjversion = 'not_a_version'" - . " WHERE refobjversion IS NOT NULL" - . " AND objid::regclass::text = 'icu1_fr';"); - -test_index(qr/index "icu1_fr" depends on collation "fr-x-icu" version "not_a_version", but the current version is/, - 'Different collation version warning should be raised.'); - -$node->safe_psql('postgres', 'REINDEX TABLE icu1;'); - -test_index(qr/^$/, 'No warning should be raised'); - -$node->stop; diff --git a/src/test/regress/expected/collate.icu.utf8.out b/src/test/regress/expected/collate.icu.utf8.out index faf99f76b54..70133df8042 100644 --- a/src/test/regress/expected/collate.icu.utf8.out +++ b/src/test/regress/expected/collate.icu.utf8.out @@ -1082,6 +1082,9 @@ SELECT collname FROM pg_collation WHERE collname LIKE 'test%'; DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER +ALTER COLLATION "en-x-icu" REFRESH VERSION; +NOTICE: version has not changed -- dependencies CREATE COLLATION test0 FROM "C"; CREATE TABLE collate_dep_test1 (a int, b text COLLATE test0); @@ -1947,184 +1950,6 @@ SELECT (SELECT count(*) FROM test33_0) <> (SELECT count(*) FROM test33_1); t (1 row) --- collation versioning support -CREATE TYPE t_en_fr AS (fr text COLLATE "fr-x-icu", en text COLLATE "en-x-icu"); -CREATE DOMAIN d_en_fr AS t_en_fr; -CREATE DOMAIN d_es AS text COLLATE "es-x-icu"; -CREATE TYPE t_en_fr_ga AS (en_fr t_en_fr, ga text COLLATE "ga-x-icu"); -CREATE DOMAIN d_en_fr_ga AS t_en_fr_ga; -CREATE TYPE t_custom AS (meh text, meh2 text); -CREATE DOMAIN d_custom AS t_custom; -CREATE COLLATION custom ( - LOCALE = 'fr-x-icu', PROVIDER = 'icu' -); -CREATE TYPE myrange AS range (subtype = text, collation = "POSIX"); -CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); -CREATE TABLE collate_test ( - id integer, - val text COLLATE "fr-x-icu", - t_en_fr t_en_fr, - d_en_fr d_en_fr, - d_es d_es, - t_en_fr_ga t_en_fr_ga, - d_en_fr_ga d_en_fr_ga, - d_en_fr_ga_arr d_en_fr_ga[], - myrange myrange, - myrange_en_fr_ga myrange_en_fr_ga -); -CREATE INDEX icuidx00_val ON collate_test(val); --- shouldn't get duplicated dependencies -CREATE INDEX icuidx00_val_val ON collate_test(val, val); --- shouldn't track version -CREATE INDEX icuidx00_val_pattern ON collate_test(val text_pattern_ops); --- should have single dependency, no version -CREATE INDEX icuidx00_val_pattern_val_pattern ON collate_test(val text_pattern_ops, val text_pattern_ops); --- should have single dependency, with version -CREATE INDEX icuidx00_val_pattern_val ON collate_test(val text_pattern_ops, val); --- should have single dependency, with version -CREATE INDEX icuidx00_val_val_pattern ON collate_test(val, val text_pattern_ops); --- two rows expected, only one a version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_pattern_where ON collate_test(val text_pattern_ops) WHERE val >= val; --- two rows expected with version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_where ON collate_test(val) WHERE val >= val; --- two rows expected with version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr ON collate_test(val varchar_pattern_ops, (val || val)); --- two rows expected, one with a version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr_pattern ON collate_test(val varchar_pattern_ops, (val || val) text_pattern_ops); --- should have single dependency, with version tracked -CREATE INDEX icuidx01_t_en_fr__d_es ON collate_test (t_en_fr, d_es); -CREATE INDEX icuidx02_d_en_fr ON collate_test (d_en_fr); -CREATE INDEX icuidx03_t_en_fr_ga ON collate_test (t_en_fr_ga); -CREATE INDEX icuidx04_d_en_fr_ga ON collate_test (d_en_fr_ga); -CREATE INDEX icuidx05_d_en_fr_ga_arr ON collate_test (d_en_fr_ga_arr); -CREATE INDEX icuidx06_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).en_fr.fr = 'foo'; -CREATE INDEX icuidx07_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).ga = 'foo'; -CREATE INDEX icuidx08_d_en_fr_ga ON collate_test(id) WHERE (t_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx09_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx10_d_en_fr_ga_es ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz' COLLATE "es-x-icu"); -CREATE INDEX icuidx11_d_es ON collate_test(id) WHERE (d_es) = ('foo'); -CREATE INDEX icuidx12_custom ON collate_test(id) WHERE ('foo', 'bar')::d_custom = ('foo', 'bar' COLLATE custom)::d_custom; -CREATE INDEX icuidx13_custom ON collate_test(id) WHERE ('foo' COLLATE custom, 'bar')::d_custom = ('foo', 'bar')::d_custom; -CREATE INDEX icuidx14_myrange ON collate_test(myrange); -CREATE INDEX icuidx15_myrange_en_fr_ga ON collate_test USING gist (myrange_en_fr_ga); -CREATE TABLE collate_part(id integer, val text COLLATE "en-x-icu") PARTITION BY range(id); -CREATE TABLE collate_part_0 PARTITION OF collate_part FOR VALUES FROM (0) TO (1); -CREATE TABLE collate_part_1 PARTITION OF collate_part FOR VALUES FROM (1) TO (1000000); -CREATE INDEX icuidx17_part ON collate_part_1 (val); -SELECT objid::regclass::text collate "C", refobjid::regcollation::text collate "C", -CASE -WHEN refobjid = 'default'::regcollation THEN 'XXX' -- depends on libc version support -WHEN refobjversion IS NULL THEN 'version not tracked' -WHEN refobjversion = pg_collation_actual_version(refobjid) THEN 'up to date' -ELSE 'out of date' -END AS version -FROM pg_depend d -LEFT JOIN pg_class c ON c.oid = d.objid -WHERE refclassid = 'pg_collation'::regclass -AND coalesce(relkind, 'i') = 'i' -AND relname LIKE 'icuidx%' -ORDER BY 1, 2, 3; - objid | refobjid | version ------------------------------------+------------+--------------------- - icuidx00_val | "fr-x-icu" | up to date - icuidx00_val_pattern | "fr-x-icu" | version not tracked - icuidx00_val_pattern_expr | "fr-x-icu" | up to date - icuidx00_val_pattern_expr | "fr-x-icu" | up to date - icuidx00_val_pattern_expr_pattern | "fr-x-icu" | up to date - icuidx00_val_pattern_expr_pattern | "fr-x-icu" | version not tracked - icuidx00_val_pattern_val | "fr-x-icu" | up to date - icuidx00_val_pattern_val_pattern | "fr-x-icu" | version not tracked - icuidx00_val_pattern_where | "fr-x-icu" | up to date - icuidx00_val_pattern_where | "fr-x-icu" | version not tracked - icuidx00_val_val | "fr-x-icu" | up to date - icuidx00_val_val_pattern | "fr-x-icu" | up to date - icuidx00_val_where | "fr-x-icu" | up to date - icuidx00_val_where | "fr-x-icu" | up to date - icuidx01_t_en_fr__d_es | "en-x-icu" | up to date - icuidx01_t_en_fr__d_es | "es-x-icu" | up to date - icuidx01_t_en_fr__d_es | "fr-x-icu" | up to date - icuidx02_d_en_fr | "en-x-icu" | up to date - icuidx02_d_en_fr | "fr-x-icu" | up to date - icuidx03_t_en_fr_ga | "en-x-icu" | up to date - icuidx03_t_en_fr_ga | "fr-x-icu" | up to date - icuidx03_t_en_fr_ga | "ga-x-icu" | up to date - icuidx04_d_en_fr_ga | "en-x-icu" | up to date - icuidx04_d_en_fr_ga | "fr-x-icu" | up to date - icuidx04_d_en_fr_ga | "ga-x-icu" | up to date - icuidx05_d_en_fr_ga_arr | "en-x-icu" | up to date - icuidx05_d_en_fr_ga_arr | "fr-x-icu" | up to date - icuidx05_d_en_fr_ga_arr | "ga-x-icu" | up to date - icuidx06_d_en_fr_ga | "fr-x-icu" | up to date - icuidx07_d_en_fr_ga | "ga-x-icu" | up to date - icuidx10_d_en_fr_ga_es | "es-x-icu" | up to date - icuidx11_d_es | "es-x-icu" | up to date - icuidx12_custom | custom | up to date - icuidx13_custom | custom | up to date - icuidx15_myrange_en_fr_ga | "en-x-icu" | up to date - icuidx15_myrange_en_fr_ga | "fr-x-icu" | up to date - icuidx15_myrange_en_fr_ga | "ga-x-icu" | up to date - icuidx17_part | "en-x-icu" | up to date -(38 rows) - --- Validate that REINDEX will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -REINDEX TABLE collate_test; -REINDEX TABLE collate_part_0; -REINDEX TABLE collate_part_1; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid -------- -(0 rows) - --- Validate that REINDEX CONCURRENTLY will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -REINDEX TABLE CONCURRENTLY collate_test; -REINDEX TABLE CONCURRENTLY collate_part_0; -REINDEX INDEX CONCURRENTLY icuidx17_part; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid -------- -(0 rows) - --- Validate that VACUUM FULL will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -VACUUM FULL collate_test; -VACUUM FULL collate_part_0; -VACUUM FULL collate_part_1; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid -------- -(0 rows) - --- Test ALTER INDEX name ALTER COLLATION name REFRESH VERSION -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part' -AND refobjversion IS NOT NULL; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - objid ---------------- - icuidx17_part -(1 row) - -ALTER INDEX icuidx17_part ALTER COLLATION "en-x-icu" REFRESH VERSION; -SELECT objid::regclass, refobjversion = 'not a version' AS ver FROM pg_depend -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part'; - objid | ver ----------------+----- - icuidx17_part | f -(1 row) - -- cleanup RESET search_path; SET client_min_messages TO warning; @@ -2132,17 +1957,3 @@ DROP SCHEMA collate_tests CASCADE; RESET client_min_messages; -- leave a collation for pg_upgrade test CREATE COLLATION coll_icu_upgrade FROM "und-x-icu"; --- Test user-visible function for inspecting versions -SELECT pg_collation_actual_version('"en-x-icu"'::regcollation) is not null; - ?column? ----------- - t -(1 row) - --- Invalid OIDs are silently ignored -SELECT pg_collation_actual_version(0) is null; - ?column? ----------- - t -(1 row) - diff --git a/src/test/regress/expected/collate.linux.utf8.out b/src/test/regress/expected/collate.linux.utf8.out index 580b00eea79..f06ae543e49 100644 --- a/src/test/regress/expected/collate.linux.utf8.out +++ b/src/test/regress/expected/collate.linux.utf8.out @@ -1093,6 +1093,9 @@ SELECT collname FROM pg_collation WHERE collname LIKE 'test%'; DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER +ALTER COLLATION "en_US" REFRESH VERSION; +NOTICE: version has not changed -- dependencies CREATE COLLATION test0 FROM "C"; CREATE TABLE collate_dep_test1 (a int, b text COLLATE test0); diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index 7f8f91b92c6..49f2a158c1f 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2026,10 +2026,10 @@ REINDEX TABLE concur_reindex_tab; -- notice NOTICE: table "concur_reindex_tab" has no indexes to reindex REINDEX (CONCURRENTLY) TABLE concur_reindex_tab; -- notice NOTICE: table "concur_reindex_tab" has no indexes that can be reindexed concurrently -ALTER TABLE concur_reindex_tab ADD COLUMN c2 text COLLATE "C"; -- add toast index +ALTER TABLE concur_reindex_tab ADD COLUMN c2 text; -- add toast index -- Normal index with integer column CREATE UNIQUE INDEX concur_reindex_ind1 ON concur_reindex_tab(c1); --- Normal index with text column (with unversioned collation) +-- Normal index with text column CREATE INDEX concur_reindex_ind2 ON concur_reindex_tab(c2); -- UNIQUE index with expression CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1)); @@ -2483,7 +2483,7 @@ WARNING: cannot reindex system catalogs concurrently, skipping all Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- c1 | integer | | not null | - c2 | text | C | | + c2 | text | | | Indexes: "concur_reindex_ind1" PRIMARY KEY, btree (c1) "concur_reindex_ind2" btree (c2) diff --git a/src/test/regress/expected/misc_sanity.out b/src/test/regress/expected/misc_sanity.out index 9ebe28a78da..a67f40198a4 100644 --- a/src/test/regress/expected/misc_sanity.out +++ b/src/test/regress/expected/misc_sanity.out @@ -18,8 +18,8 @@ WHERE refclassid = 0 OR refobjid = 0 OR deptype NOT IN ('a', 'e', 'i', 'n', 'p') OR (deptype != 'p' AND (classid = 0 OR objid = 0)) OR (deptype = 'p' AND (classid != 0 OR objid != 0 OR objsubid != 0)); - classid | objid | objsubid | refclassid | refobjid | refobjsubid | deptype | refobjversion ----------+-------+----------+------------+----------+-------------+---------+--------------- + classid | objid | objsubid | refclassid | refobjid | refobjsubid | deptype +---------+-------+----------+------------+----------+-------------+--------- (0 rows) -- **************** pg_shdepend **************** diff --git a/src/test/regress/sql/collate.icu.utf8.sql b/src/test/regress/sql/collate.icu.utf8.sql index 4c71f4d249e..9cee3d0042b 100644 --- a/src/test/regress/sql/collate.icu.utf8.sql +++ b/src/test/regress/sql/collate.icu.utf8.sql @@ -405,6 +405,11 @@ DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER + +ALTER COLLATION "en-x-icu" REFRESH VERSION; + + -- dependencies CREATE COLLATION test0 FROM "C"; @@ -742,134 +747,6 @@ INSERT INTO test33 VALUES (2, 'DEF'); -- they end up in the same partition (but it's platform-dependent which one) SELECT (SELECT count(*) FROM test33_0) <> (SELECT count(*) FROM test33_1); --- collation versioning support -CREATE TYPE t_en_fr AS (fr text COLLATE "fr-x-icu", en text COLLATE "en-x-icu"); -CREATE DOMAIN d_en_fr AS t_en_fr; -CREATE DOMAIN d_es AS text COLLATE "es-x-icu"; -CREATE TYPE t_en_fr_ga AS (en_fr t_en_fr, ga text COLLATE "ga-x-icu"); -CREATE DOMAIN d_en_fr_ga AS t_en_fr_ga; -CREATE TYPE t_custom AS (meh text, meh2 text); -CREATE DOMAIN d_custom AS t_custom; - -CREATE COLLATION custom ( - LOCALE = 'fr-x-icu', PROVIDER = 'icu' -); - -CREATE TYPE myrange AS range (subtype = text, collation = "POSIX"); -CREATE TYPE myrange_en_fr_ga AS range(subtype = t_en_fr_ga); - -CREATE TABLE collate_test ( - id integer, - val text COLLATE "fr-x-icu", - t_en_fr t_en_fr, - d_en_fr d_en_fr, - d_es d_es, - t_en_fr_ga t_en_fr_ga, - d_en_fr_ga d_en_fr_ga, - d_en_fr_ga_arr d_en_fr_ga[], - myrange myrange, - myrange_en_fr_ga myrange_en_fr_ga -); - -CREATE INDEX icuidx00_val ON collate_test(val); --- shouldn't get duplicated dependencies -CREATE INDEX icuidx00_val_val ON collate_test(val, val); --- shouldn't track version -CREATE INDEX icuidx00_val_pattern ON collate_test(val text_pattern_ops); --- should have single dependency, no version -CREATE INDEX icuidx00_val_pattern_val_pattern ON collate_test(val text_pattern_ops, val text_pattern_ops); --- should have single dependency, with version -CREATE INDEX icuidx00_val_pattern_val ON collate_test(val text_pattern_ops, val); --- should have single dependency, with version -CREATE INDEX icuidx00_val_val_pattern ON collate_test(val, val text_pattern_ops); --- two rows expected, only one a version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_pattern_where ON collate_test(val text_pattern_ops) WHERE val >= val; --- two rows expected with version, because we don't try to merge these yet -CREATE INDEX icuidx00_val_where ON collate_test(val) WHERE val >= val; --- two rows expected with version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr ON collate_test(val varchar_pattern_ops, (val || val)); --- two rows expected, one with a version (expression walker + attribute) -CREATE INDEX icuidx00_val_pattern_expr_pattern ON collate_test(val varchar_pattern_ops, (val || val) text_pattern_ops); --- should have single dependency, with version tracked -CREATE INDEX icuidx01_t_en_fr__d_es ON collate_test (t_en_fr, d_es); -CREATE INDEX icuidx02_d_en_fr ON collate_test (d_en_fr); -CREATE INDEX icuidx03_t_en_fr_ga ON collate_test (t_en_fr_ga); -CREATE INDEX icuidx04_d_en_fr_ga ON collate_test (d_en_fr_ga); -CREATE INDEX icuidx05_d_en_fr_ga_arr ON collate_test (d_en_fr_ga_arr); -CREATE INDEX icuidx06_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).en_fr.fr = 'foo'; -CREATE INDEX icuidx07_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga).ga = 'foo'; -CREATE INDEX icuidx08_d_en_fr_ga ON collate_test(id) WHERE (t_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx09_d_en_fr_ga ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz'); -CREATE INDEX icuidx10_d_en_fr_ga_es ON collate_test(id) WHERE (d_en_fr_ga) = ('foo', 'bar', 'baz' COLLATE "es-x-icu"); -CREATE INDEX icuidx11_d_es ON collate_test(id) WHERE (d_es) = ('foo'); -CREATE INDEX icuidx12_custom ON collate_test(id) WHERE ('foo', 'bar')::d_custom = ('foo', 'bar' COLLATE custom)::d_custom; -CREATE INDEX icuidx13_custom ON collate_test(id) WHERE ('foo' COLLATE custom, 'bar')::d_custom = ('foo', 'bar')::d_custom; -CREATE INDEX icuidx14_myrange ON collate_test(myrange); -CREATE INDEX icuidx15_myrange_en_fr_ga ON collate_test USING gist (myrange_en_fr_ga); - -CREATE TABLE collate_part(id integer, val text COLLATE "en-x-icu") PARTITION BY range(id); -CREATE TABLE collate_part_0 PARTITION OF collate_part FOR VALUES FROM (0) TO (1); -CREATE TABLE collate_part_1 PARTITION OF collate_part FOR VALUES FROM (1) TO (1000000); -CREATE INDEX icuidx17_part ON collate_part_1 (val); - -SELECT objid::regclass::text collate "C", refobjid::regcollation::text collate "C", -CASE -WHEN refobjid = 'default'::regcollation THEN 'XXX' -- depends on libc version support -WHEN refobjversion IS NULL THEN 'version not tracked' -WHEN refobjversion = pg_collation_actual_version(refobjid) THEN 'up to date' -ELSE 'out of date' -END AS version -FROM pg_depend d -LEFT JOIN pg_class c ON c.oid = d.objid -WHERE refclassid = 'pg_collation'::regclass -AND coalesce(relkind, 'i') = 'i' -AND relname LIKE 'icuidx%' -ORDER BY 1, 2, 3; - --- Validate that REINDEX will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; - -REINDEX TABLE collate_test; -REINDEX TABLE collate_part_0; -REINDEX TABLE collate_part_1; - -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - --- Validate that REINDEX CONCURRENTLY will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -REINDEX TABLE CONCURRENTLY collate_test; -REINDEX TABLE CONCURRENTLY collate_part_0; -REINDEX INDEX CONCURRENTLY icuidx17_part; - -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - --- Validate that VACUUM FULL will update the stored version. -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text LIKE 'icuidx%' -AND refobjversion IS NOT NULL; -VACUUM FULL collate_test; -VACUUM FULL collate_part_0; -VACUUM FULL collate_part_1; - -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; - --- Test ALTER INDEX name ALTER COLLATION name REFRESH VERSION -UPDATE pg_depend SET refobjversion = 'not a version' -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part' -AND refobjversion IS NOT NULL; -SELECT objid::regclass FROM pg_depend WHERE refobjversion = 'not a version'; -ALTER INDEX icuidx17_part ALTER COLLATION "en-x-icu" REFRESH VERSION; -SELECT objid::regclass, refobjversion = 'not a version' AS ver FROM pg_depend -WHERE refclassid = 'pg_collation'::regclass -AND objid::regclass::text = 'icuidx17_part'; -- cleanup RESET search_path; @@ -879,8 +756,3 @@ RESET client_min_messages; -- leave a collation for pg_upgrade test CREATE COLLATION coll_icu_upgrade FROM "und-x-icu"; - --- Test user-visible function for inspecting versions -SELECT pg_collation_actual_version('"en-x-icu"'::regcollation) is not null; --- Invalid OIDs are silently ignored -SELECT pg_collation_actual_version(0) is null; diff --git a/src/test/regress/sql/collate.linux.utf8.sql b/src/test/regress/sql/collate.linux.utf8.sql index c697c994880..cbbd2203e41 100644 --- a/src/test/regress/sql/collate.linux.utf8.sql +++ b/src/test/regress/sql/collate.linux.utf8.sql @@ -406,6 +406,11 @@ DROP SCHEMA test_schema; DROP ROLE regress_test_role; +-- ALTER + +ALTER COLLATION "en_US" REFRESH VERSION; + + -- dependencies CREATE COLLATION test0 FROM "C"; diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index 51c9a121514..8bc76f7c6f1 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -797,10 +797,10 @@ CREATE TABLE concur_reindex_tab (c1 int); -- REINDEX REINDEX TABLE concur_reindex_tab; -- notice REINDEX (CONCURRENTLY) TABLE concur_reindex_tab; -- notice -ALTER TABLE concur_reindex_tab ADD COLUMN c2 text COLLATE "C"; -- add toast index +ALTER TABLE concur_reindex_tab ADD COLUMN c2 text; -- add toast index -- Normal index with integer column CREATE UNIQUE INDEX concur_reindex_ind1 ON concur_reindex_tab(c1); --- Normal index with text column (with unversioned collation) +-- Normal index with text column CREATE INDEX concur_reindex_ind2 ON concur_reindex_tab(c2); -- UNIQUE index with expression CREATE UNIQUE INDEX concur_reindex_ind3 ON concur_reindex_tab(abs(c1)); |