[
https://issues.apache.org/jira/browse/CALCITE-7341?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
xiong duan reassigned CALCITE-7341:
-----------------------------------
Assignee: xiong duan
> RelFieldTrimmer should trim Scalar sub-query
> --------------------------------------------
>
> Key: CALCITE-7341
> URL: https://issues.apache.org/jira/browse/CALCITE-7341
> Project: Calcite
> Issue Type: Bug
> Reporter: xiong duan
> Assignee: xiong duan
> Priority: Major
>
> The unit test in RelFieldTrimmerTest:
> {code:java}
> @Test void testTrimCorrelatedSubquery() {
> 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.literal(10)))
> .project(ImmutableSet.of(v.get().id),
> builder.field(0),
> 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()))
> .build();
> String origTree = ""
> + "LogicalProject(variablesSet=[[$cor0]], EMPNO=[$0],
> $f1=[$SCALAR_QUERY({\n"
> + "LogicalAggregate(group=[{}], c=[COUNT()])\n"
> + " LogicalFilter(condition=[<($3, $cor0.MGR)])\n"
> + " LogicalTableScan(table=[[scott, EMP]])\n})])\n"
> + " LogicalFilter(condition=[>($5, 10)])\n"
> + " LogicalTableScan(table=[[scott, EMP]])\n";
> assertThat(root, hasTree(origTree));
> final RelFieldTrimmer fieldTrimmer = new RelFieldTrimmer(null, builder);
> final RelNode trimmed = fieldTrimmer.trim(root);
> final String expected = ""
> + "LogicalProject(variablesSet=[[$cor0]], EMPNO=[$0],
> $f1=[$SCALAR_QUERY({\n"
> + "LogicalAggregate(group=[{}], c=[COUNT()])\n"
> + " LogicalFilter(condition=[<($3, $cor0.MGR)])\n"
> + " LogicalTableScan(table=[[scott, EMP]])\n"
> + "})])\n"
> + " LogicalFilter(condition=[>($2, 10)])\n"
> + " LogicalProject(EMPNO=[$0], MGR=[$3], SAL=[$5])\n"
> + " LogicalTableScan(table=[[scott, EMP]])\n";
> assertThat(trimmed, hasTree(expected));
> } {code}
> The LogicalTableScan in SCALAR_QUERY should have a LogicalProject to identify
> the required columns
--
This message was sent by Atlassian Jira
(v8.20.10#820010)