Skip to content

Commit a5dd26f

Browse files
committed
Make pg_version_num() consistent with sever_version_num.
Unless building on 8.2 or earlier. Includes an extension upgrade script that updates the function, too. Also tweak the test description to reflecta that it's the `_num` variant that's being tested. Patch changes are to get line numbers re-aligned, as well as to go back to the old version of `pg_version_num()` on 8.2. Resolves #148.
1 parent 1374245 commit a5dd26f

File tree

13 files changed

+76
-57
lines changed

13 files changed

+76
-57
lines changed

Changes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Revision history for pgTAP
66
* Updated introductory documentation. A lot has changed over the years!
77
* Added the "Secrets of the pgTAP Mavens" section of the documentation.
88
Contributions wanted!
9+
* Fixed `pg_version_num()` to always return the value of `server_version_num`
10+
on PostreSQL 8.3 and higher, thus fixing a test failure on 10.1.
911

1012
0.98.0 2017-11-06T22:30:54Z
1113
---------------------------

compat/install-8.2.patch

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,21 @@
6060
CREATE OR REPLACE FUNCTION pg_version()
6161
RETURNS text AS 'SELECT current_setting(''server_version'')'
6262
LANGUAGE SQL IMMUTABLE;
63-
@@ -250,21 +303,6 @@
63+
@@ -16,7 +69,12 @@
64+
65+
CREATE OR REPLACE FUNCTION pg_version_num()
66+
RETURNS integer AS $$
67+
- SELECT current_setting('server_version_num')::integer;
68+
+ SELECT substring(s.a[1] FROM '[[:digit:]]+')::int * 10000
69+
+ + COALESCE(substring(s.a[2] FROM '[[:digit:]]+')::int, 0) * 100
70+
+ + COALESCE(substring(s.a[3] FROM '[[:digit:]]+')::int, 0)
71+
+ FROM (
72+
+ SELECT string_to_array(current_setting('server_version'), '.') AS a
73+
+ ) AS s;
74+
$$ LANGUAGE SQL IMMUTABLE;
75+
76+
CREATE OR REPLACE FUNCTION os_name()
77+
@@ -245,21 +303,6 @@
6478
);
6579
$$ LANGUAGE sql strict;
6680

@@ -82,7 +96,7 @@
8296
CREATE OR REPLACE FUNCTION ok ( boolean, text )
8397
RETURNS TEXT AS $$
8498
DECLARE
85-
@@ -477,9 +515,9 @@
99+
@@ -472,9 +515,9 @@
86100
output TEXT;
87101
BEGIN
88102
EXECUTE 'SELECT ' ||
@@ -94,7 +108,7 @@
94108
INTO result;
95109
output := ok( COALESCE(result, FALSE), descr );
96110
RETURN output || CASE result WHEN TRUE THEN '' ELSE E'\n' || diag(
97-
@@ -763,7 +801,7 @@
111+
@@ -758,7 +801,7 @@
98112
|| COALESCE(E'\n TYPE: ' || nullif($10, ''), '')
99113
-- We need to manually indent all the context lines
100114
|| COALESCE(E'\n CONTEXT:\n'
@@ -103,7 +117,7 @@
103117
), '');
104118
$$ LANGUAGE sql IMMUTABLE;
105119

106-
@@ -2483,7 +2521,7 @@
120+
@@ -2478,7 +2521,7 @@
107121
pg_catalog.pg_get_userbyid(p.proowner) AS owner,
108122
array_to_string(p.proargtypes::regtype[], ',') AS args,
109123
CASE p.proretset WHEN TRUE THEN 'setof ' ELSE '' END
@@ -112,7 +126,7 @@
112126
p.prolang AS langoid,
113127
p.proisstrict AS is_strict,
114128
p.proisagg AS is_agg,
115-
@@ -3688,63 +3726,6 @@
129+
@@ -3683,63 +3726,6 @@
116130
SELECT ok( NOT _has_type( $1, ARRAY['e'] ), ('Enum ' || quote_ident($1) || ' should not exist')::text );
117131
$$ LANGUAGE sql;
118132

