Repository: calcite
Updated Branches:
  refs/heads/master a56b84e3b -> 55d7c6d80


[CALCITE-1675] Two-level column name cannot be resolved in ORDER BY


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

Branch: refs/heads/master
Commit: 55d7c6d80faf8a4b1b54bbde41b79064f1e36466
Parents: a56b84e
Author: maryannxue <[email protected]>
Authored: Thu Mar 9 11:44:25 2017 -0800
Committer: maryannxue <[email protected]>
Committed: Thu Mar 9 11:44:25 2017 -0800

----------------------------------------------------------------------
 .../calcite/sql/validate/DelegatingScope.java   |  8 +-----
 .../apache/calcite/sql/validate/ListScope.java  | 24 +++++++-----------
 .../sql/validate/MatchRecognizeScope.java       | 10 ++++++--
 .../calcite/test/SqlToRelConverterTest.java     | 10 ++++++++
 .../calcite/test/SqlToRelConverterTest.xml      | 26 ++++++++++++++++++++
 5 files changed, 54 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/55d7c6d8/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java 
b/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
index 0ec59a7..eed7d6f 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/DelegatingScope.java
@@ -34,7 +34,6 @@ import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.Util;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -180,11 +179,6 @@ public abstract class DelegatingScope implements 
SqlValidatorScope {
     return parent.findQualifyingTableName(columnName, ctx);
   }
 
