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(