[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";

Reply via email to