Add proper regression test for the recent SRFs-in-pathkeys problem.
authorTom Lane
Thu, 4 Aug 2022 15:11:22 +0000 (11:11 -0400)
committerTom Lane
Thu, 4 Aug 2022 15:11:22 +0000 (11:11 -0400)
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

src/test/regress/expected/incremental_sort.out
src/test/regress/expected/select_parallel.out
src/test/regress/sql/incremental_sort.sql
src/test/regress/sql/select_parallel.sql

index 0d8d77140a4cd058954da95124b10bf4cbda75b9..49953eaaded3b0137884a89056c57bedeaa77b38 100644 (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)
-
index 4ea1aa7dfd4943c94436d0c43476ffb6c2c1c916..91f74fe47a3d1fef87fd1808a1ad89ef04c61315 100644 (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[];
index 1de163e03955a3347984bb50336f01099b7e4a72..6a0e87c7f64d492ec5b0d362eec2dafebe0e13ce 100644 (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[]);
index f9247312484ef9d25245ecc72637a5441bdf638d..62fb68c7a0483ccfb2733e110a90c3e106203d39 100644 (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[];