[ 
https://issues.apache.org/jira/browse/CALCITE-6545?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17876800#comment-17876800
 ] 

Brandon Chong commented on CALCITE-6545:
----------------------------------------

I have a local fix if the community is okay with this change. 

> SqlToRel does not honor expand = false for IN Subquery with literals
> --------------------------------------------------------------------
>
>                 Key: CALCITE-6545
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6545
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Brandon Chong
>            Priority: Minor
>
> If a query has
> `SELECT * FROM EMP WHERE EMPNO IN (1, 2)` 
> and the literal list is longer than InSubQueryThreshold, then I think it 
> should rewrite to a RexSubquery with Values RelNode like so:
> ```
> LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], 
> SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
>     LogicalFilter(condition=[IN($0, \{ LogicalValues(tuples=[[{ 1 }, \{ 2 
> }]]) })])
>           LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> ```
> I understand that the docs explicitly calls out that it will rewrite to a 
> JOIN:
> /** Returns the \{@code inSubQueryThreshold} option,
> * default \{@link #DEFAULT_IN_SUB_QUERY_THRESHOLD}. Controls the list size
> * threshold under which \{@link #convertInToOr} is used. Lists of this size
> * or greater will instead be converted to use a join against an inline
> * table (\{@link org.apache.calcite.rel.logical.LogicalValues}) rather than
> * a predicate. A threshold of 0 forces usage of an inline table in all
> * cases; a threshold of \{@link Integer#MAX_VALUE} forces usage of OR in all
> * cases. */
> int getInSubQueryThreshold();
>  
> But I feel this contradicts: 
> /** Returns the \{@code expand} option. Controls whether to expand
> * sub-queries. If false, each sub-query becomes a
> * \{@link org.apache.calcite.rex.RexSubQuery}. */
> boolean isExpand();
>  



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

Reply via email to