[
https://issues.apache.org/jira/browse/CALCITE-3226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16903632#comment-16903632
]
Ruben Quesada Lopez commented on CALCITE-3226:
----------------------------------------------
[~julianhyde], correct me if you are wrong, the test that you are requesting is:
{quote}the case where the view is “select * from t”, I.e. a single TableScan.
You code assumes that if the result of the expansion is a table scan expansion
did not occur.
{quote}
I think that the merged solution does not assume that. My understanding is
that, if the result of a expansion is a table scan, the expansion did occur,
and the alias would have already been correctly set, no need to explicitly set
the alias using {{RelBuilder#as}}. Apart from that, it would seem that this
scenario is not actually possible, because expansion always adds a Project as
last step, so I am not so sure how we could force that test case. Do you
confirm [[email protected]]?
> RelBuilder doesn't keep the alias when scan from an expanded view
> -----------------------------------------------------------------
>
> Key: CALCITE-3226
> URL: https://issues.apache.org/jira/browse/CALCITE-3226
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: jin xing
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.21.0
>
> Time Spent: 1h 20m
> Remaining Estimate: 0h
>
> In current implementation of {{RelBuilder::scan}}
> ([https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/tools/RelBuilder.java#L1048]),
> the alias can be derived and recorded into {{Frame}} only when the
> {{RelNode}} is a {{TableScan}}
> ([https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/tools/RelBuilder.java#L2754]).
> But when {{RelBuilder::scan}} from an expanded view, the node is not a
> {{TableScan}} and the alias is not kept. Below test failed - we cannot
> reference a field by alias "MYVIEW".
> {code:java}
> @Test public void testExpandViewShouldKeepAlias() throws SQLException {
> try (Connection connection =
> DriverManager.getConnection("jdbc:calcite:")) {
> final Frameworks.ConfigBuilder configBuilder =
> expandingConfig(connection);
> final RelOptTable.ViewExpander viewExpander =
> (RelOptTable.ViewExpander)
> Frameworks.getPlanner(configBuilder.build());
> final RelFactories.TableScanFactory tableScanFactory =
> RelFactories.expandingScanFactory(viewExpander,
> RelFactories.DEFAULT_TABLE_SCAN_FACTORY);
> configBuilder.context(Contexts.of(tableScanFactory));
> final RelBuilder builder = RelBuilder.create(configBuilder.build());
> RelNode node =
> builder.scan("MYVIEW")
> .project(
> builder.field(1, "MYVIEW", "EMPNO"), // Exception
> thrown from here.
> builder.field(1, "MYVIEW", "ENAME"))
> .build();
> String expected =
> "LogicalProject(EMPNO=[$0], ENAME=[$1])\n"
> + " LogicalFilter(condition=[=(1, 1)])\n"
> + " LogicalTableScan(table=[[scott, EMP]])\n";
> assertThat(node, hasTree(expected));
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)