Skip to content

Commit 119f92b

Browse files
viiryayhuai
authored andcommitted
[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 apache#9834 from viirya/truncate-fractional-sec. (cherry picked from commit 60bfb11) Signed-off-by: Yin Huai <yhuai@databricks.com>
1 parent 3662b9f commit 119f92b

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@ object DateTimeUtils {
327327
return None
328328
}
329329

330+
// Instead of return None, we truncate the fractional seconds to prevent inserting NULL
331+
if (segments(6) > 999999) {
332+
segments(6) = segments(6).toString.take(6).toInt
333+
}
334+
330335
if (segments(3) < 0 || segments(3) > 23 || segments(4) < 0 || segments(4) > 59 ||
331336
segments(5) < 0 || segments(5) > 59 || segments(6) < 0 || segments(6) > 999999 ||
332337
segments(7) < 0 || segments(7) > 23 || segments(8) < 0 || segments(8) > 59) {

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,14 @@ class DateTimeUtilsSuite extends SparkFunSuite {
343343
UTF8String.fromString("2015-03-18T12:03.17-0:70")).isEmpty)
344344
assert(stringToTimestamp(
345345
UTF8String.fromString("2015-03-18T12:03.17-1:0:0")).isEmpty)
346+
347+
// Truncating the fractional seconds
348+
c = Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00"))
349+
c.set(2015, 2, 18, 12, 3, 17)
350+
c.set(Calendar.MILLISECOND, 0)
351+
assert(stringToTimestamp(
352+
UTF8String.fromString("2015-03-18T12:03:17.123456789+0:00")).get ===
353+
c.getTimeInMillis * 1000 + 123456)
346354
}
347355

348356
test("hours") {

0 commit comments

Comments
 (0)