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

yjhjstz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 81a5f31d2eb9db048d646b60f6ee4fda6d1d18ba
Author: Jianghua Yang <[email protected]>
AuthorDate: Thu May 14 01:37:28 2026 +0800

    orca: add parallel scan test
---
 src/test/regress/expected/orca_parallel.out | 120 ++++++++++++++++++++++++++++
 src/test/regress/parallel_schedule          |   3 +
 src/test/regress/sql/orca_parallel.sql      |  31 +++++++
 3 files changed, 154 insertions(+)

diff --git a/src/test/regress/expected/orca_parallel.out 
b/src/test/regress/expected/orca_parallel.out
new file mode 100644
index 00000000000..73df0c060bd
--- /dev/null
+++ b/src/test/regress/expected/orca_parallel.out
@@ -0,0 +1,120 @@
+create schema orca_parallel;
+set search_path=orca_parallel, public;
+set statement_mem = '256MB';
+set optimizer=on;
+create table t1(a int, b int) with(parallel_workers=2) distributed by (a);
+create table t2(c int, d int ) with(parallel_workers=3) distributed by (c);
+insert into t1 select i, i+1 from generate_series(1, 1000)i;
+insert into t2 select i, i+2 from generate_series(1, 20000)i;
+analyze t1;
+analyze t2;
+set parallel_setup_cost=0;
+set max_parallel_workers_per_gather=4;
+set enable_parallel = on;
+explain (verbose, costs off) select * from t1  join t2  on t1.a = t2.c;
+                                  QUERY PLAN                                   
+-------------------------------------------------------------------------------
+ Gather Motion 3:1  (slice1; segments: 3)
+   Output: t1.a, t1.b, t2.c, t2.d
+   ->  Hash Join
+         Output: t1.a, t1.b, t2.c, t2.d
+         Hash Cond: (t2.c = t1.a)
+         ->  Redistribute Motion 9:3  (slice2; segments: 9)
+               Output: t2.c, t2.d
+               Hash Key: t2.c
+               ->  Parallel Seq Scan on orca_parallel.t2
+                     Output: t2.c, t2.d
+         ->  Hash
+               Output: t1.a, t1.b
+               ->  Redistribute Motion 6:3  (slice3; segments: 6)
+                     Output: t1.a, t1.b
+                     Hash Key: t1.a
+                     ->  Parallel Seq Scan on orca_parallel.t1
+                           Output: t1.a, t1.b
+ Settings: enable_parallel = 'on', optimizer = 'on', parallel_setup_cost = '0'
+ Optimizer: GPORCA
+(19 rows)
+
+explain (verbose, costs off) select * from t1  join t2  on t1.a = t2.d;
+                                  QUERY PLAN                                   
+-------------------------------------------------------------------------------
+ Gather Motion 3:1  (slice1; segments: 3)
+   Output: t1.a, t1.b, t2.c, t2.d
+   ->  Hash Join
+         Output: t1.a, t1.b, t2.c, t2.d
+         Hash Cond: (t2.d = t1.a)
+         ->  Redistribute Motion 9:3  (slice2; segments: 9)
+               Output: t2.c, t2.d
+               Hash Key: t2.d
+               ->  Parallel Seq Scan on orca_parallel.t2
+                     Output: t2.c, t2.d
+         ->  Hash
+               Output: t1.a, t1.b
+               ->  Redistribute Motion 6:3  (slice3; segments: 6)
+                     Output: t1.a, t1.b
+                     Hash Key: t1.a
+                     ->  Parallel Seq Scan on orca_parallel.t1
+                           Output: t1.a, t1.b
+ Settings: enable_parallel = 'on', optimizer = 'on', parallel_setup_cost = '0'
+ Optimizer: GPORCA
+(19 rows)
+
+explain (verbose, costs off) select * from t1  join t2  on t1.b = t2.c;
+                                  QUERY PLAN                                   
+-------------------------------------------------------------------------------
+ Gather Motion 3:1  (slice1; segments: 3)
+   Output: t1.a, t1.b, t2.c, t2.d
+   ->  Hash Join
+         Output: t1.a, t1.b, t2.c, t2.d
+         Hash Cond: (t2.c = t1.b)
+         ->  Redistribute Motion 9:3  (slice2; segments: 9)
+               Output: t2.c, t2.d
+               Hash Key: t2.c
+               ->  Parallel Seq Scan on orca_parallel.t2
+                     Output: t2.c, t2.d
+         ->  Hash
+               Output: t1.a, t1.b
+               ->  Redistribute Motion 6:3  (slice3; segments: 6)
+                     Output: t1.a, t1.b
+                     Hash Key: t1.b
+                     ->  Parallel Seq Scan on orca_parallel.t1
+                           Output: t1.a, t1.b
+ Settings: enable_parallel = 'on', optimizer = 'on', parallel_setup_cost = '0'
+ Optimizer: GPORCA
+(19 rows)
+
+explain (verbose, costs off) select * from t1  join t2  on t1.b = t2.d;
+                                  QUERY PLAN                                   
+-------------------------------------------------------------------------------
+ Gather Motion 3:1  (slice1; segments: 3)
+   Output: t1.a, t1.b, t2.c, t2.d
+   ->  Hash Join
+         Output: t1.a, t1.b, t2.c, t2.d
+         Hash Cond: (t2.d = t1.b)
+         ->  Redistribute Motion 9:3  (slice2; segments: 9)
+               Output: t2.c, t2.d
+               Hash Key: t2.d
+               ->  Parallel Seq Scan on orca_parallel.t2
+                     Output: t2.c, t2.d
+         ->  Hash
+               Output: t1.a, t1.b
+               ->  Redistribute Motion 6:3  (slice3; segments: 6)
+                     Output: t1.a, t1.b
+                     Hash Key: t1.b
+                     ->  Parallel Seq Scan on orca_parallel.t1
+                           Output: t1.a, t1.b
+ Settings: enable_parallel = 'on', optimizer = 'on', parallel_setup_cost = '0'
+ Optimizer: GPORCA
+(19 rows)
+
+reset enable_parallel;
+reset max_parallel_workers_per_gather;
+reset parallel_setup_cost;
+reset statement_mem;
+reset optimizer;
+-- start_ignore
+drop schema orca_parallel cascade;
+NOTICE:  drop cascades to 2 other objects
+DETAIL:  drop cascades to table t1
+drop cascades to table t2
+-- end_ignore
diff --git a/src/test/regress/parallel_schedule 
b/src/test/regress/parallel_schedule
index b2ed818f677..532dedcc160 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -194,5 +194,8 @@ test: constraints_check
 # run stats by itself because its delay may be insufficient under heavy load
 test: stats
 
