Skip to content

Commit 6be8396

Browse files
authored
SQL: Fix display size for DATE/DATETIME (#40669)
A full format for a DATETIME would be: `2019-03-30T10:20:30.123+10:00` which is 29 chars long. For DATE a full format would be: `2019-03-30T00:00:00.000+10:00` which is also 29 chars long.
1 parent 89d7b8a commit 6be8396

File tree

6 files changed

+20
-16
lines changed

6 files changed

+20
-16
lines changed

docs/reference/sql/functions/date-time.asciidoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ relative date/time filtering:
187187
include-tagged::{sql-specs}/docs/docs.csv-spec[filterNow]
188188
--------------------------------------------------
189189

190+
[IMPORTANT]
191+
Currently, Using a _precision_ greater than 3 doesn't make any difference to the output of the
192+
function as the maximum number of second fractional digits returned is 3 (milliseconds).
193+
190194
[[sql-functions-datetime-day]]
191195
==== `DAY_OF_MONTH/DOM/DAY`
192196

docs/reference/sql/language/data-types.asciidoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ s|SQL precision
2626
| <<keyword, `keyword`>> | keyword | VARCHAR | 32,766
2727
| <<text, `text`>> | text | VARCHAR | 2,147,483,647
2828
| <<binary, `binary`>> | binary | VARBINARY | 2,147,483,647
29-
| <<date, `date`>> | datetime | TIMESTAMP | 24
29+
| <<date, `date`>> | datetime | TIMESTAMP | 29
3030
| <<ip, `ip`>> | ip | VARCHAR | 39
3131

3232
4+h| Complex types
@@ -66,7 +66,7 @@ s|SQL type
6666
s|SQL precision
6767

6868

69-
| date | 24
69+
| date | 29
7070
| time | 18
7171
| interval_year | 7
7272
| interval_month | 7

x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/SqlProtocolTestCase.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,16 @@ public void testTextualType() throws IOException {
6767

6868
public void testDateTimes() throws IOException {
6969
assertQuery("SELECT CAST('2019-01-14T12:29:25.000Z' AS DATETIME)", "CAST('2019-01-14T12:29:25.000Z' AS DATETIME)",
70-
"datetime", "2019-01-14T12:29:25.000Z", 24);
70+
"datetime", "2019-01-14T12:29:25.000Z", 29);
7171
assertQuery("SELECT CAST(-26853765751000 AS DATETIME)", "CAST(-26853765751000 AS DATETIME)",
72-
"datetime", "1119-01-15T12:37:29.000Z", 24);
72+
"datetime", "1119-01-15T12:37:29.000Z", 29);
7373
assertQuery("SELECT CAST(CAST('-26853765751000' AS BIGINT) AS DATETIME)", "CAST(CAST('-26853765751000' AS BIGINT) AS DATETIME)",
74-
"datetime", "1119-01-15T12:37:29.000Z", 24);
74+
"datetime", "1119-01-15T12:37:29.000Z", 29);
7575

7676
assertQuery("SELECT CAST('2019-01-14' AS DATE)", "CAST('2019-01-14' AS DATE)",
77-
"date", "2019-01-14T00:00:00.000Z", 24);
77+
"date", "2019-01-14T00:00:00.000Z", 29);
7878
assertQuery("SELECT CAST(-26853765751000 AS DATE)", "CAST(-26853765751000 AS DATE)",
79-
"date", "1119-01-15T00:00:00.000Z", 24);
79+
"date", "1119-01-15T00:00:00.000Z", 29);
8080

8181
assertQuery("SELECT CAST('12:29:25.123Z' AS TIME)", "CAST('12:29:25.123Z' AS TIME)",
8282
"time", "12:29:25.123Z", 18);

x-pack/plugin/sql/qa/src/main/resources/setup_mock_metadata_get_columns.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ SELECT null, 'test1', 'name.keyword', 12, 'KEYWORD', 32766, 2147483647, null, nu
3333
null, null, 12, 0, 2147483647, 1, 'YES', null, null, null, null, 'NO', 'NO'
3434
FROM DUAL
3535
UNION ALL
36-
SELECT null, 'test2', 'date', 93, 'DATETIME', 24, 8, null, null,
36+
SELECT null, 'test2', 'date', 93, 'DATETIME', 29, 8, null, null,
3737
1, -- columnNullable
3838
null, null, 9, 3, null, 1, 'YES', null, null, null, null, 'NO', 'NO'
3939
FROM DUAL

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataType.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ public enum DataType {
4444
OBJECT( "object", JDBCType.STRUCT, -1, 0, 0, false, false, false),
4545
NESTED( "nested", JDBCType.STRUCT, -1, 0, 0, false, false, false),
4646
BINARY( "binary", JDBCType.VARBINARY, -1, Integer.MAX_VALUE, Integer.MAX_VALUE, false, false, false),
47-
DATE( JDBCType.DATE, Long.BYTES, 24, 24, false, false, true),
48-
TIME( JDBCType.TIME, Long.BYTES, 3, 18, false, false, true),
4947
// since ODBC and JDBC interpret precision for Date as display size
50-
// the precision is 23 (number of chars in ISO8601 with millis) + Z (the UTC timezone)
48+
// the precision is 23 (number of chars in ISO8601 with millis) + 6 chars for the timezone (e.g.: +05:00)
5149
// see https://github.com/elastic/elasticsearch/issues/30386#issuecomment-386807288
52-
DATETIME( "date", JDBCType.TIMESTAMP, Long.BYTES, 3, 24, false, false, true),
50+
DATE( JDBCType.DATE, Long.BYTES, 3, 29, false, false, true),
51+
TIME( JDBCType.TIME, Long.BYTES, 3, 18, false, false, true),
52+
DATETIME( "date", JDBCType.TIMESTAMP, Long.BYTES, 3, 29, false, false, true),
5353
//
5454
// specialized types
5555
//

x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysColumnsTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void testSysColumns() {
5050
assertEquals("date", name(row));
5151
assertEquals(Types.TIMESTAMP, sqlType(row));
5252
assertEquals(null, radix(row));
53-
assertEquals(24, precision(row));
53+
assertEquals(29, precision(row));
5454
assertEquals(8, bufferLength(row));
5555

5656
row = rows.get(5);
@@ -173,7 +173,7 @@ public void testSysColumnsInOdbcMode() {
173173
assertEquals("date", name(row));
174174
assertEquals((short) Types.TIMESTAMP, sqlType(row));
175175
assertEquals(null, radix(row));
176-
assertEquals(24, precision(row));
176+
assertEquals(29, precision(row));
177177
assertEquals(8, bufferLength(row));
178178
assertNull(decimalPrecision(row));
179179
assertEquals(Short.class, nullable(row).getClass());
@@ -308,7 +308,7 @@ public void testSysColumnsInJdbcMode() {
308308
assertEquals("date", name(row));
309309
assertEquals(Types.TIMESTAMP, sqlType(row));
310310
assertEquals(null, radix(row));
311-
assertEquals(24, precision(row));
311+
assertEquals(29, precision(row));
312312
assertEquals(8, bufferLength(row));
313313
assertNull(decimalPrecision(row));
314314
assertEquals(Integer.class, nullable(row).getClass());
@@ -431,4 +431,4 @@ private static Object sqlDataType(List<?> list) {
431431
private static Object sqlDataTypeSub(List<?> list) {
432432
return list.get(14);
433433
}
434-
}
434+
}

0 commit comments

Comments
 (0)