diff --git a/bin/Makefile b/bin/Makefile index d871e30..04f38f2 100644 --- a/bin/Makefile +++ b/bin/Makefile @@ -16,6 +16,11 @@ SRCS = pg_repack.c pgut/pgut.c pgut/pgut-fe.c OBJS = $(SRCS:.c=.o) PROGRAM = pg_repack + +# +# Test suite +# + ifeq ($(shell echo $$(($(INTVERSION) >= 90100))),1) REGRESS = init-extension else @@ -24,6 +29,12 @@ endif REGRESS += repack tablespace +# This test depends on collate, not supported before 9.0 +ifeq ($(shell echo $$(($(INTVERSION) >= 90000))),1) +REGRESS += issue3 +endif + + # The version number of the program. It should be the same of the library. REPACK_VERSION = $(shell grep '"version":' ../META.json | head -1 \ | sed -e 's/[ ]*"version":[ ]*"\(.*\)",/\1/') diff --git a/bin/expected/issue3.out b/bin/expected/issue3.out new file mode 100644 index 0000000..ee3e9a7 --- /dev/null +++ b/bin/expected/issue3.out @@ -0,0 +1,53 @@ +-- +-- pg_repack issue #3 +-- +CREATE TABLE issue3_1 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_1_idx ON issue3_1 (col1, col2 DESC); +SELECT repack.get_order_by('issue3_1_idx'::regclass::oid, 'issue3_1'::regclass::oid); + get_order_by +----------------- + col1, col2 DESC +(1 row) + +\! pg_repack --dbname=contrib_regression --table=issue3_1 +INFO: repacking table "issue3_1" +CREATE TABLE issue3_2 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_2_idx ON issue3_2 (col1 DESC, col2 text_pattern_ops); +SELECT repack.get_order_by('issue3_2_idx'::regclass::oid, 'issue3_2'::regclass::oid); + get_order_by +--------------------------- + col1 DESC, col2 USING ~<~ +(1 row) + +\! pg_repack --dbname=contrib_regression --table=issue3_2 +INFO: repacking table "issue3_2" +CREATE TABLE issue3_3 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_3_idx ON issue3_3 (col1 DESC, col2 DESC); +SELECT repack.get_order_by('issue3_3_idx'::regclass::oid, 'issue3_3'::regclass::oid); + get_order_by +---------------------- + col1 DESC, col2 DESC +(1 row) + +\! pg_repack --dbname=contrib_regression --table=issue3_3 +INFO: repacking table "issue3_3" +CREATE TABLE issue3_4 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_4_idx ON issue3_4 (col1 NULLS FIRST, col2 text_pattern_ops DESC NULLS LAST); +SELECT repack.get_order_by('issue3_4_idx'::regclass::oid, 'issue3_4'::regclass::oid); + get_order_by +-------------------------------------------------- + col1 NULLS FIRST, col2 DESC USING ~<~ NULLS LAST +(1 row) + +\! pg_repack --dbname=contrib_regression --table=issue3_4 +INFO: repacking table "issue3_4" +CREATE TABLE issue3_5 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_5_idx ON issue3_5 (col1 DESC NULLS FIRST, col2 COLLATE "POSIX" DESC); +SELECT repack.get_order_by('issue3_5_idx'::regclass::oid, 'issue3_5'::regclass::oid); + get_order_by +-------------------------------------- + col1 DESC, col2 COLLATE "POSIX" DESC +(1 row) + +\! pg_repack --dbname=contrib_regression --table=issue3_5 +INFO: repacking table "issue3_5" diff --git a/bin/expected/repack.out b/bin/expected/repack.out index 76518f6..9bcc4b4 100644 --- a/bin/expected/repack.out +++ b/bin/expected/repack.out @@ -326,56 +326,3 @@ INFO: repacking table "tbl_pk_uk" \! pg_repack --dbname=contrib_regression --table=tbl_nn_puk WARNING: relation "tbl_nn_puk" must have a primary key or not-null unique keys -- => WARNING --- --- pg_repack issue #3 --- -CREATE TABLE issue3_1 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_1_idx ON issue3_1 (col1, col2 DESC); -SELECT repack.get_order_by('issue3_1_idx'::regclass::oid, 'issue3_1'::regclass::oid); - get_order_by ------------------ - col1, col2 DESC -(1 row) - -\! pg_repack --dbname=contrib_regression --table=issue3_1 -INFO: repacking table "issue3_1" -CREATE TABLE issue3_2 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_2_idx ON issue3_2 (col1 DESC, col2 text_pattern_ops); -SELECT repack.get_order_by('issue3_2_idx'::regclass::oid, 'issue3_2'::regclass::oid); - get_order_by ---------------------------- - col1 DESC, col2 USING ~<~ -(1 row) - -\! pg_repack --dbname=contrib_regression --table=issue3_2 -INFO: repacking table "issue3_2" -CREATE TABLE issue3_3 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_3_idx ON issue3_3 (col1 DESC, col2 DESC); -SELECT repack.get_order_by('issue3_3_idx'::regclass::oid, 'issue3_3'::regclass::oid); - get_order_by ----------------------- - col1 DESC, col2 DESC -(1 row) - -\! pg_repack --dbname=contrib_regression --table=issue3_3 -INFO: repacking table "issue3_3" -CREATE TABLE issue3_4 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_4_idx ON issue3_4 (col1 NULLS FIRST, col2 text_pattern_ops DESC NULLS LAST); -SELECT repack.get_order_by('issue3_4_idx'::regclass::oid, 'issue3_4'::regclass::oid); - get_order_by --------------------------------------------------- - col1 NULLS FIRST, col2 DESC USING ~<~ NULLS LAST -(1 row) - -\! pg_repack --dbname=contrib_regression --table=issue3_4 -INFO: repacking table "issue3_4" -CREATE TABLE issue3_5 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_5_idx ON issue3_5 (col1 DESC NULLS FIRST, col2 COLLATE "POSIX" DESC); -SELECT repack.get_order_by('issue3_5_idx'::regclass::oid, 'issue3_5'::regclass::oid); - get_order_by --------------------------------------- - col1 DESC, col2 COLLATE "POSIX" DESC -(1 row) - -\! pg_repack --dbname=contrib_regression --table=issue3_5 -INFO: repacking table "issue3_5" diff --git a/bin/sql/issue3.sql b/bin/sql/issue3.sql new file mode 100644 index 0000000..9065488 --- /dev/null +++ b/bin/sql/issue3.sql @@ -0,0 +1,27 @@ +-- +-- pg_repack issue #3 +-- +CREATE TABLE issue3_1 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_1_idx ON issue3_1 (col1, col2 DESC); +SELECT repack.get_order_by('issue3_1_idx'::regclass::oid, 'issue3_1'::regclass::oid); +\! pg_repack --dbname=contrib_regression --table=issue3_1 + +CREATE TABLE issue3_2 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_2_idx ON issue3_2 (col1 DESC, col2 text_pattern_ops); +SELECT repack.get_order_by('issue3_2_idx'::regclass::oid, 'issue3_2'::regclass::oid); +\! pg_repack --dbname=contrib_regression --table=issue3_2 + +CREATE TABLE issue3_3 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_3_idx ON issue3_3 (col1 DESC, col2 DESC); +SELECT repack.get_order_by('issue3_3_idx'::regclass::oid, 'issue3_3'::regclass::oid); +\! pg_repack --dbname=contrib_regression --table=issue3_3 + +CREATE TABLE issue3_4 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_4_idx ON issue3_4 (col1 NULLS FIRST, col2 text_pattern_ops DESC NULLS LAST); +SELECT repack.get_order_by('issue3_4_idx'::regclass::oid, 'issue3_4'::regclass::oid); +\! pg_repack --dbname=contrib_regression --table=issue3_4 + +CREATE TABLE issue3_5 (col1 int NOT NULL, col2 text NOT NULL); +CREATE UNIQUE INDEX issue3_5_idx ON issue3_5 (col1 DESC NULLS FIRST, col2 COLLATE "POSIX" DESC); +SELECT repack.get_order_by('issue3_5_idx'::regclass::oid, 'issue3_5'::regclass::oid); +\! pg_repack --dbname=contrib_regression --table=issue3_5 diff --git a/bin/sql/repack.sql b/bin/sql/repack.sql index c84a2a2..3a6f82f 100644 --- a/bin/sql/repack.sql +++ b/bin/sql/repack.sql @@ -187,31 +187,3 @@ CREATE UNIQUE INDEX tbl_nn_puk_pcol1_idx ON tbl_nn_puk(col1) WHERE col1 < 10; -- => OK \! pg_repack --dbname=contrib_regression --table=tbl_nn_puk -- => WARNING - --- --- pg_repack issue #3 --- -CREATE TABLE issue3_1 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_1_idx ON issue3_1 (col1, col2 DESC); -SELECT repack.get_order_by('issue3_1_idx'::regclass::oid, 'issue3_1'::regclass::oid); -\! pg_repack --dbname=contrib_regression --table=issue3_1 - -CREATE TABLE issue3_2 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_2_idx ON issue3_2 (col1 DESC, col2 text_pattern_ops); -SELECT repack.get_order_by('issue3_2_idx'::regclass::oid, 'issue3_2'::regclass::oid); -\! pg_repack --dbname=contrib_regression --table=issue3_2 - -CREATE TABLE issue3_3 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_3_idx ON issue3_3 (col1 DESC, col2 DESC); -SELECT repack.get_order_by('issue3_3_idx'::regclass::oid, 'issue3_3'::regclass::oid); -\! pg_repack --dbname=contrib_regression --table=issue3_3 - -CREATE TABLE issue3_4 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_4_idx ON issue3_4 (col1 NULLS FIRST, col2 text_pattern_ops DESC NULLS LAST); -SELECT repack.get_order_by('issue3_4_idx'::regclass::oid, 'issue3_4'::regclass::oid); -\! pg_repack --dbname=contrib_regression --table=issue3_4 - -CREATE TABLE issue3_5 (col1 int NOT NULL, col2 text NOT NULL); -CREATE UNIQUE INDEX issue3_5_idx ON issue3_5 (col1 DESC NULLS FIRST, col2 COLLATE "POSIX" DESC); -SELECT repack.get_order_by('issue3_5_idx'::regclass::oid, 'issue3_5'::regclass::oid); -\! pg_repack --dbname=contrib_regression --table=issue3_5