[CALCITE-2478] SqlAdvisor: purge from_clause when _suggest_ token is located in one of the from sub-queries
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/67923a27 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/67923a27 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/67923a27 Branch: refs/heads/master Commit: 67923a27e64439305e113e0db9fcbe44a8c965ec Parents: 9f6c067 Author: Vladimir Sitnikov <sitnikov.vladi...@gmail.com> Authored: Sun Aug 19 18:33:07 2018 +0300 Committer: Vladimir Sitnikov <sitnikov.vladi...@gmail.com> Committed: Wed Sep 5 15:24:24 2018 +0300 ---------------------------------------------------------------------- .../apache/calcite/sql/advise/SqlSimpleParser.java | 5 +++++ .../org/apache/calcite/sql/test/SqlAdvisorTest.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/67923a27/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 b403753..edafcb4 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 @@ -718,6 +718,11 @@ public class SqlSimpleParser { for (int i = 0; i < sublist.size(); i++) { Token token = sublist.get(i); switch (token.type) { + case QUERY: + if (((Query)token).contains(hintToken)) { + found = true; + } + break; case JOIN: ++joinCount; // fall through http://git-wip-us.apache.org/repos/asf/calcite/blob/67923a27/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 e6a8ce8..a2b0d4f 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 @@ -691,6 +691,20 @@ public class SqlAdvisorTest extends SqlValidatorTestCase { 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 testSimlifySubqueryMultipleFrom() { + String sql; + // "dummy b" should be removed + sql = "select axc from (select (select ^ from dummy) axc from dummy a), dummy b"; + assertSimplify(sql, + "SELECT * FROM ( SELECT ( SELECT _suggest_ FROM dummy ) axc FROM dummy a )"); + + // "dummy b" should be removed + sql = "select axc from dummy b, (select (select ^ from dummy) axc from dummy a)"; + assertSimplify(sql, + "SELECT * FROM ( SELECT ( SELECT _suggest_ FROM dummy ) axc FROM dummy a )"); + } + @Test public void testSimlifyMinus() { String sql; sql = "select ^ from dummy a minus select * from dummy b";