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. */
