[ https://issues.apache.org/jira/browse/CALCITE-3226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16909567#comment-16909567 ]
jin xing commented on CALCITE-3226: ----------------------------------- Thanks a lot for clarify [~rubenql] I think [~julianhyde] expects to add a test case where the view of “select * from t” expands as a Scan, but I tried and turned out that it always expands as a Project+Scan. For a common table scan, the alias would have already been correctly set and I added a test case testProjectWithAliasFromScan(https://github.com/apache/calcite/pull/1351/files#diff-9f6a8f13d9ad70d7336340bf6b2e7b71R702) Thanks a lot for review this issue [~julianhyde][~rubenql] and sorry for my late reply > 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)