[
https://issues.apache.org/jira/browse/CALCITE-7623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated CALCITE-7623:
------------------------------------
Labels: pull-request-available (was: )
> SemiJoinProjectTransposeRule should support ANTI joins
> ------------------------------------------------------
>
> Key: CALCITE-7623
> URL: https://issues.apache.org/jira/browse/CALCITE-7623
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Affects Versions: 1.42.0
> Reporter: Zhen Chen
> Assignee: Zhen Chen
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.43.0
>
>
> {{SemiJoinProjectTransposeRule}} currently only matches {{SEMI}} joins via
> {{{}Join::isSemiJoin{}}}, but the same left-side project transpose is valid
> for {{ANTI}} joins because both {{SEMI}} and {{ANTI}} joins only project
> fields from the left input.
> For example:
> {code:java}
> LogicalJoin(condition=[=($1, $9)], joinType=[anti])
> LogicalProject(DNAME=[$1], DEPTNO=[$0])
> LogicalTableScan(table=[[scott, DEPT]])
> LogicalTableScan(table=[[scott, EMP]]) {code}
> can be transformed to:
> {code:java}
> LogicalProject(DNAME=[$1], DEPTNO=[$0])
> LogicalJoin(condition=[=($0, $10)], joinType=[anti])
> LogicalTableScan(table=[[scott, DEPT]])
> LogicalTableScan(table=[[scott, EMP]]) {code}
> Extend SemiJoinProjectTransposeRule to:
> # match both JoinRelType.SEMI and JoinRelType.ANTI;
> # preserve the original join type when creating the new LogicalJoin;
> # keep the existing behavior unchanged for SEMI.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)