From c41909cc1bb5caabd43eec1af3bada2e536b4daf Mon Sep 17 00:00:00 2001 From: Josh Rosen Date: Mon, 6 May 2024 15:28:30 -0700 Subject: [PATCH] Fix nullability of TryParseJson --- .../catalyst/expressions/variant/variantExpressions.scala | 2 +- .../expressions/variant/VariantExpressionSuite.scala | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala index 43c561e10b6d2..8c0f72facc8c8 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala @@ -59,7 +59,7 @@ case class ParseJson(child: Expression, failOnError: Boolean = true) "parseJson", Seq(child, Literal(failOnError, BooleanType)), inputTypes :+ BooleanType, - returnNullable = false) + returnNullable = !failOnError) override def inputTypes: Seq[AbstractDataType] = StringType :: Nil diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala index d001f0ec051eb..23293042f568b 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala @@ -807,6 +807,13 @@ class VariantExpressionSuite extends SparkFunSuite with ExpressionEvalHelper { "Hello") } + test("tryParseJson negative") { + checkEvaluation( + ParseJson(Literal("["), failOnError = false).replacement, + null + ) + } + test("cast to variant") { def check[T : TypeTag](input: T, expectedJson: String): Unit = { val cast = Cast(Literal.create(input), VariantType, evalMode = EvalMode.ANSI)