Zhen Chen created CALCITE-7409:
----------------------------------
Summary: MERGE JOIN condition cannot contain IS NOT DISTINCT FROM
Key: CALCITE-7409
URL: https://issues.apache.org/jira/browse/CALCITE-7409
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.41.0
Reporter: Zhen Chen
Assignee: Zhen Chen
Executing the SQL query will result in a LINQ4J error using CoreQuidemTest.
{code:java}
select e.ename,
(select count(*)
from emp as f
where f.comm is not distinct from e.comm) as c
from emp as e; {code}
Error message:
{code:java}
java.sql.SQLException: Error while executing SQL "select e.ename,
(select count(*)
from emp as f
where f.comm is not distinct from e.comm) as c
from emp as e": Error while compiling generated Java code:
public static class Record1_0 implements java.io.Serializable {
public long f0;
public Record1_0() {}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if ((!(o instanceof Record1_0))) {
return false;
}
return this.f0 == ((Record1_0) o).f0;
}
public int hashCode() {
int h = 0;
h = org.apache.calcite.runtime.Utilities.hash(h, this.f0);
return h;
}
public int compareTo(Record1_0 that) {
final int c;
c = org.apache.calcite.runtime.Utilities.compare(this.f0, that.f0);
if (c != 0) {
return c;
}
return 0;
}
public String toString() {
return "{f0=" + this.f0 + "}";
}
}
...... {code}
Plan is:
{code:java}
EnumerableCalc(expr#0..6=[{inputs}], expr#7=[IS NULL($t6)], expr#8=[0:BIGINT],
expr#9=[CASE($t7, $t8, $t6)], ENAME=[$t1], C=[$t9])
EnumerableMergeJoin(condition=[AND(=($3, $5), IS NOT DISTINCT FROM($2, $4))],
joinType=[left]) <----- here
EnumerableSort(sort0=[$3], dir0=[ASC])
EnumerableCalc(expr#0..7=[{inputs}], expr#8=[IS NULL($t6)],
proj#0..1=[{exprs}], COMM=[$t6], $f3=[$t8])
EnumerableTableScan(table=[[scott, EMP]])
EnumerableSort(sort0=[$1], dir0=[ASC])
EnumerableCalc(expr#0..4=[{inputs}], expr#5=[IS NOT NULL($t4)],
expr#6=[0], expr#7=[CASE($t5, $t4, $t6)], proj#0..1=[{exprs}], EXPR$0=[$t7])
EnumerableHashJoin(condition=[AND(IS NOT DISTINCT FROM($0, $2), IS NOT
DISTINCT FROM($1, $3))], joinType=[left])
EnumerableAggregate(group=[{0, 1}])
EnumerableCalc(expr#0..7=[{inputs}], expr#8=[IS NULL($t6)],
COMM=[$t6], $f3=[$t8])
EnumerableTableScan(table=[[scott, EMP]])
EnumerableAggregate(group=[{0, 1}], EXPR$0=[COUNT()])
EnumerableNestedLoopJoin(condition=[OR(AND(IS NULL($3), $1), =($3,
$0))], joinType=[inner])
EnumerableAggregate(group=[{0, 1}])
EnumerableCalc(expr#0..7=[{inputs}], expr#8=[IS NULL($t6)],
COMM=[$t6], $f3=[$t8])
EnumerableTableScan(table=[[scott, EMP]])
EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0], COMM=[$t6])
EnumerableTableScan(table=[[scott, EMP]]) {code}
MERGE JOINs containing the IS NOT DISTINCT FROM expression in the join key will
cause abnormal execution. I think we can temporarily prevent MERGE JOINs with
such join keys from being generated.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)