[ https://issues.apache.org/jira/browse/CALCITE-6875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17936659#comment-17936659 ]
xiong duan commented on CALCITE-6875: ------------------------------------- Fixed in [3fe2d90|https://github.com/apache/calcite/commit/3fe2d9072137da70545c09f2836e7631bc2a964e]. Thanks for the review [~mbudiu]. > EnumerableFilterRule/EnumerableProjectRule should not convert a Logical > Filter/Project to Enumerable Filter/Project when it contains Subquery > --------------------------------------------------------------------------------------------------------------------------------------------- > > Key: CALCITE-6875 > URL: https://issues.apache.org/jira/browse/CALCITE-6875 > Project: Calcite > Issue Type: Bug > Reporter: xiong duan > Assignee: xiong duan > Priority: Major > Labels: pull-request-available > Fix For: 1.40.0 > > > Calcite hasn't implemented EnumerableFilter and EnumerableProject, so we need > to convert them to EnumerableCalc. However, EnumerableCalc doesn't support > Subquery. > The unit test in RelOptRulesTest: > {code:java} > @Test void testEnumerableProjectRule() { > final String sql = "select sal > all (select comm from emp) from emp"; > sql(sql) > .withVolcanoPlanner(false, p -> { > p.addRelTraitDef(RelDistributionTraitDef.INSTANCE); > p.addRule(CoreRules.PROJECT_SUB_QUERY_TO_CORRELATE); > p.addRule(EnumerableRules.ENUMERABLE_PROJECT_RULE); > p.addRule(EnumerableRules.ENUMERABLE_TABLE_SCAN_RULE); > p.addRule(EnumerableRules.ENUMERABLE_PROJECT_TO_CALC_RULE); > p.addRule(EnumerableRules.ENUMERABLE_JOIN_RULE); > p.addRule(EnumerableRules.ENUMERABLE_AGGREGATE_RULE); > }).check(); > } {code} > The result is : > {code:java} > <TestCase name="testEnumerableProjectRule"> > <Resource name="sql"> > <![CDATA[select sal > all (select comm from emp) from emp]]> > </Resource> > <Resource name="planBefore"> > <![CDATA[ > LogicalProject(EXPR$0=[NOT(<= SOME($5, { > LogicalProject(COMM=[$6]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > }))]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > ]]> > </Resource> > <Resource name="planAfter"> > <![CDATA[ > EnumerableProject(EXPR$0=[NOT(<= SOME($5, { > LogicalProject(COMM=[$6]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > }))]) > EnumerableTableScan(table=[[CATALOG, SALES, EMP]]) > ]]> > </Resource> {code} > The EnumerableProject has a LogicalProject. This is illegal. -- This message was sent by Atlassian Jira (v8.20.10#820010)