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