diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala index 5a30bbdf846a2..6ccd5a451eafc 100755 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala @@ -2714,7 +2714,8 @@ case class Base64(child: Expression, chunkBase64: Boolean) dataType, "encode", Seq(child, Literal(chunkBase64, BooleanType)), - Seq(BinaryType, BooleanType)) + Seq(BinaryType, BooleanType), + returnNullable = false) override def toString: String = s"$prettyName($child)" diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala index 7210979f08462..b39820f0d317d 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/StringExpressionsSuite.scala @@ -467,6 +467,13 @@ class StringExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { val b = $"b".binary.at(0) val bytes = Array[Byte](1, 2, 3, 4) + assert(!Base64(Literal(bytes)).nullable) + assert(Base64(Literal.create(null, BinaryType)).nullable) + assert(Base64(Literal(bytes).castNullable()).nullable) + assert(!UnBase64(Literal("AQIDBA==")).nullable) + assert(UnBase64(Literal.create(null, StringType)).nullable) + assert(UnBase64(Literal("AQIDBA==").castNullable()).nullable) + checkEvaluation(Base64(Literal(bytes)), "AQIDBA==", create_row("abdef")) checkEvaluation(Base64(UnBase64(Literal("AQIDBA=="))), "AQIDBA==", create_row("abdef")) checkEvaluation(Base64(UnBase64(Literal(""))), "", create_row("abdef"))