You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by li...@apache.org on 2023/03/02 05:14:13 UTC

[calcite] branch main updated: [CALCITE-5504] Array value constructor is unparsed incorrectly for `SparkSqlDialect`

This is an automated email from the ASF dual-hosted git repository.

libenchao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new fb063e8d11 [CALCITE-5504] Array value constructor is unparsed incorrectly for `SparkSqlDialect`
fb063e8d11 is described below

commit fb063e8d1191853c6208e30c601e38fb44d37db5
Author: Guillaume Massé <ma...@gmail.com>
AuthorDate: Tue Jan 31 17:56:44 2023 -0500

    [CALCITE-5504] Array value constructor is unparsed incorrectly for `SparkSqlDialect`
    
    Close apache/calcite#3056
---
 .../java/org/apache/calcite/sql/dialect/SparkSqlDialect.java   | 10 ++++++++++
 .../org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java  | 10 ++++++++++
 2 files changed, 20 insertions(+)

diff --git a/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java b/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
index 5bf2ec391f..afb6579a40 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
@@ -97,6 +97,16 @@ public class SparkSqlDialect extends SqlDialect {
       SqlUtil.unparseFunctionSyntax(SPARKSQL_SUBSTRING, writer, call, false);
     } else {
       switch (call.getKind()) {
+      case ARRAY_VALUE_CONSTRUCTOR:
+        writer.keyword("array");
+        final SqlWriter.Frame frame = writer.startList("(", ")");
+        for (SqlNode operand : call.getOperandList()) {
+          writer.sep(",");
+          operand.unparse(writer, leftPrec, rightPrec);
+        }
+        writer.endList(frame);
+        break;
+
       case FLOOR:
         if (call.operandCount() != 2) {
           super.unparseCall(writer, call, leftPrec, rightPrec);
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 9b8e7226f0..e373c073a6 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
@@ -3674,6 +3674,16 @@ class RelToSqlConverterTest {
     sql(retainLimitQuery).ok(retainLimitResult);
   }
 
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-5504">[CALCITE-5504]
+   * Array literals are unparsed incorrectly for the spark dialect</a>.*/
+  @Test void testArrayValueConstructorSpark() {
+    final String query = "SELECT ARRAY[1, 2, 3]";
+    final String expected = "SELECT ARRAY (1, 2, 3)\n"
+        + "FROM (VALUES (0)) t (ZERO)";
+    sql(query).withSpark().ok(expected);
+  }
+
   /** Test case for
    * <a href="https://issues.apache.org/jira/browse/CALCITE-4674">[CALCITE-4674]
    * Excess quotes in generated SQL when STAR is a column alias</a>. */