Add expected files for regression tests.

Due to compatibility break by the recent PostgreSQL core code changes
we need to split expected files into each minor releases rather than
each major releases.

Now the mapping between PostgreSQL version and expected file is
complicated as follows.

* version 10
  * >= 10.3 : repack_3.out, tablespace_2.out
  * < 10.3 : repack_2.out, tablespace.out

* version 9.6
  * >= 9.6.8 : repack_4.out, tablespace_2.out
  * < 9.6.8 : repack.out, tablespace.out

* version 9.5
  * >= 9.5.12 : repack_4.out, tablespace_2.out
  * < 9.5.12 : repack.out, tablespace_1.out

* version 9.4
  * >= 9.4.17 : repack_5.out, tablespace_2.out
  * < 9.4.17 : repack_1.out, tablespace_1.out

* version 9.3
  * >= 9.3.22 : repack_6.out, tablespace_3.out
  * < 9.3.22 : repack_1.out, tablespace_1.out

* version 9.2 : repack_1.out, tablespace_1.out

* version 9.1 : repack_1.out, tablespace_1.out
This commit is contained in:
Masahiko Sawada
2018-03-09 13:43:04 +09:00
parent a0fe223f8b
commit 64c22ffc5f
10 changed files with 2518 additions and 52 deletions

View File

@ -1,13 +1,68 @@
-- 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 split_part(version(), ' ', 2) ~ '^(10)'
THEN 'repack_2.out'
WHEN split_part(version(), ' ', 2) ~ '^(9\.6|9\.5)'
THEN 'repack.out'
WHEN split_part(version(), ' ', 2) ~ '^(9\.4|9\.3|9\.2|9\.1)'
THEN 'repack_1.out'
ELSE version()
END AS testfile;
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;
SET client_min_messages = warning;
--