From e3de11f3b3363c656a58fc79fb31836a9cb1c081 Mon Sep 17 00:00:00 2001 From: kasiafi <30203062+kasiafi@users.noreply.github.com> Date: Thu, 20 Jan 2022 11:35:51 +0100 Subject: [PATCH] Add comments showing deviation from the standard --- .../trino-main/src/main/java/io/trino/util/DateTimeUtils.java | 4 ++++ .../src/test/java/io/trino/sql/TestExpressionInterpreter.java | 1 + .../src/test/java/io/trino/type/TestDateTimeOperators.java | 1 + 3 files changed, 6 insertions(+) diff --git a/core/trino-main/src/main/java/io/trino/util/DateTimeUtils.java b/core/trino-main/src/main/java/io/trino/util/DateTimeUtils.java index a8643633230f..bb7e57c75303 100644 --- a/core/trino-main/src/main/java/io/trino/util/DateTimeUtils.java +++ b/core/trino-main/src/main/java/io/trino/util/DateTimeUtils.java @@ -61,6 +61,10 @@ private DateTimeUtils() {} public static int parseDate(String value) { + // in order to follow the standard, we should validate the value: + // - the required format is 'YYYY-MM-DD' + // - all components should be unsigned numbers + // https://github.com/trinodb/trino/issues/10677 return toIntExact(TimeUnit.MILLISECONDS.toDays(DATE_FORMATTER.parseMillis(value))); } diff --git a/core/trino-main/src/test/java/io/trino/sql/TestExpressionInterpreter.java b/core/trino-main/src/test/java/io/trino/sql/TestExpressionInterpreter.java index 990cc7df39c6..f2ec1e416956 100644 --- a/core/trino-main/src/test/java/io/trino/sql/TestExpressionInterpreter.java +++ b/core/trino-main/src/test/java/io/trino/sql/TestExpressionInterpreter.java @@ -837,6 +837,7 @@ public void testCastRealToBoundedVarchar() public void testCastDateToBoundedVarchar() { assertEvaluatedEquals("CAST(DATE '2013-02-02' AS varchar(10))", "'2013-02-02'"); + // according to the SQL standard, this literal is incorrect. Year should be unsigned. https://github.com/trinodb/trino/issues/10677 assertEvaluatedEquals("CAST(DATE '-2013-02-02' AS varchar(50))", "'-2013-02-02'"); // the result value does not fit in the type diff --git a/core/trino-main/src/test/java/io/trino/type/TestDateTimeOperators.java b/core/trino-main/src/test/java/io/trino/type/TestDateTimeOperators.java index aa54cba89ada..2d8c3a8d7cdb 100644 --- a/core/trino-main/src/test/java/io/trino/type/TestDateTimeOperators.java +++ b/core/trino-main/src/test/java/io/trino/type/TestDateTimeOperators.java @@ -269,6 +269,7 @@ public void testDateCastFromVarchar() public void testDateCastToVarchar() { assertFunction("cast(DATE '2013-02-02' AS varchar)", VARCHAR, "2013-02-02"); + // according to the SQL standard, this literal is incorrect. The required format is 'YYYY-MM-DD'. https://github.com/trinodb/trino/issues/10677 assertFunction("cast(DATE '13-2-2' AS varchar)", VARCHAR, "0013-02-02"); assertFunction("cast(DATE '2013-02-02' AS varchar(50))", createVarcharType(50), "2013-02-02"); assertFunction("cast(DATE '2013-02-02' AS varchar(10))", createVarcharType(10), "2013-02-02");