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

Reply via email to