You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2018/01/23 01:33:17 UTC

[2/2] calcite git commit: [CALCITE-2143] SqlImplementor wrongly generates SQL that refers to aliases in SELECT clause (Sam Waggoner)

[CALCITE-2143] SqlImplementor wrongly generates SQL that refers to aliases in SELECT clause (Sam Waggoner)

Close apache/calcite#613


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/26b18910
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/26b18910
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/26b18910

Branch: refs/heads/master
Commit: 26b18910f267233f812c3774723516742b5b3f42
Parents: 2f06426
Author: Sam Waggoner <sa...@gmail.com>
Authored: Mon Jan 22 06:54:07 2018 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Jan 22 16:08:12 2018 -0800

----------------------------------------------------------------------
 .../calcite/rel/rel2sql/SqlImplementor.java     |  6 ++---
 .../rel/rel2sql/RelToSqlConverterTest.java      | 23 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/26b18910/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index b8a51b0..594cd3c 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -945,9 +945,9 @@ public abstract class SqlImplementor {
         if (needNew
                 && neededAlias != null
                 && (aliases.size() != 1 || !aliases.containsKey(neededAlias))) {
-          newContext =
-              aliasContext(ImmutableMap.of(neededAlias, rel.getRowType()),
-                  qualified);
+          final Map<String, RelDataType> newAliases =
+              ImmutableMap.of(neededAlias, rel.getInput(0).getRowType());
+          newContext = aliasContext(newAliases, qualified);
         } else {
           newContext = aliasContext(aliases, qualified);
         }

http://git-wip-us.apache.org/repos/asf/calcite/blob/26b18910/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index 54cb4cd..d6bb976 100644
--- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -2288,6 +2288,29 @@ public class RelToSqlConverterTest {
     sql(sql).ok(expected);
   }
 
+  @Test public void testFieldNamesWithAggregateSubQuery() {
+    final String query = "select mytable.\"city\",\n"
+        + "  sum(mytable.\"store_sales\") as \"my-alias\"\n"
+        + "from (select c.\"city\", s.\"store_sales\"\n"
+        + "  from \"sales_fact_1997\" as s\n"
+        + "    join \"customer\" as c using (\"customer_id\")\n"
+        + "  group by c.\"city\", s.\"store_sales\") AS mytable\n"
+        + "group by mytable.\"city\"";
+
+    final String expected = "SELECT \"t0\".\"city\","
+        + " SUM(\"t0\".\"store_sales\") AS \"my-alias\"\n"
+        + "FROM (SELECT \"customer\".\"city\","
+        + " \"sales_fact_1997\".\"store_sales\"\n"
+        + "FROM \"foodmart\".\"sales_fact_1997\"\n"
+        + "INNER JOIN \"foodmart\".\"customer\""
+        + " ON \"sales_fact_1997\".\"customer_id\""
+        + " = \"customer\".\"customer_id\"\n"
+        + "GROUP BY \"customer\".\"city\","
+        + " \"sales_fact_1997\".\"store_sales\") AS \"t0\"\n"
+        + "GROUP BY \"t0\".\"city\"";
+    sql(query).ok(expected);
+  }
+
   /** Fluid interface to run tests. */
   private static class Sql {
     private CalciteAssert.SchemaSpec schemaSpec;