[ https://issues.apache.org/jira/browse/CALCITE-5646?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17714152#comment-17714152 ]
Julian Hyde commented on CALCITE-5646: -------------------------------------- I wonder whether the solution is to make COALESCE(x, y) strong in x and, separately, strong in y. Because if COALESCE(x, y) is always null, we know that x is always null, and y is always null. Thus we can push down “select * from t1 join t2 on coalesce(t1.a, t2.b) is null”. But it’s not strong in (x, y). > JoinDeriveIsNotNullFilterRule incorrectly handles COALESCE in join condition > ---------------------------------------------------------------------------- > > Key: CALCITE-5646 > URL: https://issues.apache.org/jira/browse/CALCITE-5646 > Project: Calcite > Issue Type: Bug > Affects Versions: 1.34.0 > Reporter: Leonid Chistov > Assignee: Leonid Chistov > Priority: Major > Labels: pull-request-available > Time Spent: 20m > Remaining Estimate: 0h > > Consider query > {code:java} > select t1.deptno from empnullables t1 inner join > empnullables t2 on coalesce(t1.ename, t2.ename) = 'abc' {code} > When JoinDeriveIsNotNullFilterRule is applied to it, it is incorrectly > transformed to query plan > {code:java} > LogicalProject(DEPTNO=[$7]) > LogicalJoin(condition=[=(CASE(IS NOT NULL($1), $1, $10), 'abc')], > joinType=[inner]) > LogicalFilter(condition=[IS NOT NULL($1)]) > LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]]) > LogicalFilter(condition=[IS NOT NULL($1)]) > LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]]) {code} > It is not valid to deduce that join keys from the both sides cannot have null > values. All that we can deduce from the join condition, is that they cannot > be null in the same time. -- This message was sent by Atlassian Jira (v8.20.10#820010)