You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by ho...@apache.org on 2019/03/06 02:52:50 UTC

[calcite] branch master updated: [CALCITE-2891] Alias suggester failed to suggest name based on original name incrementally (Haisheng Yuan)

This is an automated email from the ASF dual-hosted git repository.

hongze pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new 92562a0  [CALCITE-2891] Alias suggester failed to suggest name based on original name incrementally (Haisheng Yuan)
92562a0 is described below

commit 92562a0f213fc1edc66e25f9c88e15bacb9085df
Author: Haisheng Yuan <h....@alibaba-inc.com>
AuthorDate: Mon Mar 4 23:06:44 2019 -0600

    [CALCITE-2891] Alias suggester failed to suggest name based on original name incrementally (Haisheng Yuan)
    
    Close apache/calcite#1085
---
 .../java/org/apache/calcite/tools/RelBuilder.java  |  3 ++-
 .../org/apache/calcite/test/RelBuilderTest.java    | 29 +++++++++++++++++++++-
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index 9dfba8b..ccb987c 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -1207,6 +1207,7 @@ public class RelBuilder {
     for (int i = 0; i < fieldNameList.size(); ++i) {
       final RexNode node = nodeList.get(i);
       String name = fieldNameList.get(i);
+      String originalName = name;
       Field field;
       if (name == null || uniqueNameList.contains(name)) {
         int j = 0;
@@ -1214,7 +1215,7 @@ public class RelBuilder {
           j = i;
         }
         do {
-          name = SqlValidatorUtil.F_SUGGESTER.apply(name, j, j++);
+          name = SqlValidatorUtil.F_SUGGESTER.apply(originalName, j, j++);
         } while (uniqueNameList.contains(name));
         fieldNameList.set(i, name);
       }
diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
index 635c1d7..fa5a150 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -1535,11 +1535,38 @@ public class RelBuilderTest {
             .build();
     final String expected = ""
         + "LogicalFilter(condition=[>($1, $2)])\n"
-        + "  LogicalProject($f1=[20], $f12=[10], DEPTNO=[$7])\n"
+        + "  LogicalProject($f1=[20], $f2=[10], DEPTNO=[$7])\n"
         + "    LogicalTableScan(table=[[scott, EMP]])\n";
     assertThat(root, hasTree(expected));
   }
 
+  /**
+   * Tests that project field name aliases are suggested incrementally.
+   */
+  @Test public void testAliasSuggester() {
+    final RelBuilder builder = RelBuilder.create(config().build());
+    RelNode root = builder.scan("EMP")
+        .project(builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0),
+            builder.field(0))
+        .build();
+    final String expected = ""
+        + "LogicalProject(EMPNO=[$0], EMPNO0=[$0], EMPNO1=[$0], "
+        + "EMPNO2=[$0], EMPNO3=[$0], EMPNO4=[$0], EMPNO5=[$0], "
+        + "EMPNO6=[$0], EMPNO7=[$0], EMPNO8=[$0], EMPNO9=[$0], EMPNO10=[$0])\n"
+        + "  LogicalTableScan(table=[[scott, EMP]])\n";
+    assertThat(root, hasTree(expected));
+  }
+
   @Test public void testAliasAggregate() {
     final RelBuilder builder = RelBuilder.create(config().build());
     RelNode root =