-  protected Map<String, ScopeChild> findQualifyingTables(String columnName,
-      SqlNameMatcher nameMatcher) {
-    return ImmutableMap.of();
-  }
-
   public Map<String, ScopeChild> findQualifyingTableNames(String columnName,
       SqlNode ctx, SqlNameMatcher nameMatcher) {
     return parent.findQualifyingTableNames(columnName, ctx, nameMatcher);
@@ -328,7 +322,7 @@ public abstract class DelegatingScope implements 
SqlValidatorScope {
         // Look for a column not qualified by a table alias.
         columnName = identifier.names.get(0);
         final Map<String, ScopeChild> map =
-            findQualifyingTables(columnName, nameMatcher);
+            findQualifyingTableNames(columnName, identifier, nameMatcher);
         switch (map.size()) {
         default:
           final SqlIdentifier prefix1 = identifier.skipLast(1);

http://git-wip-us.apache.org/repos/asf/calcite/blob/55d7c6d8/core/src/main/java/org/apache/calcite/sql/validate/ListScope.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/validate/ListScope.java 
b/core/src/main/java/org/apache/calcite/sql/validate/ListScope.java
index e0f3427..3537e01 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/ListScope.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/ListScope.java
@@ -132,10 +132,11 @@ public abstract class ListScope extends DelegatingScope {
   findQualifyingTableName(final String columnName, SqlNode ctx) {
     final SqlNameMatcher nameMatcher = validator.catalogReader.nameMatcher();
     final Map<String, ScopeChild> map =
-        findQualifyingTables(columnName, nameMatcher);
+        findQualifyingTableNames(columnName, ctx, nameMatcher);
     switch (map.size()) {
     case 0:
-      return parent.findQualifyingTableName(columnName, ctx);
+      throw validator.newValidationError(ctx,
+          RESOURCE.columnNotFound(columnName));
     case 1:
       final Map.Entry<String, ScopeChild> entry =
           map.entrySet().iterator().next();
@@ -149,18 +150,6 @@ public abstract class ListScope extends DelegatingScope {
   @Override public Map<String, ScopeChild>
   findQualifyingTableNames(String columnName, SqlNode ctx,
       SqlNameMatcher nameMatcher) {
-    final Map<String, ScopeChild> map =
-        findQualifyingTables(columnName, nameMatcher);
-    switch (map.size()) {
-    case 0:
-      return parent.findQualifyingTableNames(columnName, ctx, nameMatcher);
-    default:
-      return map;
-    }
-  }
-
-  @Override public Map<String, ScopeChild>
-  findQualifyingTables(String columnName, SqlNameMatcher nameMatcher) {
     final Map<String, ScopeChild> map = new HashMap<>();
     for (ScopeChild child : children) {
       final ResolvedImpl resolved = new ResolvedImpl();
@@ -170,7 +159,12 @@ public abstract class ListScope extends DelegatingScope {
         map.put(child.name, child);
       }
     }
-    return map;
+    switch (map.size()) {
+    case 0:
+      return parent.findQualifyingTableNames(columnName, ctx, nameMatcher);
+    default:
+      return map;
+    }
   }
 
   @Override public void resolve(List<String> names, SqlNameMatcher nameMatcher,

http://git-wip-us.apache.org/repos/asf/calcite/blob/55d7c6d8/core/src/main/java/org/apache/calcite/sql/validate/MatchRecognizeScope.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/sql/validate/MatchRecognizeScope.java 
b/core/src/main/java/org/apache/calcite/sql/validate/MatchRecognizeScope.java
index 5050057..c0be246 100644
--- 
a/core/src/main/java/org/apache/calcite/sql/validate/MatchRecognizeScope.java
+++ 
b/core/src/main/java/org/apache/calcite/sql/validate/MatchRecognizeScope.java
@@ -65,7 +65,8 @@ public class MatchRecognizeScope extends ListScope {
   }
 
   @Override public Map<String, ScopeChild>
-  findQualifyingTables(String columnName, SqlNameMatcher nameMatcher) {
+  findQualifyingTableNames(String columnName, SqlNode ctx,
+      SqlNameMatcher nameMatcher) {
     final Map<String, ScopeChild> map = new HashMap<>();
     for (ScopeChild child : children) {
       final RelDataType rowType = child.namespace.getRowType();
@@ -73,7 +74,12 @@ public class MatchRecognizeScope extends ListScope {
         map.put(STAR, child);
       }
     }
-    return map;
+    switch (map.size()) {
+    case 0:
+      return parent.findQualifyingTableNames(columnName, ctx, nameMatcher);
+    default:
+      return map;
+    }
   }
 
   @Override public void resolve(List<String> names, SqlNameMatcher nameMatcher,

http://git-wip-us.apache.org/repos/asf/calcite/blob/55d7c6d8/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java 
b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 8bed9c3..d1200e6 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -1895,6 +1895,16 @@ public class SqlToRelConverterTest extends 
SqlToRelTestBase {
     sql(sql).ok();
   }
 
+  @Test public void testCustomColumnResolving4() {
+    final String sql = "select c1 from struct.t order by f0.c1";
+    sql(sql).ok();
+  }
+
+  @Test public void testCustomColumnResolving5() {
+    final String sql = "select count(c1) from struct.t group by f0.c1";
+    sql(sql).ok();
+  }
+
   @Test public void testCustomColumnResolvingWithSelectStar() {
     final String sql = "select * from struct.t";
     sql(sql).ok();

http://git-wip-us.apache.org/repos/asf/calcite/blob/55d7c6d8/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
----------------------------------------------------------------------
diff --git 
a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml 
b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index aa6f106..20c19bd 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -2846,6 +2846,32 @@ LogicalProject(C2=[$7])
 ]]>
         </Resource>
     </TestCase>
+    <TestCase name="testCustomColumnResolving4">
+        <Resource name="sql">
+            <![CDATA[select c1 from struct.t order by f0.c1]]>
+        </Resource>
+        <Resource name="plan">
+            <![CDATA[
+LogicalProject(C1=[$0])
+  LogicalSort(sort0=[$1], dir0=[ASC])
+    LogicalProject(C1=[$1], "F0"."C1"=[$6])
+      LogicalTableScan(table=[[CATALOG, STRUCT, T]])
+]]>
+        </Resource>
+    </TestCase>
+    <TestCase name="testCustomColumnResolving5">
+        <Resource name="sql">
+            <![CDATA[select count(c1) from struct.t group by f0.c1]]>
+        </Resource>
+        <Resource name="plan">
+            <![CDATA[
+LogicalProject(EXPR$0=[$1])
+  LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])
+    LogicalProject("F0"."C1"=[$6], "C1"=[$1])
+      LogicalTableScan(table=[[CATALOG, STRUCT, T]])
+]]>
+        </Resource>
+    </TestCase>
     <TestCase name="testCustomColumnResolvingWithSelectStar">
         <Resource name="sql">
             <![CDATA[select * from struct.t]]>

Reply via email to