+# orca parallel
+test: orca_parallel
+
 # test of tag
 test: tag
diff --git a/src/test/regress/sql/orca_parallel.sql 
b/src/test/regress/sql/orca_parallel.sql
new file mode 100644
index 00000000000..dc4689c6bc3
--- /dev/null
+++ b/src/test/regress/sql/orca_parallel.sql
@@ -0,0 +1,31 @@
+create schema orca_parallel;
+set search_path=orca_parallel, public;
+set statement_mem = '256MB';
+set optimizer=on;
+
+create table t1(a int, b int) with(parallel_workers=2) distributed by (a);
+create table t2(c int, d int ) with(parallel_workers=3) distributed by (c);
+insert into t1 select i, i+1 from generate_series(1, 1000)i;
+insert into t2 select i, i+2 from generate_series(1, 20000)i;
+analyze t1;
+analyze t2;
+
+set parallel_setup_cost=0;
+set max_parallel_workers_per_gather=4;
+set enable_parallel = on;
+
+explain (verbose, costs off) select * from t1  join t2  on t1.a = t2.c;
+explain (verbose, costs off) select * from t1  join t2  on t1.a = t2.d;
+explain (verbose, costs off) select * from t1  join t2  on t1.b = t2.c;
+explain (verbose, costs off) select * from t1  join t2  on t1.b = t2.d;
+
+
+reset enable_parallel;
+reset max_parallel_workers_per_gather;
+reset parallel_setup_cost;
+reset statement_mem;
+reset optimizer;
+
+-- start_ignore
+drop schema orca_parallel cascade;
+-- end_ignore


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to