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>. */