You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by ch...@apache.org on 2025/12/20 15:24:55 UTC

(cloudberry) branch cbdb-postgres-merge updated: Fix error in create_partial_grouping_paths

This is an automated email from the ASF dual-hosted git repository.

chenjinbao1989 pushed a commit to branch cbdb-postgres-merge
in repository https://gitbox.apache.org/repos/asf/cloudberry.git


The following commit(s) were added to refs/heads/cbdb-postgres-merge by this push:
     new 330736e0fae Fix error in create_partial_grouping_paths
330736e0fae is described below

commit 330736e0fae687e703f76c6506f1b2ac60c861c4
Author: Jinbao Chen <ch...@gmail.com>
AuthorDate: Sat Dec 20 23:24:43 2025 +0800

    Fix error in create_partial_grouping_paths
---
 src/backend/optimizer/plan/planner.c          |  31 +++---
 src/test/regress/expected/select_parallel.out | 132 ++++++++++++++------------
 2 files changed, 86 insertions(+), 77 deletions(-)

diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index d9184c897f0..527a4136e69 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -8883,21 +8883,6 @@ create_partial_grouping_paths(PlannerInfo *root,
 													 root->group_pathkeys,
 													 -1.0);
 
-				//if (parse->hasAggs)
-				{
-					add_partial_path(partially_grouped_rel, (Path *)
-									 create_agg_path(root,
-													 partially_grouped_rel,
-													 path,
-													 partially_grouped_rel->reltarget,
-													 parse->groupClause ? AGG_SORTED : AGG_PLAIN,
-													 AGGSPLIT_INITIAL_SERIAL,
-													 false,
-													 root->processed_groupClause,
-													 NIL,
-													 agg_partial_costs,
-													 dNumPartialPartialGroups));
-				}
 						/* Group nodes are not used in GPDB */
 #if 0
 				else
@@ -8911,6 +8896,22 @@ create_partial_grouping_paths(PlannerInfo *root,
 #endif
 			}
 
