[
https://issues.apache.org/jira/browse/CALCITE-6973?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17945963#comment-17945963
]
Julian Hyde commented on CALCITE-6973:
--------------------------------------
I appreciate you making clear that this version of the rule only supports
EXCEPT DISTINCT and two inputs. I believe that future versions of the rule
could generalize, without much trouble, to EXCEPT ALL and N inputs.
> Add rule for convert Minus to Filter
> ------------------------------------
>
> Key: CALCITE-6973
> URL: https://issues.apache.org/jira/browse/CALCITE-6973
> Project: Calcite
> Issue Type: New Feature
> Reporter: Zhen Chen
> Priority: Major
> Labels: pull-request-available
>
> Replaceing Minus with Filter when both inputs are from the same source with
> only filter conditions differing.
> SQL like
> {code:java}
> SELECT mgr, comm FROM emp WHERE mgr = 12
> EXCEPT
> SELECT mgr, comm FROM emp WHERE comm = 5
> ==>
> SELECT DISTINCT mgr, comm FROM emp
> WHERE mgr = 12 AND NOT(comm = 5) {code}
> Plan like
> {code:java}
> LogicalMinus(all=[false])
> LogicalFilter(condition=[=($0, 12)])
> LogicalProject(MGR=[$3], COMM=[$6])
> LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> LogicalFilter(condition=[=($1, 5)])
> LogicalProject(MGR=[$3], COMM=[$6])
> LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> ==>
> LogicalAggregate(group=[{0, 1}])
> LogicalFilter(condition=[AND(=($0, 12), <>($1, 5))])
> LogicalProject(MGR=[$3], COMM=[$6])
> LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> {code}
> Some plans may contain complex alternating Filter and Project, which are not
> handled by this rule. Prerequisite rules are required to normalize such cases
> first. Currently only supports ALL is false and 2-way Minus.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)