Skip to content

Commit d36f7ef

Browse files
committed
Add minimal regression test for blessed record type transfer.
Test that blessed records can be transferred through a TupleQueue and correctly decoded by another backend. While touching the file, make sure that force_parallel_mode settings only cover relevant tests. Author: Thomas Munro, editorialized by Andres Freund Reviewed-By: Andres Freund Discussion: https://postgr.es/m/20170823054644.efuzftxjpfi6wwqs%40alap3.anarazel.de
1 parent d7694fc commit d36f7ef

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

src/test/regress/expected/select_parallel.out

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,8 @@ select string4 from tenk1 order by string4 limit 5;
326326

327327
reset max_parallel_workers;
328328
reset enable_hashagg;
329-
set force_parallel_mode=1;
329+
SAVEPOINT settings;
330+
SET LOCAL force_parallel_mode = 1;
330331
explain (costs off)
331332
select stringu1::int2 from tenk1 where unique1 = 1;
332333
QUERY PLAN
@@ -338,7 +339,38 @@ explain (costs off)
338339
Index Cond: (unique1 = 1)
339340
(5 rows)
340341

342+
ROLLBACK TO SAVEPOINT settings;
343+
-- exercise record typmod remapping between backends
344+
CREATE OR REPLACE FUNCTION make_record(n int)
345+
RETURNS RECORD LANGUAGE plpgsql PARALLEL SAFE AS
346+
$$
347+
BEGIN
348+
RETURN CASE n
349+
WHEN 1 THEN ROW(1)
350+
WHEN 2 THEN ROW(1, 2)
351+
WHEN 3 THEN ROW(1, 2, 3)
352+
WHEN 4 THEN ROW(1, 2, 3, 4)
353+
ELSE ROW(1, 2, 3, 4, 5)
354+
END;
355+
END;
356+
$$;
357+
SAVEPOINT settings;
358+
SET LOCAL force_parallel_mode = 1;
359+
SELECT make_record(x) FROM (SELECT generate_series(1, 5) x) ss ORDER BY x;
360+
make_record
361+
-------------
362+
(1)
363+
(1,2)
364+
(1,2,3)
365+
(1,2,3,4)
366+
(1,2,3,4,5)
367+
(5 rows)
368+
369+
ROLLBACK TO SAVEPOINT settings;
370+
DROP function make_record(n int);
341371
-- to increase the parallel query test coverage
372+
SAVEPOINT settings;
373+
SET LOCAL force_parallel_mode = 1;
342374
EXPLAIN (analyze, timing off, summary off, costs off) SELECT * FROM tenk1;
343375
QUERY PLAN
344376
-------------------------------------------------------------
@@ -348,8 +380,12 @@ EXPLAIN (analyze, timing off, summary off, costs off) SELECT * FROM tenk1;
348380
-> Parallel Seq Scan on tenk1 (actual rows=2000 loops=5)
349381
(4 rows)
350382

383+
ROLLBACK TO SAVEPOINT settings;
351384
-- provoke error in worker
385+
SAVEPOINT settings;
386+
SET LOCAL force_parallel_mode = 1;
352387
select stringu1::int2 from tenk1 where unique1 = 1;
353388
ERROR: invalid input syntax for integer: "BAAAAA"
354389
CONTEXT: parallel worker
390+
ROLLBACK TO SAVEPOINT settings;
355391
rollback;

src/test/regress/sql/select_parallel.sql

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,42 @@ select string4 from tenk1 order by string4 limit 5;
126126
reset max_parallel_workers;
127127
reset enable_hashagg;
128128

129-
set force_parallel_mode=1;
130-
129+
SAVEPOINT settings;
130+
SET LOCAL force_parallel_mode = 1;
131131
explain (costs off)
132132
select stringu1::int2 from tenk1 where unique1 = 1;
133+
ROLLBACK TO SAVEPOINT settings;
134+
135+
-- exercise record typmod remapping between backends
136+
CREATE OR REPLACE FUNCTION make_record(n int)
137+
RETURNS RECORD LANGUAGE plpgsql PARALLEL SAFE AS
138+
$$
139+
BEGIN
140+
RETURN CASE n
141+
WHEN 1 THEN ROW(1)
142+
WHEN 2 THEN ROW(1, 2)
143+
WHEN 3 THEN ROW(1, 2, 3)
144+
WHEN 4 THEN ROW(1, 2, 3, 4)
145+
ELSE ROW(1, 2, 3, 4, 5)
146+
END;
147+
END;
148+
$$;
149+
SAVEPOINT settings;
150+
SET LOCAL force_parallel_mode = 1;
151+
SELECT make_record(x) FROM (SELECT generate_series(1, 5) x) ss ORDER BY x;
152+
ROLLBACK TO SAVEPOINT settings;
153+
DROP function make_record(n int);
133154

134155
-- to increase the parallel query test coverage
156+
SAVEPOINT settings;
157+
SET LOCAL force_parallel_mode = 1;
135158
EXPLAIN (analyze, timing off, summary off, costs off) SELECT * FROM tenk1;
159+
ROLLBACK TO SAVEPOINT settings;
136160

137161
-- provoke error in worker
162+
SAVEPOINT settings;
163+
SET LOCAL force_parallel_mode = 1;
138164
select stringu1::int2 from tenk1 where unique1 = 1;
165+
ROLLBACK TO SAVEPOINT settings;
139166

140167
rollback;

0 commit comments

Comments
 (0)