[
https://issues.apache.org/jira/browse/CALCITE-7336?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
xiong duan updated CALCITE-7336:
--------------------------------
Summary: RelFieldTrimmer generates an incorrect plan when handling
correlated sub-query within a Filter or Join condition (was: RelFieldTrimmer
generates an incorrect plan when handling correlated sub-query within a Filter)
> RelFieldTrimmer generates an incorrect plan when handling correlated
> sub-query within a Filter or Join condition
> ----------------------------------------------------------------------------------------------------------------
>
> Key: CALCITE-7336
> URL: https://issues.apache.org/jira/browse/CALCITE-7336
> Project: Calcite
> Issue Type: Bug
> Reporter: xiong duan
> Assignee: xiong duan
> Priority: Major
> Labels: pull-request-available
>
> The UT in RelFieldTrimmerTest:
> {code:java}
> @Test void testTrimCorrelatedSubqueryFilter() {
> final RelBuilder builder = RelBuilder.create(config().build());
> final Holder<@Nullable RexCorrelVariable> v = Holder.empty();
> RelNode root = builder.scan("EMP")
> .variable(v::set)
> .filter(
> builder.call(SqlStdOperatorTable.GREATER_THAN, builder.field(5),
> builder.scalarQuery(
> b2 -> builder.scan("EMP").filter(
> builder.call(SqlStdOperatorTable.LESS_THAN,
> builder.field(3), builder.field(v.get(),
> "MGR")))
> .project(builder.field(0))
> .aggregate(builder.groupKey(), builder.countStar("c"))
> .build())))
> .project(builder.field(0))
> .build();
> final RelFieldTrimmer fieldTrimmer = new RelFieldTrimmer(null, builder);
> final RelNode trimmed = fieldTrimmer.trim(root);
> final String expected = "LogicalProject(EMPNO=[$0])\n" +
> " LogicalFilter(condition=[>($1, $SCALAR_QUERY({\n" +
> "LogicalAggregate(group=[{}], c=[COUNT()])\n" +
> " LogicalFilter(condition=[<($3, $cor0.MGR)])\n" +
> " LogicalTableScan(table=[[scott, EMP]])\n" +
> "}))])\n" +
> " LogicalProject(EMPNO=[$0], SAL=[$5])\n" +
> " LogicalTableScan(table=[[scott, EMP]])\n";
> assertThat(trimmed, hasTree(expected));
> } {code}
> The paln:
> {code:java}
> LogicalProject(EMPNO=[$0], SAL=[$5]) {code}
> should be:
> {code:java}
> LogicalProject(EMPNO=[$0], MGR=[$3], SAL=[$5]){code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)