From c746d4f2aef26907d1143e84c1309e24e00dcd06 Mon Sep 17 00:00:00 2001 From: Xingbo Jiang Date: Mon, 12 Aug 2019 17:48:55 -0700 Subject: [PATCH 1/2] update --- .../scala/org/apache/spark/sql/catalyst/expressions/Cast.scala | 1 + .../org/apache/spark/sql/catalyst/expressions/CastSuite.scala | 2 ++ 2 files changed, 3 insertions(+) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala index 10464dac8d55e..1f451be1b97d5 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala @@ -134,6 +134,7 @@ object Cast { case (DateType, TimestampType) => true case (_: AtomicType, StringType) => true case (_: CalendarIntervalType, StringType) => true + case (NullType, StringType) => true // Spark supports casting between long and timestamp, please see `longToTimestamp` and // `timestampToLong` for details. diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala index bbb3cb516b7d5..20bea15ea94d3 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala @@ -1008,6 +1008,8 @@ class CastSuite extends SparkFunSuite with ExpressionEvalHelper { assert(!Cast.canUpCast(complexType, StringType)) } } + + assert(Cast.canUpCast(NullType, StringType)) } test("SPARK-27671: cast from nested null type in struct") { From fceebdab55d6ec70cdaf024065b8756321fc00d9 Mon Sep 17 00:00:00 2001 From: Xingbo Jiang Date: Mon, 12 Aug 2019 22:30:10 -0700 Subject: [PATCH 2/2] update --- .../org/apache/spark/sql/catalyst/expressions/Cast.scala | 2 +- .../apache/spark/sql/catalyst/expressions/CastSuite.scala | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala index 1f451be1b97d5..a0cb5da078438 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala @@ -134,7 +134,7 @@ object Cast { case (DateType, TimestampType) => true case (_: AtomicType, StringType) => true case (_: CalendarIntervalType, StringType) => true - case (NullType, StringType) => true + case (NullType, _) => true // Spark supports casting between long and timestamp, please see `longToTimestamp` and // `timestampToLong` for details. diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala index 20bea15ea94d3..69adb8e922cc3 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CastSuite.scala @@ -974,7 +974,7 @@ class CastSuite extends SparkFunSuite with ExpressionEvalHelper { ) } - import DataTypeTestUtils.numericTypes + import DataTypeTestUtils._ numericTypes.foreach { from => val (safeTargetTypes, unsafeTargetTypes) = numericTypes.partition(to => isCastSafe(from, to)) @@ -1009,7 +1009,9 @@ class CastSuite extends SparkFunSuite with ExpressionEvalHelper { } } - assert(Cast.canUpCast(NullType, StringType)) + atomicTypes.foreach { atomicType => + assert(Cast.canUpCast(NullType, atomicType)) + } } test("SPARK-27671: cast from nested null type in struct") {