This is an automated email from the ASF dual-hosted git repository. wenchen pushed a commit to branch branch-3.5 in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/branch-3.5 by this push: new 247948194a0 [SPARK-43063][SQL][FOLLOWUP] Add a space between -> and value when first value is null 247948194a0 is described below commit 247948194a08c6d090bfd26daf6b63a68374e6f2 Author: Andy Grove <andygrov...@gmail.com> AuthorDate: Tue Aug 15 10:12:55 2023 +0800 [SPARK-43063][SQL][FOLLOWUP] Add a space between -> and value when first value is null As noted by cloud-fan https://github.com/apache/spark/pull/41432#discussion_r1242593592, https://github.com/apache/spark/pull/41432 fixed a formatting issue when casting map to string but did not fix it in the codegen case. This PR fixes the issue and updates a unit test to test the codegen path. Without the fix, the test fails with: ``` - SPARK-22973 Cast map to string *** FAILED *** Incorrect evaluation (fallback mode = CODEGEN_ONLY): cast(map(keys: [1,2,3], values: [null,[B5c3fd9f3,[B70f84210]) as string), actual: {1 ->null, 2 -> a, 3 -> c}, expected: {1 -> null, 2 -> a, 3 -> c} (ExpressionEvalHelper.scala:270) ``` Closes #42434 from andygrove/space-before-null-cast-codegen. Authored-by: Andy Grove <andygrov...@gmail.com> Signed-off-by: Wenchen Fan <wenc...@databricks.com> (cherry picked from commit 7e52169433575a7df164368106fa3f6c73e4233e) Signed-off-by: Wenchen Fan <wenc...@databricks.com> --- .../org/apache/spark/sql/catalyst/expressions/ToStringBase.scala | 2 +- .../org/apache/spark/sql/catalyst/expressions/CastSuiteBase.scala | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala index f903863bec6..1eac386d873 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala @@ -352,7 +352,7 @@ trait ToStringBase { self: UnaryExpression with TimeZoneAwareExpression => | $buffer.append($keyToStringFunc($getMapFirstKey)); | $buffer.append(" ->"); | if ($map.valueArray().isNullAt(0)) { - | ${appendNull(buffer, isFirstElement = true)} + | ${appendNull(buffer, isFirstElement = false)} | } else { | $buffer.append(" "); | $buffer.append($valueToStringFunc($getMapFirstValue)); diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuiteBase.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuiteBase.scala index 34f87f940a7..0172fd9b3e4 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuiteBase.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuiteBase.scala @@ -826,9 +826,10 @@ abstract class CastSuiteBase extends SparkFunSuite with ExpressionEvalHelper { val ret1 = cast(Literal.create(Map(1 -> "a", 2 -> "b", 3 -> "c")), StringType) checkEvaluation(ret1, s"${lb}1 -> a, 2 -> b, 3 -> c$rb") val ret2 = cast( - Literal.create(Map("1" -> "a".getBytes, "2" -> null, "3" -> "c".getBytes)), + Literal.create(Map("1" -> null, "2" -> "a".getBytes, "3" -> null, "4" -> "c".getBytes)), StringType) - checkEvaluation(ret2, s"${lb}1 -> a, 2 ->${if (legacyCast) "" else " null"}, 3 -> c$rb") + val nullStr = if (legacyCast) "" else " null" + checkEvaluation(ret2, s"${lb}1 ->$nullStr, 2 -> a, 3 ->$nullStr, 4 -> c$rb") val ret3 = cast( Literal.create(Map( 1 -> Date.valueOf("2014-12-03"), --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org