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

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


The following commit(s) were added to refs/heads/main by this push:
     new 14838bbc3d [CALCITE-4561] Wrong results for plan with 
EnumerableHashJoin (semi) on nullable colunms
14838bbc3d is described below

commit 14838bbc3d8335c8419af6320cd8c5f2b8df9cff
Author: Xiong Duan <[email protected]>
AuthorDate: Fri Jan 24 00:06:38 2025 +0800

    [CALCITE-4561] Wrong results for plan with EnumerableHashJoin (semi) on 
nullable colunms
---
 .../test/enumerable/EnumerableHashJoinTest.java       | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git 
a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableHashJoinTest.java
 
b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableHashJoinTest.java
index 5545a47217..1431d7fc35 100644
--- 
a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableHashJoinTest.java
+++ 
b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableHashJoinTest.java
@@ -140,7 +140,6 @@ class EnumerableHashJoinTest {
             "empid=null; name=null; dept=HR");
   }
 
-
   @Test void semiJoin() {
     tester(false, new HrSchema())
         .query(
@@ -154,6 +153,24 @@ class EnumerableHashJoinTest {
             "deptno=10; name=Sales");
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-4561";>[CALCITE-4561]
+   * Wrong results for plan with EnumerableHashJoin (semi) on nullable 
colunms</a>. */
+  @Test void semiJoinWithNulls() {
+    tester(false, new HrSchema())
+        .query(
+            "SELECT e1.name FROM emps e1 WHERE e1.commission in (SELECT 
e2.commission FROM emps e2)")
+        .explainContains("EnumerableCalc(expr#0..1=[{inputs}], name=[$t0])\n"
+            + "  EnumerableHashJoin(condition=[=($1, $6)], joinType=[semi])\n"
+            + "    EnumerableCalc(expr#0..4=[{inputs}], name=[$t2], 
commission=[$t4])\n"
+            + "      EnumerableTableScan(table=[[s, emps]])\n"
+            + "    EnumerableTableScan(table=[[s, emps]])\n\n")
+        .returnsUnordered(
+            "name=Bill",
+            "name=Eric",
+            "name=Theodore");
+  }
+
   @Test void semiJoinWithPredicate() {
     tester(false, new HrSchema())
         .withRel(

Reply via email to