Skip to content

Commit

Permalink
MDEV-31334: Consider dates ending in 'T' as malformed
Browse files Browse the repository at this point in the history
According to ISO 8601 standard, 'T' should be followed by the time of
day. If a date ends with only 'T', throw an error in strict mode and a
warning in other modes.

All new code of the whole pull request, including one or several files
that are either new files or modified ones, are contributed under the
BSD-new license. I am contributing on behalf of my employer Amazon Web
Services, Inc.
  • Loading branch information
FarihaIS committed Jan 29, 2025
1 parent 5a8e623 commit a8ab18b
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
32 changes: 32 additions & 0 deletions mysql-test/main/func_extract.result
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,8 @@ EXTRACT(DAY FROM '01-02-03')
SELECT EXTRACT(DAY FROM '24:02:03T');
EXTRACT(DAY FROM '24:02:03T')
3
Warnings:
Warning 1292 Truncated incorrect date value: '24:02:03T'
SELECT EXTRACT(DAY FROM '24-02-03');
EXTRACT(DAY FROM '24-02-03')
3
Expand All @@ -380,33 +382,63 @@ EXTRACT(DAY FROM '11111')
SELECT TIME('2001-01-01T'), TIME('2001-01-01T ');
TIME('2001-01-01T') TIME('2001-01-01T ')
00:00:00 00:00:00
Warnings:
Warning 1292 Truncated incorrect date value: '2001-01-01T'
Warning 1292 Truncated incorrect date value: '2001-01-01T '
SELECT TIME('2001/01/01T'), TIME('2001/01/01T ');
TIME('2001/01/01T') TIME('2001/01/01T ')
00:00:00 00:00:00
Warnings:
Warning 1292 Truncated incorrect date value: '2001/01/01T'
Warning 1292 Truncated incorrect date value: '2001/01/01T '
SELECT TIME('2001:01:01T'), TIME('2001:01:01T ');
TIME('2001:01:01T') TIME('2001:01:01T ')
00:00:00 00:00:00
Warnings:
Warning 1292 Truncated incorrect date value: '2001:01:01T'
Warning 1292 Truncated incorrect date value: '2001:01:01T '
SELECT EXTRACT(DAY FROM '2001-01-01T'), EXTRACT(DAY FROM '2001-01-01T ');
EXTRACT(DAY FROM '2001-01-01T') EXTRACT(DAY FROM '2001-01-01T ')
1 1
Warnings:
Warning 1292 Truncated incorrect date value: '2001-01-01T'
Warning 1292 Truncated incorrect date value: '2001-01-01T '
SELECT EXTRACT(DAY FROM '2001/01/01T'), EXTRACT(DAY FROM '2001/01/01T ');
EXTRACT(DAY FROM '2001/01/01T') EXTRACT(DAY FROM '2001/01/01T ')
1 1
Warnings:
Warning 1292 Truncated incorrect date value: '2001/01/01T'
Warning 1292 Truncated incorrect date value: '2001/01/01T '
SELECT EXTRACT(DAY FROM '2001:01:01T'), EXTRACT(DAY FROM '2001:01:01T ');
EXTRACT(DAY FROM '2001:01:01T') EXTRACT(DAY FROM '2001:01:01T ')
1 1
Warnings:
Warning 1292 Truncated incorrect date value: '2001:01:01T'
Warning 1292 Truncated incorrect date value: '2001:01:01T '
SELECT TIME('2001:01:01T'), TIME('2001:01:01T ');
TIME('2001:01:01T') TIME('2001:01:01T ')
00:00:00 00:00:00
Warnings:
Warning 1292 Truncated incorrect date value: '2001:01:01T'
Warning 1292 Truncated incorrect date value: '2001:01:01T '
SELECT EXTRACT(HOUR FROM '2001-01-01T'), EXTRACT(HOUR FROM '2001-01-01T ');
EXTRACT(HOUR FROM '2001-01-01T') EXTRACT(HOUR FROM '2001-01-01T ')
0 0
Warnings:
Warning 1292 Truncated incorrect date value: '2001-01-01T'
Warning 1292 Truncated incorrect date value: '2001-01-01T '
SELECT EXTRACT(HOUR FROM '2001/01/01T'), EXTRACT(HOUR FROM '2001/01/01T ');
EXTRACT(HOUR FROM '2001/01/01T') EXTRACT(HOUR FROM '2001/01/01T ')
0 0
Warnings:
Warning 1292 Truncated incorrect date value: '2001/01/01T'
Warning 1292 Truncated incorrect date value: '2001/01/01T '
SELECT EXTRACT(HOUR FROM '2001:01:01T'), EXTRACT(HOUR FROM '2001:01:01T ');
EXTRACT(HOUR FROM '2001:01:01T') EXTRACT(HOUR FROM '2001:01:01T ')
0 0
Warnings:
Warning 1292 Truncated incorrect date value: '2001:01:01T'
Warning 1292 Truncated incorrect date value: '2001:01:01T '
# This still parses as DATE and returns NULL (without trying TIME)
SELECT EXTRACT(DAY FROM '100000:02:03T');
EXTRACT(DAY FROM '100000:02:03T')
Expand Down
3 changes: 3 additions & 0 deletions mysql-test/main/func_time.result
Original file line number Diff line number Diff line change
Expand Up @@ -6253,6 +6253,9 @@ Warning 1292 Truncated incorrect time value: '1 2 '
SELECT TIME('2001-01-01T'), TIME('2001-01-01T ');
TIME('2001-01-01T') TIME('2001-01-01T ')
00:00:00 00:00:00
Warnings:
Warning 1292 Truncated incorrect date value: '2001-01-01T'
Warning 1292 Truncated incorrect date value: '2001-01-01T '
SELECT TIME('901-01-01T1'), TIME('901-01-01T10');
TIME('901-01-01T1') TIME('901-01-01T10')
01:00:00 10:00:00
Expand Down
2 changes: 2 additions & 0 deletions sql-common/my_time.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ static int get_date_time_separator(uint *number_of_fields,
if (*s == 'T')
{
(*str)++;
if (s + 1 >= end)
return 1;
return 0;
}

Expand Down

0 comments on commit a8ab18b

Please sign in to comment.