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 298a94a09a [CALCITE-5577] Map value constructor is unparsed 
incorrectly for `SparkSqlDialect`
298a94a09a is described below

commit 298a94a09a7d15bbda429b19cb9d5a7e27f951ea
Author: Guillaume Massé <mas...@gmail.com>
AuthorDate: Mon Mar 13 13:18:46 2023 -0400

    [CALCITE-5577] Map value constructor is unparsed incorrectly for 
`SparkSqlDialect`
    
    Close apache/calcite#3108
---
 .../java/org/apache/calcite/sql/dialect/SparkSqlDialect.java   |  8 +++++++-
 .../org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java  | 10 ++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

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 afb6579a40..3a7b628ce1 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
@@ -24,6 +24,7 @@ import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlDialect;
 import org.apache.calcite.sql.SqlFunction;
 import org.apache.calcite.sql.SqlFunctionCategory;
+import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlUtil;
@@ -98,7 +99,12 @@ public class SparkSqlDialect extends SqlDialect {
     } else {
       switch (call.getKind()) {
       case ARRAY_VALUE_CONSTRUCTOR:
-        writer.keyword("array");
+      case MAP_VALUE_CONSTRUCTOR:
+        final String keyword =
+            call.getKind() == SqlKind.ARRAY_VALUE_CONSTRUCTOR ? "array" : 
"map";
+
+        writer.keyword(keyword);
+
         final SqlWriter.Frame frame = writer.startList("(", ")");
         for (SqlNode operand : call.getOperandList()) {
           writer.sep(",");
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 e373c073a6..cb41c225d2 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
@@ -3684,6 +3684,16 @@ class RelToSqlConverterTest {
     sql(query).withSpark().ok(expected);
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-5577";>[CALCITE-5577]
+   * Map value constructor is unparsed incorrectly for SparkSqlDialect</a>.*/
+  @Test void testMapValueConstructorSpark() {
+    final String query = "SELECT MAP['k1', 'v1', 'k2', 'v2']";
+    final String expected = "SELECT MAP ('k1', 'v1', 'k2', 'v2')\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>. */

Reply via email to