[
https://issues.apache.org/jira/browse/CALCITE-7071?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17985931#comment-17985931
]
Mihai Budiu commented on CALCITE-7071:
--------------------------------------
It looks to me that a new rule would be more general and it would cover all
cases this one is covering, and it would enable additional optimizations.
That being said, it may be acceptable for rules to do additional local cleanup
to reduce the search space.
But maybe the removeJoin function you wrote could be shared in that case.
> Support replacing JOIN node with its child node when JOIN condition is false
> in ProjectJoinRemoveRule
> -----------------------------------------------------------------------------------------------------
>
> Key: CALCITE-7071
> URL: https://issues.apache.org/jira/browse/CALCITE-7071
> Project: Calcite
> Issue Type: Improvement
> Reporter: Zhen Chen
> Assignee: Zhen Chen
> Priority: Minor
> Labels: pull-request-available
> Fix For: 1.41.0
>
>
> SQL
> {code:java}
> SELECT e.deptno
> FROM sales.emp e
> LEFT JOIN sales.dept d ON e.deptno = d.deptno and e.deptno between 3 and 1
> {code}
> Plan before
> {code:java}
> LogicalProject(DEPTNO=[$7])
> LogicalJoin(condition=[false], joinType=[left])
> LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
> {code}
> Plan after
> {code:java}
> LogicalProject(DEPTNO=[$7])
> LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> {code}
> In ProjectJoinRemoveRule, when the Join condition is false, replace the Join
> with its left child for a left join or its right child for a right join. The
> above is an example of a left join.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)