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

ASF GitHub Bot updated CALCITE-7391:
------------------------------------
    Labels: pull-request-available  (was: )

> 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)

Reply via email to