@@ -176,7 +190,7 @@
176190
CREATE OR REPLACE FUNCTION _has_role( NAME )
177191
RETURNS BOOLEAN AS $$
178192
SELECT EXISTS(
179-
@@ -6335,17 +6316,17 @@
193+
@@ -6330,17 +6316,17 @@
180194
BEGIN
181195
-- Run the setup functions.
182196
FOR tap IN SELECT * FROM _runem(setup, false) LOOP
@@ -197,7 +211,7 @@
197211
END LOOP;
198212

199213
-- Emit the plan.
200-
@@ -6384,7 +6365,7 @@
214+
@@ -6379,7 +6365,7 @@
201215
tok := FALSE;
202216
RETURN NEXT regexp_replace( diag('Test died: ' || _error_diag(
203217
errstate, errmsg, detail, hint, context, schname, tabname, colname, chkname, typname
@@ -206,7 +220,7 @@
206220
errmsg := NULL;
207221
END IF;
208222
END;
209-
@@ -6497,13 +6478,13 @@
223+
@@ -6492,13 +6478,13 @@
210224
-- Find extra records.
211225
FOR rec in EXECUTE 'SELECT * FROM ' || have || ' EXCEPT ' || $4
212226
|| 'SELECT * FROM ' || want LOOP
@@ -222,7 +236,7 @@
222236
END LOOP;
223237

224238
-- Drop the temporary tables.
225-
@@ -6727,7 +6708,7 @@
239+
@@ -6722,7 +6708,7 @@
226240
-- Find relevant records.
227241
FOR rec in EXECUTE 'SELECT * FROM ' || want || ' ' || $4
228242
|| ' SELECT * FROM ' || have LOOP
@@ -231,7 +245,7 @@
231245
END LOOP;
232246

233247
-- Drop the temporary tables.
234-
@@ -6822,11 +6803,11 @@
248+
@@ -6817,11 +6803,11 @@
235249
FETCH want INTO want_rec;
236250
want_found := FOUND;
237251
WHILE have_found OR want_found LOOP
@@ -246,7 +260,7 @@
246260
);
247261
END IF;
248262
rownum = rownum + 1;
249-
@@ -6841,9 +6822,9 @@
263+
@@ -6836,9 +6822,9 @@
250264
WHEN datatype_mismatch THEN
251265
RETURN ok( false, $3 ) || E'\n' || diag(
252266
E' Number of columns or their types differ between the queries' ||
@@ -259,7 +273,7 @@
259273
END
260274
);
261275
END;
262-
@@ -6979,7 +6960,7 @@
276+
@@ -6974,7 +6960,7 @@
263277
FETCH want INTO want_rec;
264278
want_found := FOUND;
265279
WHILE have_found OR want_found LOOP
@@ -268,7 +282,7 @@
268282
RETURN ok( true, $3 );
269283
ELSE
270284
FETCH have INTO have_rec;
271-
@@ -6993,8 +6974,8 @@
285+
@@ -6988,8 +6974,8 @@
272286
WHEN datatype_mismatch THEN
273287
RETURN ok( false, $3 ) || E'\n' || diag(
274288
E' Columns differ between queries:\n' ||
@@ -279,7 +293,7 @@
279293
);
280294
END;
281295
$$ LANGUAGE plpgsql;
282-
@@ -7119,9 +7100,9 @@
296+
@@ -7114,9 +7100,9 @@
283297
DECLARE
284298
typeof regtype := pg_typeof($1);
285299
BEGIN
@@ -292,7 +306,7 @@
292306
END;
293307
$$ LANGUAGE plpgsql;
294308

295-
@@ -7142,7 +7123,7 @@
309+
@@ -7137,7 +7123,7 @@
296310
BEGIN
297311
-- Find extra records.
298312
FOR rec in EXECUTE _query($1) LOOP
@@ -301,7 +315,7 @@
301315
END LOOP;
302316

303317
-- What extra records do we have?
304-
@@ -7310,7 +7291,7 @@
318+
@@ -7305,7 +7291,7 @@
305319
t.typrelid = 0
306320
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
307321
)
@@ -310,7 +324,7 @@
310324
AND n.nspname = $1
311325
AND t.typtype = ANY( COALESCE($4, ARRAY['b', 'c', 'd', 'p', 'e']) )
312326
EXCEPT
313-
@@ -7328,7 +7309,7 @@
327+
@@ -7323,7 +7309,7 @@
314328
t.typrelid = 0
315329
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
316330
)
@@ -319,7 +333,7 @@
319333
AND n.nspname = $1
320334
AND t.typtype = ANY( COALESCE($4, ARRAY['b', 'c', 'd', 'p', 'e']) )
321335
),
322-
@@ -7361,7 +7342,7 @@
336+
@@ -7356,7 +7342,7 @@
323337
t.typrelid = 0
324338
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
325339
)
@@ -328,7 +342,7 @@
328342
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
329343
AND pg_catalog.pg_type_is_visible(t.oid)
330344
AND t.typtype = ANY( COALESCE($3, ARRAY['b', 'c', 'd', 'p', 'e']) )
331-
@@ -7380,7 +7361,7 @@
345+
@@ -7375,7 +7361,7 @@
332346
t.typrelid = 0
333347
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
334348
)
@@ -337,7 +351,7 @@
337351
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
338352
AND pg_catalog.pg_type_is_visible(t.oid)
339353
AND t.typtype = ANY( COALESCE($3, ARRAY['b', 'c', 'd', 'p', 'e']) )
340-
@@ -7664,10 +7645,12 @@
354+
@@ -7659,10 +7645,12 @@
341355
rec RECORD;
342356
BEGIN
343357
EXECUTE _query($1) INTO rec;
@@ -353,7 +367,7 @@
353367
);
354368
END;
355369
$$ LANGUAGE plpgsql;
356-
@@ -7814,7 +7797,7 @@
370+
@@ -7809,7 +7797,7 @@
357371

