[ 
https://issues.apache.org/jira/browse/CALCITE-6650?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

xiong duan reassigned CALCITE-6650:
-----------------------------------

    Assignee: xiong duan

> Optimize the IN sub-query and SOME sub-query by Metadata RowCount
> -----------------------------------------------------------------
>
>                 Key: CALCITE-6650
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6650
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: xiong duan
>            Assignee: xiong duan
>            Priority: Major
>              Labels: pull-request-available
>
> As same as the UNIQUE sub-query, before we convert the sub-query to RelNode. 
> we use the Metadata to optimize it.
>  * IN sub-query, If the sub-query is guaranteed to produce no row, just 
> return FALSE.
>  * SOME sub-query, If the sub-query is guaranteed to produce no row, just 
> return FALSE.
> SQL Example:
> {code:java}
> select * from dept as d where deptno not in (select count(*) from emp e 
> having false)
> Before this PR:
> LogicalProject(DEPTNO=[$0], NAME=[$1])
>   LogicalProject(DEPTNO=[$0], NAME=[$1])
>     LogicalFilter(condition=[OR(=($2, 0), AND(IS NULL($5), >=($3, $2)))])
>       LogicalJoin(condition=[=(CAST($0):BIGINT NOT NULL, $4)], 
> joinType=[left])
>         LogicalJoin(condition=[true], joinType=[inner])\n          
>           LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
>           LogicalProject(c=[$0], ck=[$0])
>             LogicalAggregate(group=[{}], c=[COUNT()])
>               LogicalValues(tuples=[[]])
>         LogicalProject(EXPR$0=[$0], i=[true])
>           LogicalValues(tuples=[[]])\n
> After this PR:
> LogicalProject(DEPTNO=[$0], NAME=[$1])
>   LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to