diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index f85e913..fa56f6b 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -2065,3 +2065,48 @@ SELECT balk(hundred) FROM tenk1; (1 row) ROLLBACK; +-- Test for partially_grouped_rel +SET parallel_setup_cost=0; +SET parallel_tuple_cost=0; +SET enable_hashagg TO false; +CREATE TABLE pagg_tab1(x int, y int) PARTITION BY RANGE(x); +CREATE TABLE pagg_tab1_p1 PARTITION OF pagg_tab1 FOR VALUES FROM (0) TO (10); +CREATE TABLE pagg_tab1_p2 PARTITION OF pagg_tab1 FOR VALUES FROM (10) TO (20); +CREATE TABLE pagg_tab1_p3 PARTITION OF pagg_tab1 FOR VALUES FROM (20) TO (30); +CREATE TABLE pagg_tab2(x int, y int) PARTITION BY RANGE(y); +CREATE TABLE pagg_tab2_p1 PARTITION OF pagg_tab2 FOR VALUES FROM (0) TO (10); +CREATE TABLE pagg_tab2_p2 PARTITION OF pagg_tab2 FOR VALUES FROM (10) TO (20); +CREATE TABLE pagg_tab2_p3 PARTITION OF pagg_tab2 FOR VALUES FROM (20) TO (30); +INSERT INTO pagg_tab1 SELECT i%30, i FROM generate_series(0, 29) i; +INSERT INTO pagg_tab2 SELECT i, i%30 FROM generate_series(0, 29) i; +ANALYZE pagg_tab1; +ANALYZE pagg_tab2; +EXPLAIN (COSTS OFF) +SELECT t1.y, sum(t1.x), COUNT(*) FROM pagg_tab1 t1, pagg_tab2 t2 WHERE t1.x = t2.y GROUP BY t1.y ORDER BY 1, 2, 3; + QUERY PLAN +---------------------------------------------------------------------------------------- + Sort + Sort Key: t1.y, (sum(t1.x)), (count(*)) + -> Finalize GroupAggregate + Group Key: t1.y + -> Gather Merge + Workers Planned: 2 + -> Partial GroupAggregate + Group Key: t1.y + -> Sort + Sort Key: t1.y + -> Parallel Hash Join + Hash Cond: (t1.x = t2.y) + -> Parallel Append + -> Parallel Seq Scan on pagg_tab1_p1 t1 + -> Parallel Seq Scan on pagg_tab1_p2 t1_1 + -> Parallel Seq Scan on pagg_tab1_p3 t1_2 + -> Parallel Hash + -> Parallel Append + -> Parallel Seq Scan on pagg_tab2_p1 t2 + -> Parallel Seq Scan on pagg_tab2_p2 t2_1 + -> Parallel Seq Scan on pagg_tab2_p3 t2_2 +(21 rows) + +DROP TABLE pagg_tab2; +DROP TABLE pagg_tab1; diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index 506d044..17c25e5 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -907,3 +907,30 @@ EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1; SELECT balk(hundred) FROM tenk1; ROLLBACK; + +-- Test for partially_grouped_rel +SET parallel_setup_cost=0; +SET parallel_tuple_cost=0; +SET enable_hashagg TO false; + +CREATE TABLE pagg_tab1(x int, y int) PARTITION BY RANGE(x); +CREATE TABLE pagg_tab1_p1 PARTITION OF pagg_tab1 FOR VALUES FROM (0) TO (10); +CREATE TABLE pagg_tab1_p2 PARTITION OF pagg_tab1 FOR VALUES FROM (10) TO (20); +CREATE TABLE pagg_tab1_p3 PARTITION OF pagg_tab1 FOR VALUES FROM (20) TO (30); + +CREATE TABLE pagg_tab2(x int, y int) PARTITION BY RANGE(y); +CREATE TABLE pagg_tab2_p1 PARTITION OF pagg_tab2 FOR VALUES FROM (0) TO (10); +CREATE TABLE pagg_tab2_p2 PARTITION OF pagg_tab2 FOR VALUES FROM (10) TO (20); +CREATE TABLE pagg_tab2_p3 PARTITION OF pagg_tab2 FOR VALUES FROM (20) TO (30); + +INSERT INTO pagg_tab1 SELECT i%30, i FROM generate_series(0, 29) i; +INSERT INTO pagg_tab2 SELECT i, i%30 FROM generate_series(0, 29) i; + +ANALYZE pagg_tab1; +ANALYZE pagg_tab2; + +EXPLAIN (COSTS OFF) +SELECT t1.y, sum(t1.x), COUNT(*) FROM pagg_tab1 t1, pagg_tab2 t2 WHERE t1.x = t2.y GROUP BY t1.y ORDER BY 1, 2, 3; + +DROP TABLE pagg_tab2; +DROP TABLE pagg_tab1;