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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy