DeepSink He created CALCITE-7391:
------------------------------------

             Summary: 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


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