You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "DeepSink He (Jira)" <ji...@apache.org> on 2026/01/22 02:57:00 UTC

[jira] [Comment Edited] (CALCITE-7391) FILTER_REDUCE_EXPRESSIONS crashes on expression where 123 in (SELECT NULL FROM emps)

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

DeepSink He edited comment on CALCITE-7391 at 1/22/26 2:56 AM:
---------------------------------------------------------------

[~mbudiu] I have submitted a  [PR|http://github.com/apache/calcite/pull/4760] try to fix this issue.


was (Author: JIRAUSER307201):
[~mbudiu] I have submitted a [PR |github.com/apache/calcite/pull/4760] try to fix this issue.

> FILTER_REDUCE_EXPRESSIONS crashes on expression where 123 in (SELECT NULL FROM emps)
> ------------------------------------------------------------------------------------
>
>                 Key: CALCITE-7391
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7391
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: DeepSink He
>            Priority: Minor
>              Labels: pull-request-available
>
> The following test added to RelOptRulesTest crashes:
> {code:java}
> @Test void testPredicatePull2() {
>   final String sql = "SELECT * from emp where 123 in (select null from dept)";
>   sql(sql)
>       .withRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE,
>           CoreRules.FILTER_PROJECT_TRANSPOSE,
>           CoreRules.PROJECT_REDUCE_EXPRESSIONS)
>       .check();
> } {code}
> stack trace:
>  
> {code:java}
> java.lang.AssertionError: Comparison with NULL in pulledUpPredicates    at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
>     at org.apache.calcite.util.Litmus.check(Litmus.java:76)
>     at org.apache.calcite.plan.RelOptPredicateList.<init>(RelOptPredicateList.java:134)
>     at org.apache.calcite.plan.RelOptPredicateList.of(RelOptPredicateList.java:206)
>     at org.apache.calcite.plan.RelOptPredicateList.of(RelOptPredicateList.java:159)
>     ....
>     at org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:914)
>     at org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:390)
>     at org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates_$(Unknown Source)
>     at org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates(Unknown Source)
>     at org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:914)
>     at org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:342)
>     at org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates_$(Unknown Source)
>     at org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates(Unknown Source)
>     at org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:914)
>     at org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:194)
>     at org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates_$(Unknown Source)
>     at org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates(Unknown Source)
>     at org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:914)
>     at org.apache.calcite.rel.rules.ReduceExpressionsRule$ProjectReduceExpressionsRule.onMatch(ReduceExpressionsRule.java:312) {code}
>  
> After applied "CoreRules.FILTER_SUB_QUERY_TO_CORRELATE" and  "CoreRules.FILTER_PROJECT_TRANSPOSE" rules, the logical plan transformed to :
>  
> {code:java}
> > LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
> >   LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
> >     LogicalJoin(condition=[true], joinType=[inner])
> >       LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> >       LogicalAggregate(group=[{0}])
> >         LogicalProject(cs=[true])
> >           LogicalProject(EXPR$0=[null:INTEGER])
> >             LogicalFilter(condition=[=(123, null)])
> >               LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) {code}
>  
> And then apply "CoreRules.FILTER_PROJECT_TRANSPOSE" rule
>  
> {code:java}
> final RelOptPredicateList predicates =
>     mq.getPulledUpPredicates(project.getInput()); {code}
> cause the AssertionError.
>  
> I think we shoud simplify the "newCondition" after apply the “FilterProjectTransposeRule” to transform  "condition=[=(123, null)]"  to "condition=[=false]"
>  
> related issue: https://issues.apache.org/jira/browse/CALCITE-7070
>  
>  
>  



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