diff --git a/docs/changelog/137744.yaml b/docs/changelog/137744.yaml new file mode 100644 index 0000000000000..07785a1247004 --- /dev/null +++ b/docs/changelog/137744.yaml @@ -0,0 +1,6 @@ +pr: 137744 +summary: Catch `DateTimeException` in `EsqlDataTypeConverter` +area: ES|QL +type: bug +issues: + - 137741 diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/type/EsqlDataTypeConverter.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/type/EsqlDataTypeConverter.java index a10094dd93997..87cfe68921c14 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/type/EsqlDataTypeConverter.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/type/EsqlDataTypeConverter.java @@ -73,6 +73,7 @@ import java.io.IOException; import java.math.BigInteger; +import java.time.DateTimeException; import java.time.Duration; import java.time.Instant; import java.time.Period; @@ -616,20 +617,36 @@ public static BytesRef stringToSpatial(String field) { } public static long dateTimeToLong(String dateTime) { - return DEFAULT_DATE_TIME_FORMATTER.parseMillis(dateTime); + try { + return DEFAULT_DATE_TIME_FORMATTER.parseMillis(dateTime); + } catch (DateTimeException e) { + throw new IllegalArgumentException(e); + } } public static long dateTimeToLong(String dateTime, DateFormatter formatter) { - return formatter == null ? dateTimeToLong(dateTime) : formatter.parseMillis(dateTime); + try { + return formatter == null ? dateTimeToLong(dateTime) : formatter.parseMillis(dateTime); + } catch (DateTimeException e) { + throw new IllegalArgumentException(e); + } } public static long dateNanosToLong(String dateNano) { - return dateNanosToLong(dateNano, DEFAULT_DATE_NANOS_FORMATTER); + try { + return dateNanosToLong(dateNano, DEFAULT_DATE_NANOS_FORMATTER); + } catch (DateTimeException e) { + throw new IllegalArgumentException(e); + } } public static long dateNanosToLong(String dateNano, DateFormatter formatter) { - Instant parsed = DateFormatters.from(formatter.parse(dateNano)).toInstant(); - return DateUtils.toLong(parsed); + try { + Instant parsed = DateFormatters.from(formatter.parse(dateNano)).toInstant(); + return DateUtils.toLong(parsed); + } catch (DateTimeException e) { + throw new IllegalArgumentException(e); + } } public static String dateWithTypeToString(long dateTime, DataType type) {