From c7cfdcbff49a6017b4f7dcde88eb55c87b05cb6b Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 7 May 2018 11:18:39 +0300 Subject: [PATCH 1/2] SQL: Fix parsing of dates with milliseconds Dates internally contain milliseconds (which appear when converting them to Strings) however parsing does not accept them (and is being strict). The parser has been changed so that Date is mandatory but the time (including its fractions such as millis) are optional. Fix #30002 --- docs/CHANGELOG.asciidoc | 9 +++++++++ .../elasticsearch/xpack/sql/type/DataTypeConversion.java | 2 +- .../xpack/sql/type/DataTypeConversionTests.java | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index 03811ae85c76c..b1049442e7460 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -111,6 +111,9 @@ Rollup:: * Validate timezone in range queries to ensure they match the selected job when searching ({pull}30338[#30338]) +SQL:: +* Fix parsing of Dates containing milliseconds + [float] === Regressions Fail snapshot operations early when creating or deleting a snapshot on a repository that has been @@ -180,6 +183,9 @@ Rollup:: * Validate timezone in range queries to ensure they match the selected job when searching ({pull}30338[#30338]) +SQL:: +* Fix parsing of Dates containing milliseconds + //[float] //=== Regressions @@ -214,6 +220,9 @@ Reduce the number of object allocations made by {security} when resolving the in Respect accept header on requests with no handler ({pull}30383[#30383]) +SQL:: +* Fix parsing of Dates containing milliseconds + //[float] //=== Regressions diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataTypeConversion.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataTypeConversion.java index c0f4947bb88b3..c0bc9b6e52908 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataTypeConversion.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataTypeConversion.java @@ -31,7 +31,7 @@ */ public abstract class DataTypeConversion { - private static final DateTimeFormatter UTC_DATE_FORMATTER = ISODateTimeFormat.dateTimeNoMillis().withZoneUTC(); + private static final DateTimeFormatter UTC_DATE_FORMATTER = ISODateTimeFormat.dateOptionalTimeParser().withZoneUTC(); /** * Returns the type compatible with both left and right types diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/type/DataTypeConversionTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/type/DataTypeConversionTests.java index a6a322b31838f..8f5477f1951e9 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/type/DataTypeConversionTests.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/type/DataTypeConversionTests.java @@ -82,10 +82,15 @@ public void testConversionToDate() { Conversion conversion = DataTypeConversion.conversionFor(DataType.KEYWORD, to); assertNull(conversion.convert(null)); - // TODO we'd like to be able to optionally parse millis here I think.... assertEquals(new DateTime(1000L, DateTimeZone.UTC), conversion.convert("1970-01-01T00:00:01Z")); assertEquals(new DateTime(1483228800000L, DateTimeZone.UTC), conversion.convert("2017-01-01T00:00:00Z")); assertEquals(new DateTime(18000000L, DateTimeZone.UTC), conversion.convert("1970-01-01T00:00:00-05:00")); + + // double check back and forth conversion + DateTime dt = DateTime.now(DateTimeZone.UTC); + Conversion forward = DataTypeConversion.conversionFor(DataType.DATE, DataType.KEYWORD); + Conversion back = DataTypeConversion.conversionFor(DataType.KEYWORD, DataType.DATE); + assertEquals(dt, back.convert(forward.convert(dt))); Exception e = expectThrows(SqlIllegalArgumentException.class, () -> conversion.convert("0xff")); assertEquals("cannot cast [0xff] to [Date]:Invalid format: \"0xff\" is malformed at \"xff\"", e.getMessage()); } From b187a1c38afe473159a7318b3513d7d1c2cab77d Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Thu, 10 May 2018 06:57:47 +0300 Subject: [PATCH 2/2] Try to fix changelog conflict --- docs/CHANGELOG.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index 6a3146a681bd2..f606ae76aa075 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -116,7 +116,7 @@ Rollup:: searching ({pull}30338[#30338]) SQL:: -* Fix parsing of Dates containing milliseconds +* Fix parsing of Dates containing milliseconds ({pull}30419[#30419]) [float] === Regressions @@ -205,7 +205,7 @@ Rollup:: searching ({pull}30338[#30338]) SQL:: -* Fix parsing of Dates containing milliseconds +* Fix parsing of Dates containing milliseconds ({pull}30419[#30419]) Allocation:: @@ -247,7 +247,7 @@ Reduce the number of object allocations made by {security} when resolving the in Respect accept header on requests with no handler ({pull}30383[#30383]) SQL:: -* Fix parsing of Dates containing milliseconds +* Fix parsing of Dates containing milliseconds ({pull}30419[#30419]) //[float] //=== Regressions