Repository: calcite
Updated Branches:
  refs/heads/master ac9c8c7af -> e30600d63


[CALCITE-319] Table aliases should follow case-sensitivity policy


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

Branch: refs/heads/master
Commit: 54d29dc172283157baf59d06213017fb5278d14c
Parents: ac9c8c7
Author: Julian Hyde <[email protected]>
Authored: Tue Jul 5 15:08:06 2016 -0700
Committer: Julian Hyde <[email protected]>
Committed: Tue Jul 5 15:08:06 2016 -0700

----------------------------------------------------------------------
 .../calcite/sql/validate/SqlValidatorImpl.java    | 11 ++++++++++-
 .../main/java/org/apache/calcite/util/Bug.java    |  5 -----
 .../org/apache/calcite/test/SqlValidatorTest.java | 18 +++++++++++++-----
 3 files changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/54d29dc1/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java 
b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
index ae4f8e5..2b6b640 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
@@ -2986,7 +2986,16 @@ public class SqlValidatorImpl implements 
SqlValidatorWithHints {
     final SqlValidatorScope fromScope = getFromScope(select);
     final List<Pair<String, SqlValidatorNamespace>> children =
         ((SelectScope) fromScope).children;
-    int duplicateAliasOrdinal = Util.firstDuplicate(Pair.left(children));
+    List<String> names = Pair.left(children);
+    if (!catalogReader.isCaseSensitive()) {
+      names = Lists.transform(names,
+          new Function<String, String>() {
+            public String apply(String s) {
+              return s.toUpperCase();
+            }
+          });
+    }
+    final int duplicateAliasOrdinal = Util.firstDuplicate(names);
     if (duplicateAliasOrdinal >= 0) {
       final Pair<String, SqlValidatorNamespace> child =
           children.get(duplicateAliasOrdinal);

http://git-wip-us.apache.org/repos/asf/calcite/blob/54d29dc1/core/src/main/java/org/apache/calcite/util/Bug.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/util/Bug.java 
b/core/src/main/java/org/apache/calcite/util/Bug.java
index f60fbd1..1adc2fe 100644
--- a/core/src/main/java/org/apache/calcite/util/Bug.java
+++ b/core/src/main/java/org/apache/calcite/util/Bug.java
@@ -151,11 +151,6 @@ public abstract class Bug {
    * Array items in MongoDB adapter</a> is fixed. */
   public static final boolean CALCITE_194_FIXED = false;
 
-  /** Whether
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-319";>[CALCITE-319]
-   * Table aliases should follow case-sensitivity policy</a> is fixed. */
-  public static final boolean CALCITE_319_FIXED = false;
-
   /** Whether the remaining issues raised in
    * <a href="https://issues.apache.org/jira/browse/CALCITE-461";>[CALCITE-461]
    * Convert more planner rules to handle grouping sets</a> are fixed.

http://git-wip-us.apache.org/repos/asf/calcite/blob/54d29dc1/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java 
b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
index 1c44a0b..5fcd47e 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
@@ -7325,18 +7325,26 @@ public class SqlValidatorTest extends 
SqlValidatorTestCase {
 
     checkFails("select count(1), ^empno^ from emp",
         "Expression 'EMPNO' is not being grouped");
+  }
 
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-319";>[CALCITE-319]
+   * Table aliases should follow case-sensitivity policy</a>. */
+  @Test public void testCaseInsensitiveTableAlias() {
+    final SqlTester tester1 = tester
+        .withCaseSensitive(false)
+        .withQuoting(Quoting.BRACKET);
+    final SqlTester tester2 = tester.withQuoting(Quoting.BRACKET);
     // Table aliases should follow case-sensitivity preference.
     //
     // In MySQL, table aliases are case-insensitive:
     // mysql> select `D`.day from DAYS as `d`, DAYS as `D`;
     // ERROR 1066 (42000): Not unique table/alias: 'D'
+    tester1.checkQueryFails("select count(*) from dept as [D], ^dept as [d]^",
+        "Duplicate relation name 'd' in FROM clause");
     tester2.checkQuery("select count(*) from dept as [D], dept as [d]");
-    if (!Bug.CALCITE_319_FIXED) {
-      return;
-    }
-    tester1.checkQueryFails("select count(*) from dept as [D], dept as [d]",
-        "xxx");
+    tester2.checkQueryFails("select count(*) from dept as [D], ^dept as [D]^",
+        "Duplicate relation name 'D' in FROM clause");
   }
 
   /** Tests matching of built-in operator names. */

Reply via email to