]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add proper regression test for the recent SRFs-in-pathkeys problem.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 4 Aug 2022 15:11:22 +0000 (11:11 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
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 b3ef5f16829bb98179c4f0c0299feccd02621d34..d9d08b78805a703623e027ac3fc549721834214a 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 51514421a28406517338644bb508cbf65c2807a3..cdbaa4a7b6144a60141f150f399bdddcb125e2f3 100644 (file)
@@ -1151,6 +1151,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 d8768a6b54d7804b2e959e61d44a7ba5a3b05df8..284a354dbb76224b9be12d58bcbc1b35cbfa88f5 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 7853ae80d2ef83dbbc7cc748c50ac6d4becc2680..43adb05b7a30170673323557ca8de62d7c313467 100644 (file)
@@ -435,6 +435,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[];