+			//if (parse->hasAggs)
+			{
+				add_partial_path(partially_grouped_rel, (Path *)
+						create_agg_path(root,
+										partially_grouped_rel,
+										path,
+										partially_grouped_rel->reltarget,
+										parse->groupClause ? AGG_SORTED : AGG_PLAIN,
+										AGGSPLIT_INITIAL_SERIAL,
+										false,
+										root->processed_groupClause,
+										NIL,
+										agg_partial_costs,
+										dNumPartialPartialGroups));
+			}
+			
 			/*
 			 * Now we may consider incremental sort on this path, but only
 			 * when the path is not already sorted and when incremental sort
diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out
index e2117df4bd3..697ed067121 100644
--- a/src/test/regress/expected/select_parallel.out
+++ b/src/test/regress/expected/select_parallel.out
@@ -15,19 +15,20 @@ set max_parallel_workers_per_gather=4;
 -- Parallel Append with partial-subplans
 explain (costs off)
   select round(avg(aa)), sum(aa) from a_star;
-                   QUERY PLAN                   
-------------------------------------------------
- Aggregate
+                     QUERY PLAN                      
+-----------------------------------------------------
+ Finalize Aggregate
    ->  Gather Motion 9:1  (slice1; segments: 9)
-         ->  Parallel Append
-               ->  Seq Scan on d_star a_star_4
-               ->  Seq Scan on f_star a_star_6
-               ->  Seq Scan on e_star a_star_5
-               ->  Seq Scan on b_star a_star_2
-               ->  Seq Scan on c_star a_star_3
-               ->  Seq Scan on a_star a_star_1
+         ->  Partial Aggregate
+               ->  Parallel Append
+                     ->  Seq Scan on d_star a_star_4
+                     ->  Seq Scan on f_star a_star_6
+                     ->  Seq Scan on e_star a_star_5
+                     ->  Seq Scan on b_star a_star_2
+                     ->  Seq Scan on c_star a_star_3
+                     ->  Seq Scan on a_star a_star_1
  Optimizer: Postgres query optimizer
-(10 rows)
+(11 rows)
 
 select round(avg(aa)), sum(aa) from a_star a1;
  round | sum 
@@ -40,19 +41,20 @@ alter table c_star set (parallel_workers = 0);
 alter table d_star set (parallel_workers = 0);
 explain (costs off)
   select round(avg(aa)), sum(aa) from a_star;
-                   QUERY PLAN                   
-------------------------------------------------
- Aggregate
+                     QUERY PLAN                      
+-----------------------------------------------------
+ Finalize Aggregate
    ->  Gather Motion 9:1  (slice1; segments: 9)
-         ->  Parallel Append
-               ->  Seq Scan on d_star a_star_4
-               ->  Seq Scan on f_star a_star_6
-               ->  Seq Scan on e_star a_star_5
-               ->  Seq Scan on b_star a_star_2
-               ->  Seq Scan on c_star a_star_3
-               ->  Seq Scan on a_star a_star_1
+         ->  Partial Aggregate
+               ->  Parallel Append
+                     ->  Seq Scan on d_star a_star_4
+                     ->  Seq Scan on f_star a_star_6
+                     ->  Seq Scan on e_star a_star_5
+                     ->  Seq Scan on b_star a_star_2
+                     ->  Seq Scan on c_star a_star_3
+                     ->  Seq Scan on a_star a_star_1
  Optimizer: Postgres query optimizer
-(10 rows)
+(11 rows)
 
 select round(avg(aa)), sum(aa) from a_star a2;
  round | sum 
@@ -67,19 +69,20 @@ alter table e_star set (parallel_workers = 0);
 alter table f_star set (parallel_workers = 0);
 explain (costs off)
   select round(avg(aa)), sum(aa) from a_star;
-                   QUERY PLAN                   
-------------------------------------------------
- Aggregate
+                     QUERY PLAN                      
+-----------------------------------------------------
+ Finalize Aggregate
    ->  Gather Motion 9:1  (slice1; segments: 9)
-         ->  Parallel Append
-               ->  Seq Scan on d_star a_star_4
-               ->  Seq Scan on f_star a_star_6
-               ->  Seq Scan on e_star a_star_5
-               ->  Seq Scan on b_star a_star_2
-               ->  Seq Scan on c_star a_star_3
-               ->  Seq Scan on a_star a_star_1
+         ->  Partial Aggregate
+               ->  Parallel Append
+                     ->  Seq Scan on d_star a_star_4
+                     ->  Seq Scan on f_star a_star_6
+                     ->  Seq Scan on e_star a_star_5
+                     ->  Seq Scan on b_star a_star_2
+                     ->  Seq Scan on c_star a_star_3
+                     ->  Seq Scan on a_star a_star_1
  Optimizer: Postgres query optimizer
-(10 rows)
+(11 rows)
 
 select round(avg(aa)), sum(aa) from a_star a3;
  round | sum 
@@ -167,14 +170,15 @@ drop table part_pa_test;
 set parallel_leader_participation = off;
 explain (costs off)
   select count(*) from tenk1 where stringu1 = 'GRAAAA';
-                    QUERY PLAN                     
----------------------------------------------------
- Aggregate
+                       QUERY PLAN                        
+---------------------------------------------------------
+ Finalize Aggregate
    ->  Gather Motion 12:1  (slice1; segments: 12)
-         ->  Parallel Seq Scan on tenk1
-               Filter: (stringu1 = 'GRAAAA'::name)
+         ->  Partial Aggregate
+               ->  Parallel Seq Scan on tenk1
+                     Filter: (stringu1 = 'GRAAAA'::name)
  Optimizer: Postgres query optimizer
-(5 rows)
+(6 rows)
 
 select count(*) from tenk1 where stringu1 = 'GRAAAA';
  count 
@@ -187,14 +191,15 @@ select count(*) from tenk1 where stringu1 = 'GRAAAA';
 set max_parallel_workers = 0;
 explain (costs off)
   select count(*) from tenk1 where stringu1 = 'GRAAAA';
-                    QUERY PLAN                     
----------------------------------------------------
- Aggregate
+                       QUERY PLAN                        
+---------------------------------------------------------
+ Finalize Aggregate
    ->  Gather Motion 12:1  (slice1; segments: 12)
-         ->  Parallel Seq Scan on tenk1
-               Filter: (stringu1 = 'GRAAAA'::name)
+         ->  Partial Aggregate
+               ->  Parallel Seq Scan on tenk1
+                     Filter: (stringu1 = 'GRAAAA'::name)
  Optimizer: Postgres query optimizer
-(5 rows)
+(6 rows)
 
 select count(*) from tenk1 where stringu1 = 'GRAAAA';
  count 
@@ -1212,24 +1217,27 @@ 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
+                                                                                                          QUERY PLAN                                                                                                           
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ Gather Motion 6:1  (slice1; segments: 6)
    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)
+   Merge Key: (((unnest('{}'::integer[])) + 1))
+   ->  Sort
+         Output: (((unnest('{}'::integer[])) + 1))
+         Sort Key: (((unnest('{}'::integer[])) + 1))
+         ->  Result
+               Output: ((unnest('{}'::integer[])) + 1)
+               ->  ProjectSet
+                     Output: unnest('{}'::integer[])
+                     ->  Nested Loop
+                           ->  Parallel Seq Scan on public.tenk1 t1
+                                 Output: t1.unique1, t1.unique2, t1.two, t1.four, t1.ten, t1.twenty, t1.hundred, t1.thousand, t1.twothousand, t1.fivethous, t1.tenthous, t1.odd, t1.even, t1.stringu1, t1.stringu2, t1.string4
+                           ->  Materialize
+                                 ->  Broadcast Motion 3:6  (slice2; segments: 3)
+                                       ->  Seq Scan on public.tenk1 t2
+ Settings: enable_parallel = 'on', optimizer = 'off', parallel_setup_cost = '0', parallel_tuple_cost = '0', min_parallel_table_scan_size = '0'
+ Optimizer: Postgres query optimizer
+(18 rows)
 
 -- test passing expanded-value representations to workers
 CREATE FUNCTION make_some_array(int,int) returns int[] as


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org