[CALCITE-2477] SqlAdvisor: scalar sub-query support
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/9f6c0672 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/9f6c0672 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/9f6c0672 Branch: refs/heads/master Commit: 9f6c067256dde19d1b43b4ee978ce443e73797a4 Parents: 77b8c4d Author: Vladimir Sitnikov <[email protected]> Authored: Sun Aug 19 18:26:50 2018 +0300 Committer: Vladimir Sitnikov <[email protected]> Committed: Wed Sep 5 15:24:24 2018 +0300 ---------------------------------------------------------------------- .../calcite/sql/advise/SqlSimpleParser.java | 7 +++--- .../apache/calcite/sql/test/SqlAdvisorTest.java | 25 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/9f6c0672/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java b/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java index edc7c5f..b403753 100644 --- a/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java +++ b/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java @@ -202,13 +202,12 @@ public class SqlSimpleParser { iter.previous(); } } + // Combine SELECT ... UNION SELECT..., so keep trying consumeSelect break; - case RPAREN: - iter.previous(); - return; default: + // Unknown token detected => end of query detected iter.previous(); - break; + return; } } } http://git-wip-us.apache.org/repos/asf/calcite/blob/9f6c0672/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java b/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java index e2c6e73..e6a8ce8 100644 --- a/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java +++ b/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java @@ -30,6 +30,7 @@ import org.apache.calcite.test.WithLex; import com.google.common.collect.ImmutableMap; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.MethodRule; @@ -667,6 +668,29 @@ public class SqlAdvisorTest extends SqlValidatorTestCase { assertSimplify(sql, "SELECT ax _suggest_ FROM ( SELECT * FROM dummy a )"); } + @Test public void testSimlifySubqueryStar() { + String sql; + sql = "select ax^ from (select (select * from dummy) axc from dummy a)"; + assertSimplify(sql, + "SELECT ax _suggest_ FROM ( SELECT ( SELECT * FROM dummy ) axc FROM dummy a )"); + assertComplete(sql, "COLUMN(AXC)\n", "ax"); + + sql = + "select ax^ from (select a.x+0 axa, b.x axb, (select * from dummy) axbc from dummy a, dummy b)"; + assertSimplify(sql, + "SELECT ax _suggest_ FROM ( SELECT a.x+0 axa , b.x axb , ( SELECT * FROM dummy ) axbc FROM dummy a , dummy b )"); + assertComplete(sql, + "COLUMN(AXA)\nCOLUMN(AXB)\nCOLUMN(AXBC)\n", "ax"); + + sql = "select ^ from (select * from dummy)"; + assertSimplify(sql, "SELECT _suggest_ FROM ( SELECT * FROM dummy )"); + + sql = "select ^ from (select x.* from dummy x)"; + assertSimplify(sql, "SELECT _suggest_ FROM ( SELECT x.* FROM dummy x )"); + + sql = "select ^ from (select a.x + b.y from dummy a, dummy b)"; + assertSimplify(sql, "SELECT _suggest_ FROM ( SELECT a.x + b.y FROM dummy a , dummy b )"); + } @Test public void testSimlifyMinus() { String sql; sql = "select ^ from dummy a minus select * from dummy b"; @@ -1361,6 +1385,7 @@ public class SqlAdvisorTest extends SqlValidatorTestCase { ImmutableMap.of("KEYWORD(FROM)", "from")); } + @Ignore("Inserts are not supported by SimpleParser yet") @Test public void testInsert() throws Exception { String sql; sql = "insert into emp(empno, mgr) select ^ from dept a";
