Add proper regression test for the recent SRFs-in-pathkeys problem.

Remove the test case added by commit fac1b470a, which never actually
worked to expose the problem it claimed to test.  Replace it with
a case that does expose the problem, and also covers the SRF-not-
at-the-top deficiency repaired in 1aa8dad41.

Richard Guo, with some editorialization by me

Discussion: https://postgr.es/m/17564-c7472c2f90ef2da3@postgresql.org
This commit is contained in:
Tom Lane 2022-08-04 11:11:22 -04:00
parent f8f20203c2
commit cc11647991
4 changed files with 30 additions and 14 deletions

View File

@ -1672,15 +1672,3 @@ order by 1, 2;
-> Function Scan on generate_series
(7 rows)
-- Disallow pushing down sort when pathkey is an SRF.
explain (costs off) select unique1 from tenk1 order by unnest('{1,2}'::int[]);
QUERY PLAN
-------------------------------------------------------------------------
Sort
Sort Key: (unnest('{1,2}'::integer[]))
-> Gather
Workers Planned: 2
-> ProjectSet
-> Parallel Index Only Scan using tenk1_unique1 on tenk1
(6 rows)

View File

@ -1149,6 +1149,30 @@ SELECT generate_series(1, two), array(select generate_series(1, two))
-> Result
(16 rows)
-- must disallow pushing sort below gather when pathkey contains an SRF
EXPLAIN (VERBOSE, COSTS OFF)
SELECT unnest(ARRAY[]::integer[]) + 1 AS pathkey
FROM tenk1 t1 JOIN tenk1 t2 ON TRUE
ORDER BY pathkey;
QUERY PLAN
-----------------------------------------------------------------------------------------------------
Sort
Output: (((unnest('{}'::integer[])) + 1))
Sort Key: (((unnest('{}'::integer[])) + 1))
-> Result
Output: ((unnest('{}'::integer[])) + 1)
-> ProjectSet
Output: unnest('{}'::integer[])
-> Nested Loop
-> Gather
Workers Planned: 4
-> Parallel Index Only Scan using tenk1_hundred on public.tenk1 t1
-> Materialize
-> Gather
Workers Planned: 4
-> Parallel Index Only Scan using tenk1_hundred on public.tenk1 t2
(15 rows)
-- test passing expanded-value representations to workers
CREATE FUNCTION make_some_array(int,int) returns int[] as
$$declare x int[];

View File

@ -281,5 +281,3 @@ from tenk1, lateral (select tenk1.unique1 from generate_series(1, 1000)) as sub;
explain (costs off) select sub.unique1, stringu1 || random()::text
from tenk1, lateral (select tenk1.unique1 from generate_series(1, 1000)) as sub
order by 1, 2;
-- Disallow pushing down sort when pathkey is an SRF.
explain (costs off) select unique1 from tenk1 order by unnest('{1,2}'::int[]);

View File

@ -433,6 +433,12 @@ EXPLAIN (VERBOSE, COSTS OFF)
SELECT generate_series(1, two), array(select generate_series(1, two))
FROM tenk1 ORDER BY tenthous;
-- must disallow pushing sort below gather when pathkey contains an SRF
EXPLAIN (VERBOSE, COSTS OFF)
SELECT unnest(ARRAY[]::integer[]) + 1 AS pathkey
FROM tenk1 t1 JOIN tenk1 t2 ON TRUE
ORDER BY pathkey;
-- test passing expanded-value representations to workers
CREATE FUNCTION make_some_array(int,int) returns int[] as
$$declare x int[];