From 2fd0eb050a2256a4454ecc48f2b23cc5551cb04b Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Fri, 9 Mar 2018 13:03:36 +0000 Subject: [PATCH] A more compact way to verify the identity of the test files --- lib/pg_repack.sql.in | 24 +++++++++++ regress/expected/repack.out | 79 +++++++---------------------------- regress/expected/repack_1.out | 79 +++++++---------------------------- regress/expected/repack_2.out | 79 +++++++---------------------------- regress/expected/repack_3.out | 79 +++++++---------------------------- regress/expected/repack_4.out | 79 +++++++---------------------------- regress/expected/repack_5.out | 79 +++++++---------------------------- regress/expected/repack_6.out | 79 +++++++---------------------------- regress/sql/repack.sql | 78 +++++++--------------------------- 9 files changed, 143 insertions(+), 512 deletions(-) diff --git a/lib/pg_repack.sql.in b/lib/pg_repack.sql.in index 249547c..8a68b60 100644 --- a/lib/pg_repack.sql.in +++ b/lib/pg_repack.sql.in @@ -16,6 +16,30 @@ CREATE FUNCTION repack.version_sql() RETURNS text AS $$SELECT 'pg_repack REPACK_VERSION'::text$$ LANGUAGE SQL IMMUTABLE STRICT; +CREATE FUNCTION repack.pg_version(version_str text DEFAULT NULL) RETURNS integer +AS $$ + -- Return the server version number in a format similar to PG_VERSION_NUM. + -- Call with no argument for the server version, pass an argument for testing + select (case + when array_length(tokens, 1) = 2 then + to_char(tokens[1], 'FM00') || + '00' || to_char(tokens[2], 'FM00') + when array_length(tokens, 1) = 3 then + to_char(tokens[1], 'FM00') || + to_char(tokens[2], 'FM00') || + to_char(tokens[3], 'FM00') + else + -- This will raise an error which we can read + 'unexpected version string: ' || coalesce($1, version()) + end)::int + from ( + select string_to_array(substring( + split_part(coalesce($1, version()), ' ', 2) + from '\d+\.\d+(?:\.\d+)?'), '.')::int[] + ) as x (tokens); +$$ +LANGUAGE SQL IMMUTABLE; + CREATE AGGREGATE repack.array_accum ( sfunc = array_append, basetype = anyelement, diff --git a/regress/expected/repack.out b/regress/expected/repack.out index 8001c1d..3306ab0 100644 --- a/regress/expected/repack.out +++ b/regress/expected/repack.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename ------------ repack.out (1 row) diff --git a/regress/expected/repack_1.out b/regress/expected/repack_1.out index 48690cb..df04ca8 100644 --- a/regress/expected/repack_1.out +++ b/regress/expected/repack_1.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename -------------- repack_1.out (1 row) diff --git a/regress/expected/repack_2.out b/regress/expected/repack_2.out index 1637dd6..0654079 100644 --- a/regress/expected/repack_2.out +++ b/regress/expected/repack_2.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename -------------- repack_2.out (1 row) diff --git a/regress/expected/repack_3.out b/regress/expected/repack_3.out index 4a23973..fea2c29 100644 --- a/regress/expected/repack_3.out +++ b/regress/expected/repack_3.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename -------------- repack_3.out (1 row) diff --git a/regress/expected/repack_4.out b/regress/expected/repack_4.out index 099d1ad..62a137e 100644 --- a/regress/expected/repack_4.out +++ b/regress/expected/repack_4.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename -------------- repack_4.out (1 row) diff --git a/regress/expected/repack_5.out b/regress/expected/repack_5.out index f266ca1..d64771f 100644 --- a/regress/expected/repack_5.out +++ b/regress/expected/repack_5.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename -------------- repack_5.out (1 row) diff --git a/regress/expected/repack_6.out b/regress/expected/repack_6.out index eb084a1..3d57ffb 100644 --- a/regress/expected/repack_6.out +++ b/regress/expected/repack_6.out @@ -1,68 +1,19 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; - case +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; + filename -------------- repack_6.out (1 row) diff --git a/regress/sql/repack.sql b/regress/sql/repack.sql index 3f73daf..cdb35bd 100644 --- a/regress/sql/repack.sql +++ b/regress/sql/repack.sql @@ -1,68 +1,18 @@ --- Setup function to get version number. --- This function returns a value same as PG_VERSION_NUM. -CREATE OR REPLACE FUNCTION version_num() RETURNS int AS -$$ -DECLARE - version_int int[]; - version_str text; -BEGIN - SELECT string_to_array(split_part(version(), ' ', 2), '.')::int[] INTO version_int; - IF array_length(version_int, 1) = 2 THEN -- version 10 or higher - SELECT to_char(version_int[1], 'FM00') || '00' || to_char(version_int[2], 'FM00') INTO version_str; - ELSIF array_length(version_int, 1) = 3 THEN --version 9.6 or lower - SELECT to_char(version_int[1], 'FM00') || to_char(version_int[2], 'FM00') || to_char(version_int[3], 'FM00') INTO version_str; - ELSE - RAISE 'invalid version'; - END IF; - RETURN version_str::int; -END; -$$ -LANGUAGE plpgsql IMMUTABLE STRICT; - -- Test output file identifier. -SELECT - CASE - WHEN version_num >= 100000 THEN -- PostgreSQL 10 - CASE - WHEN version_num >= 100003 THEN - 'repack_3.out' - ELSE - 'repack_2.out' - END - WHEN version_num >= 90600 THEN -- PostgrSQL 9.6 - CASE - WHEN version_num >= 90608 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90500 THEN -- PostgreSQL 9.5 - CASE - WHEN version_num >= 90512 THEN - 'repack_4.out' - ELSE - 'repack.out' - END - WHEN version_num >= 90400 THEN -- PostgreSQL 9.4 - CASE - WHEN version_num >= 90417 THEN - 'repack_5.out' - ELSE - 'repack_1.out' - END - WHEN version_num >= 90300 THEN -- PostgreSQL 9.3 - CASE - WHEN version_num >= 90322 THEN - 'repack_5.out' - ELSE - 'repack_6.out' - END - WHEN version_num >= 90200 THEN -- PostgreSQL 9.2 - 'repack_1.out' - WHEN version_num >= 90100 THEN -- PostgreSQL 9.1 - 'repack_1.out' - END -FROM version_num() as version_num; +select filename from (values + ( 90100, 90300, 'repack_1.out'), + ( 90300, 90322, 'repack_6.out'), + ( 90322, 90400, 'repack_5.out'), + ( 90400, 90417, 'repack_1.out'), + ( 90417, 90500, 'repack_5.out'), + ( 90500, 90512, 'repack.out'), + ( 90512, 90600, 'repack_4.out'), + ( 90600, 90608, 'repack.out'), + ( 90608, 100000, 'repack_4.out'), + (100000, 100003, 'repack_2.out'), + (100003, 110000, 'repack_3.out') +) as x (min, max, filename) +where min <= repack.pg_version() and repack.pg_version() < max; SET client_min_messages = warning; --