You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by mm...@apache.org on 2018/07/20 17:41:39 UTC

[26/53] [abbrv] calcite git commit: [CALCITE-2398] SqlSelect must call into SqlDialect for unparse (James Duong)

[CALCITE-2398] SqlSelect must call into SqlDialect for unparse (James Duong)

Close apache/calcite#750


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

Branch: refs/heads/site
Commit: 606240d4f1e39ab36447a9b4abe20c6c519d5cab
Parents: 870e54f
Author: James Duong <jd...@dremio.com>
Authored: Tue Jul 3 16:42:18 2018 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Sun Jul 8 22:41:09 2018 -0700

----------------------------------------------------------------------
 .../java/org/apache/calcite/sql/SqlSelect.java  |  4 ++--
 .../rel/rel2sql/RelToSqlConverterTest.java      | 24 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/606240d4/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlSelect.java b/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
index ad7d6ef..2c23774 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
@@ -233,10 +233,10 @@ public class SqlSelect extends SqlCall {
       // ORDER. In this case, we don't need a wrapper frame.)
       final SqlWriter.Frame frame =
           writer.startList(SqlWriter.FrameTypeEnum.SUB_QUERY, "(", ")");
-      getOperator().unparse(writer, this, 0, 0);
+      writer.getDialect().unparseCall(writer, this, 0, 0);
       writer.endList(frame);
     } else {
-      getOperator().unparse(writer, this, leftPrec, rightPrec);
+      writer.getDialect().unparseCall(writer, this, leftPrec, rightPrec);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/606240d4/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index 53ba8a9..c5af61a 100644
--- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -26,9 +26,12 @@ import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.rules.UnionMergeRule;
 import org.apache.calcite.runtime.FlatLists;
 import org.apache.calcite.schema.SchemaPlus;
+import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlDialect;
 import org.apache.calcite.sql.SqlDialect.Context;
 import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.SqlSelect;
+import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.dialect.CalciteSqlDialect;
 import org.apache.calcite.sql.dialect.HiveSqlDialect;
 import org.apache.calcite.sql.dialect.JethroDataSqlDialect;
@@ -2514,6 +2517,27 @@ public class RelToSqlConverterTest {
     sql(query).ok(expected);
   }
 
+  @Test public void testUnparseSelectMustUseDialect() {
+    final String query = "select * from \"product\"";
+    final String expected = "SELECT *\n"
+        + "FROM foodmart.product";
+
+    final boolean[] callsUnparseCallOnSqlSelect = {false};
+    final SqlDialect dialect = new SqlDialect(SqlDialect.EMPTY_CONTEXT) {
+      @Override public void unparseCall(SqlWriter writer, SqlCall call,
+          int leftPrec, int rightPrec) {
+        if (call instanceof SqlSelect) {
+          callsUnparseCallOnSqlSelect[0] = true;
+        }
+        super.unparseCall(writer, call, leftPrec, rightPrec);
+      }
+    };
+    sql(query).dialect(dialect).ok(expected);
+
+    assertThat("Dialect must be able to customize unparseCall() for SqlSelect",
+        callsUnparseCallOnSqlSelect[0], is(true));
+  }
+
   /** Fluid interface to run tests. */
   private static class Sql {
     private CalciteAssert.SchemaSpec schemaSpec;