358372
CREATE OR REPLACE FUNCTION display_oper ( NAME, OID )
359373
RETURNS TEXT AS $$
@@ -362,7 +376,7 @@
362376
$$ LANGUAGE SQL;
363377

364378
-- operators_are( schema, operators[], description )
365-
@@ -7823,7 +7806,7 @@
379+
@@ -7818,7 +7806,7 @@
366380
SELECT _areni(
367381
'operators',
368382
ARRAY(
@@ -371,7 +385,7 @@
371385
FROM pg_catalog.pg_operator o
372386
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
373387
WHERE n.nspname = $1
374-
@@ -7835,7 +7818,7 @@
388+
@@ -7830,7 +7818,7 @@
375389
SELECT $2[i]
376390
FROM generate_series(1, array_upper($2, 1)) s(i)
377391
EXCEPT
@@ -380,7 +394,7 @@
380394
FROM pg_catalog.pg_operator o
381395
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
382396
WHERE n.nspname = $1
383-
@@ -7856,7 +7839,7 @@
397+
@@ -7851,7 +7839,7 @@
384398
SELECT _areni(
385399
'operators',
386400
ARRAY(
@@ -389,7 +403,7 @@
389403
FROM pg_catalog.pg_operator o
390404
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
391405
WHERE pg_catalog.pg_operator_is_visible(o.oid)
392-
@@ -7869,7 +7852,7 @@
406+
@@ -7864,7 +7852,7 @@
393407
SELECT $1[i]
394408
FROM generate_series(1, array_upper($1, 1)) s(i)
395409
EXCEPT
@@ -398,7 +412,7 @@
398412
FROM pg_catalog.pg_operator o
399413
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
400414
WHERE pg_catalog.pg_operator_is_visible(o.oid)
401-
@@ -8582,40 +8565,6 @@
415+
@@ -8577,40 +8565,6 @@
402416
);
403417
$$ LANGUAGE sql;
404418

compat/install-8.3.patch

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
+
1212
CREATE OR REPLACE FUNCTION pg_version_num()
1313
RETURNS integer AS $$
14-
SELECT substring(s.a[1] FROM '[[:digit:]]+')::int * 10000
15-
@@ -6817,7 +6822,7 @@
14+
SELECT current_setting('server_version_num')::integer;
15+
@@ -6812,7 +6817,7 @@
1616
FETCH want INTO want_rec;
1717
want_found := FOUND;
1818
WHILE have_found OR want_found LOOP
@@ -21,7 +21,7 @@
2121
RETURN ok( false, $3 ) || E'\n' || diag(
2222
' Results differ beginning at row ' || rownum || E':\n' ||
2323
' have: ' || CASE WHEN have_found THEN have_rec::text ELSE 'NULL' END || E'\n' ||
24-
@@ -6974,7 +6979,7 @@
24+
@@ -6969,7 +6974,7 @@
2525
FETCH want INTO want_rec;
2626
want_found := FOUND;
2727
WHILE have_found OR want_found LOOP
@@ -30,7 +30,7 @@
3030
RETURN ok( true, $3 );
3131
ELSE
3232
FETCH have INTO have_rec;
33-
@@ -7183,13 +7188,7 @@
33+
@@ -7178,13 +7183,7 @@
3434
$$ LANGUAGE sql;
3535

3636
-- collect_tap( tap, tap, tap )
@@ -45,7 +45,7 @@
4545
RETURNS TEXT AS $$
4646
SELECT array_to_string($1, E'\n');
4747
$$ LANGUAGE sql;
48-
@@ -7665,7 +7664,7 @@
48+
@@ -7660,7 +7659,7 @@
4949
rec RECORD;
5050
BEGIN
5151
EXECUTE _query($1) INTO rec;

compat/install-8.4.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
--- sql/pgtap.sql
22
+++ sql/pgtap.sql
3-
@@ -7691,7 +7691,6 @@
3+
@@ -7686,7 +7686,6 @@
44
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
55
WHERE n.nspname = $1
66
AND c.relname = $2
77
- AND NOT t.tgisinternal
88
EXCEPT
99
SELECT $3[i]
1010
FROM generate_series(1, array_upper($3, 1)) s(i)
11-
@@ -7706,7 +7705,6 @@
11+
@@ -7701,7 +7700,6 @@
1212
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
1313
WHERE n.nspname = $1
1414
AND c.relname = $2
1515
- AND NOT t.tgisinternal
1616
),
1717
$4
1818
);
19-
@@ -7730,7 +7728,6 @@
19+
@@ -7725,7 +7723,6 @@
2020
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
2121
WHERE c.relname = $1
2222
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
2323
- AND NOT t.tgisinternal
2424
EXCEPT
2525
SELECT $2[i]
2626
FROM generate_series(1, array_upper($2, 1)) s(i)
27-
@@ -7744,7 +7741,6 @@
27+
@@ -7739,7 +7736,6 @@
2828
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
2929
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
3030
AND n.nspname NOT IN ('pg_catalog', 'information_schema')

compat/install-9.0.patch

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
--- sql/pgtap.sql
22
+++ sql/pgtap.sql
3-
@@ -3696,7 +3696,7 @@
3+
@@ -3691,7 +3691,7 @@
44
AND n.nspname = $1
55
AND t.typname = $2
66
AND t.typtype = 'e'
@@ -9,7 +9,7 @@
99
),
1010
$3,
1111
$4
12-
@@ -3724,7 +3724,7 @@
12+
@@ -3719,7 +3719,7 @@
1313
AND pg_catalog.pg_type_is_visible(t.oid)
1414
AND t.typname = $1
1515
AND t.typtype = 'e'
@@ -18,7 +18,7 @@
1818
),
1919
$2,
2020
$3
21-
@@ -6168,7 +6168,7 @@
21+
@@ -6163,7 +6163,7 @@
2222
CREATE OR REPLACE FUNCTION findfuncs( NAME, TEXT, TEXT )
2323
RETURNS TEXT[] AS $$
2424
SELECT ARRAY(
@@ -27,7 +27,7 @@
2727
FROM pg_catalog.pg_proc p
2828
JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid
2929
WHERE n.nspname = $1
30-
@@ -6185,7 +6185,7 @@
30+
@@ -6180,7 +6180,7 @@
3131
CREATE OR REPLACE FUNCTION findfuncs( TEXT, TEXT )
3232
RETURNS TEXT[] AS $$
3333
SELECT ARRAY(
@@ -36,7 +36,7 @@
3636
FROM pg_catalog.pg_proc p
3737
JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid
3838
WHERE pg_catalog.pg_function_is_visible(p.oid)
39-
@@ -9687,137 +9687,6 @@
39+
@@ -9682,137 +9682,6 @@
4040
GRANT SELECT ON tap_funky TO PUBLIC;
4141
GRANT SELECT ON pg_all_foreign_keys TO PUBLIC;
4242

compat/install-9.1.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
--- sql/pgtap.sql
22
+++ sql/pgtap.sql
3-
@@ -781,10 +781,6 @@
3+
@@ -776,10 +776,6 @@
44
RETURN ok( TRUE, descr );
55
EXCEPTION WHEN OTHERS THEN
66
-- There should have been no exception.
@@ -11,7 +11,7 @@
1111
RETURN ok( FALSE, descr ) || E'\n' || diag(
1212
' died: ' || _error_diag(SQLSTATE, SQLERRM, detail, hint, context, schname, tabname, colname, chkname, typname)
1313
);
14-
@@ -6372,10 +6368,6 @@
14+
@@ -6367,10 +6363,6 @@
1515
-- Something went wrong. Record that fact.
1616
errstate := SQLSTATE;
1717
errmsg := SQLERRM;

0 commit comments

Comments
 (0)