Improve the test case from 5668a857d
authorRichard Guo <[email protected]>
Thu, 12 Dec 2024 02:21:51 +0000 (11:21 +0900)
committerRichard Guo <[email protected]>
Thu, 12 Dec 2024 02:21:51 +0000 (11:21 +0900)
In commit 5668a857d, we fixed an issue with incorrect results in right
semi joins and introduced a test case to verify the fix.  The test
case involves SubPlans and InitPlans, which may not be immediately
apparent in relation to the issue we addressed.

This  simplifies the test case with a more straightforward query.

Per discussion with Melanie Plageman.

Author: Richard Guo
Discussion: https://postgr.es/m/CAAKRu_a-Cip2XCXp13fmxq+T9BhLAVApHTyjr94awL2mbXHC-Q@mail.gmail.com

src/test/regress/expected/join.out
src/test/regress/sql/join.sql

index 51aeb1dae66666dbabcfa5e0539d39eaade00b88..55d44a9bceea41b2d7e56f3d93c71e600d56e880 100644 (file)
@@ -3041,63 +3041,39 @@ reset enable_nestloop;
 create temp table tbl_rs(a int, b int);
 insert into tbl_rs select i, i from generate_series(1,10)i;
 analyze tbl_rs;
-set enable_nestloop to off;
-set enable_hashagg to off;
--- ensure we get a hash right semi join with SubPlan in hash clauses
-explain (costs off)
-select * from tbl_rs t1
-where (select a from tbl_rs t2
-       where exists (select 1 from
-                     (select (b in (select b from tbl_rs t3)) as c from tbl_rs t4 where t4.a = 1) s
-                     where c in (select t1.a = 1 from tbl_rs t5 union all select true))
-       order by a limit 1) >= 0;
-                                      QUERY PLAN                                      
---------------------------------------------------------------------------------------
- Seq Scan on tbl_rs t1
-   Filter: ((SubPlan 3) >= 0)
-   SubPlan 3
-     ->  Limit
-           InitPlan 2
-             ->  Hash Right Semi Join
-                   Hash Cond: (((t1.a = 1)) = (ANY (t4.b = (hashed SubPlan 1).col1)))
-                   ->  Append
-                         ->  Seq Scan on tbl_rs t5
-                         ->  Result
-                   ->  Hash
-                         ->  Seq Scan on tbl_rs t4
-                               Filter: (a = 1)
-                         SubPlan 1
-                           ->  Seq Scan on tbl_rs t3
-           ->  Sort
-                 Sort Key: t2.a
-                 ->  Result
-                       One-Time Filter: (InitPlan 2).col1
-                       ->  Seq Scan on tbl_rs t2
-(20 rows)
+-- ensure we get a hash right semi join
+explain (costs off)
+select * from tbl_rs t1 join
+  lateral (select * from tbl_rs t2 where t2.a in
+            (select t1.a+t3.a from tbl_rs t3) and t2.a < 5)
+  on true;
+                QUERY PLAN                 
+-------------------------------------------
+ Nested Loop
+   ->  Seq Scan on tbl_rs t1
+   ->  Hash Right Semi Join
+         Hash Cond: ((t1.a + t3.a) = t2.a)
+         ->  Seq Scan on tbl_rs t3
+         ->  Hash
+               ->  Seq Scan on tbl_rs t2
+                     Filter: (a < 5)
+(8 rows)
 
 -- and check we get the expected results
-select * from tbl_rs t1
-where (select a from tbl_rs t2
-       where exists (select 1 from
-                     (select (b in (select b from tbl_rs t3)) as c from tbl_rs t4 where t4.a = 1) s
-                     where c in (select t1.a = 1 from tbl_rs t5 union all select true))
-       order by a limit 1) >= 0;
- a  | b  
-----+----
-  1 |  1
-  2 |  2
-  3 |  3
-  4 |  4
-  5 |  5
-  6 |  6
-  7 |  7
-  8 |  8
-  9 |  9
- 10 | 10
-(10 rows)
+select * from tbl_rs t1 join
+  lateral (select * from tbl_rs t2 where t2.a in
+            (select t1.a+t3.a from tbl_rs t3) and t2.a < 5)
+  on true;
+ a | b | a | b 
+---+---+---+---
+ 1 | 1 | 2 | 2
+ 1 | 1 | 3 | 3
+ 1 | 1 | 4 | 4
+ 2 | 2 | 3 | 3
+ 2 | 2 | 4 | 4
+ 3 | 3 | 4 | 4
+(6 rows)
 
-reset enable_nestloop;
-reset enable_hashagg;
 --
 -- regression test for bug #13908 (hash join with skew tuples & nbatch increase)
 --
index 1e9dafca573dc600d16a24a6315e9c0c1b56cb29..d6f49f281b7f4cc934b6715e2b9af8452da92036 100644 (file)
@@ -741,32 +741,23 @@ reset enable_nestloop;
 --
 -- regression test for bug with hash-right-semi join
 --
+
 create temp table tbl_rs(a int, b int);
 insert into tbl_rs select i, i from generate_series(1,10)i;
 analyze tbl_rs;
 
-set enable_nestloop to off;
-set enable_hashagg to off;
-
--- ensure we get a hash right semi join with SubPlan in hash clauses
+-- ensure we get a hash right semi join
 explain (costs off)
-select * from tbl_rs t1
-where (select a from tbl_rs t2
-       where exists (select 1 from
-                     (select (b in (select b from tbl_rs t3)) as c from tbl_rs t4 where t4.a = 1) s
-                     where c in (select t1.a = 1 from tbl_rs t5 union all select true))
-       order by a limit 1) >= 0;
+select * from tbl_rs t1 join
+  lateral (select * from tbl_rs t2 where t2.a in
+            (select t1.a+t3.a from tbl_rs t3) and t2.a < 5)
+  on true;
 
 -- and check we get the expected results
-select * from tbl_rs t1
-where (select a from tbl_rs t2
-       where exists (select 1 from
-                     (select (b in (select b from tbl_rs t3)) as c from tbl_rs t4 where t4.a = 1) s
-                     where c in (select t1.a = 1 from tbl_rs t5 union all select true))
-       order by a limit 1) >= 0;
-
-reset enable_nestloop;
-reset enable_hashagg;
+select * from tbl_rs t1 join
+  lateral (select * from tbl_rs t2 where t2.a in
+            (select t1.a+t3.a from tbl_rs t3) and t2.a < 5)
+  on true;
 
 --
 -- regression test for bug #13908 (hash join with skew tuples & nbatch increase)