aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiang-Chi Hsieh <viirya@appier.com>2015-11-20 11:43:45 -0800
committerYin Huai <yhuai@databricks.com>2015-11-20 11:43:45 -0800
commit60bfb113325c71491f8dcf98b6036b0caa2144fe (patch)
tree26154c1ecfd78ac525a331ea1dd0d8f7bbb87638
parentbef361c589c0a38740232fd8d0a45841e4fc969a (diff)
downloadspark-60bfb113325c71491f8dcf98b6036b0caa2144fe.tar.gz
spark-60bfb113325c71491f8dcf98b6036b0caa2144fe.tar.bz2
spark-60bfb113325c71491f8dcf98b6036b0caa2144fe.zip
[SPARK-11817][SQL] Truncating the fractional seconds to prevent inserting a NULL
JIRA: https://issues.apache.org/jira/browse/SPARK-11817 Instead of return None, we should truncate the fractional seconds to prevent inserting NULL. Author: Liang-Chi Hsieh <viirya@appier.com> Closes #9834 from viirya/truncate-fractional-sec.
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala5
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala8
2 files changed, 13 insertions, 0 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
index 17a5527f3f..2b93882919 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
@@ -327,6 +327,11 @@ object DateTimeUtils {
return None
}
+ // Instead of return None, we truncate the fractional seconds to prevent inserting NULL
+ if (segments(6) > 999999) {
+ segments(6) = segments(6).toString.take(6).toInt
+ }
+
if (segments(3) < 0 || segments(3) > 23 || segments(4) < 0 || segments(4) > 59 ||
segments(5) < 0 || segments(5) > 59 || segments(6) < 0 || segments(6) > 999999 ||
segments(7) < 0 || segments(7) > 23 || segments(8) < 0 || segments(8) > 59) {
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
index faca128bad..0ce5a2fb69 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
@@ -343,6 +343,14 @@ class DateTimeUtilsSuite extends SparkFunSuite {
UTF8String.fromString("2015-03-18T12:03.17-0:70")).isEmpty)
assert(stringToTimestamp(
UTF8String.fromString("2015-03-18T12:03.17-1:0:0")).isEmpty)
+
+ // Truncating the fractional seconds
+ c = Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00"))
+ c.set(2015, 2, 18, 12, 3, 17)
+ c.set(Calendar.MILLISECOND, 0)
+ assert(stringToTimestamp(
+ UTF8String.fromString("2015-03-18T12:03:17.123456789+0:00")).get ===
+ c.getTimeInMillis * 1000 + 123456)
}
test("hours") {