From e869184616e6ff5658a27110eb1eb493eba7cb8b Mon Sep 17 00:00:00 2001 From: Gengliang Wang Date: Wed, 13 Dec 2023 13:50:20 -0800 Subject: [PATCH 1/2] add try..catch in parseOptional --- .../spark/sql/catalyst/util/TimestampFormatter.scala | 12 ++++++++---- .../sql/catalyst/util/TimestampFormatterSuite.scala | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/TimestampFormatter.scala b/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/TimestampFormatter.scala index 9539ced52dc9..b8dac2df8687 100644 --- a/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/TimestampFormatter.scala +++ b/sql/api/src/main/scala/org/apache/spark/sql/catalyst/util/TimestampFormatter.scala @@ -415,10 +415,14 @@ class LegacyFastTimestampFormatter( override def parseOptional(s: String): Option[Long] = { cal.clear() // Clear the calendar because it can be re-used many times - if (fastDateFormat.parse(s, new ParsePosition(0), cal)) { - Some(extractMicros(cal)) - } else { - None + try { + if (fastDateFormat.parse(s, new ParsePosition(0), cal)) { + Some(extractMicros(cal)) + } else { + None + } + } catch { + case NonFatal(_) => None } } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/TimestampFormatterSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/TimestampFormatterSuite.scala index 977dde1875d7..abe0ae4a61ab 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/TimestampFormatterSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/TimestampFormatterSuite.scala @@ -486,10 +486,11 @@ class TimestampFormatterSuite extends DatetimeFormatterSuite { assert(fastFormatter.parseOptional("2023-12-31 23:59:59.9990").contains(1704067199999000L)) assert(fastFormatter.parseOptional("abc").isEmpty) + assert(fastFormatter.parseOptional("23012150952").isEmpty) assert(simpleFormatter.parseOptional("2023-12-31 23:59:59.9990").contains(1704067208990000L)) assert(simpleFormatter.parseOptional("abc").isEmpty) - + assert(simpleFormatter.parseOptional("23012150952").isEmpty) } test("SPARK-45424: do not return optional parse results when only prefix match") { From 56707883c0e119b186fcd8baa6e9b49b5782358d Mon Sep 17 00:00:00 2001 From: Gengliang Wang Date: Wed, 13 Dec 2023 14:40:49 -0800 Subject: [PATCH 2/2] retrigger tests