mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-4858 Wrong results for a huge unsigned value inserted into a TIME column
MDEV-6099 Bad results for DATE_ADD(.., INTERVAL 2000000000000000000.0 SECOND) MDEV-6097 Inconsistent results for CAST(int,decimal,double AS DATETIME) MDEV-6100 No warning on CAST(9000000 AS TIME)
This commit is contained in:
@ -77,7 +77,7 @@ cast(cast(20010203101112.121314 as double) as datetime)
|
||||
2001-02-03 10:11:12
|
||||
select cast(cast(010203101112.12 as double) as datetime);
|
||||
cast(cast(010203101112.12 as double) as datetime)
|
||||
0001-02-03 10:11:12
|
||||
2001-02-03 10:11:12
|
||||
select cast(cast(20010203101112.121314 as decimal(32,6)) as datetime);
|
||||
cast(cast(20010203101112.121314 as decimal(32,6)) as datetime)
|
||||
2001-02-03 10:11:12
|
||||
@ -86,10 +86,10 @@ cast(20010203101112.121314 as datetime)
|
||||
2001-02-03 10:11:12
|
||||
select cast(110203101112.121314 as datetime);
|
||||
cast(110203101112.121314 as datetime)
|
||||
0011-02-03 10:11:12
|
||||
2011-02-03 10:11:12
|
||||
select cast(cast(010203101112.12 as double) as datetime);
|
||||
cast(cast(010203101112.12 as double) as datetime)
|
||||
0001-02-03 10:11:12
|
||||
2001-02-03 10:11:12
|
||||
select cast("2011-02-03 10:11:12.123456" as datetime);
|
||||
cast("2011-02-03 10:11:12.123456" as datetime)
|
||||
2011-02-03 10:11:12
|
||||
@ -110,7 +110,7 @@ cast(cast(20010203101112.5 as double) as datetime(1))
|
||||
2001-02-03 10:11:12.5
|
||||
select cast(cast(010203101112.12 as double) as datetime(2));
|
||||
cast(cast(010203101112.12 as double) as datetime(2))
|
||||
0001-02-03 10:11:12.12
|
||||
2001-02-03 10:11:12.12
|
||||
select cast(cast(20010203101112.121314 as decimal(32,6)) as datetime(6));
|
||||
cast(cast(20010203101112.121314 as decimal(32,6)) as datetime(6))
|
||||
2001-02-03 10:11:12.121314
|
||||
@ -119,10 +119,10 @@ cast(20010203101112.121314 as datetime(6))
|
||||
2001-02-03 10:11:12.121314
|
||||
select cast(110203101112.121314 as datetime(6));
|
||||
cast(110203101112.121314 as datetime(6))
|
||||
0011-02-03 10:11:12.121314
|
||||
2011-02-03 10:11:12.121314
|
||||
select cast(cast(010203101112.12 as double) as datetime(6));
|
||||
cast(cast(010203101112.12 as double) as datetime(6))
|
||||
0001-02-03 10:11:12.120000
|
||||
2001-02-03 10:11:12.120000
|
||||
select cast("2011-02-03 10:11:12.123456" as time);
|
||||
cast("2011-02-03 10:11:12.123456" as time)
|
||||
10:11:12
|
||||
@ -265,7 +265,7 @@ Warnings:
|
||||
Warning 1264 Out of range value for column 'cast(-1000 as double(5,2))' at row 1
|
||||
select cast(010203101112.121314 as datetime);
|
||||
cast(010203101112.121314 as datetime)
|
||||
0001-02-03 10:11:12
|
||||
2001-02-03 10:11:12
|
||||
select cast(120010203101112.121314 as datetime);
|
||||
cast(120010203101112.121314 as datetime)
|
||||
NULL
|
||||
@ -326,7 +326,7 @@ cast(cast(120010203101112.121314 as double) as datetime)
|
||||
NULL
|
||||
select cast(cast(1.1 as double) as datetime);
|
||||
cast(cast(1.1 as double) as datetime)
|
||||
0000-00-00 00:00:01
|
||||
NULL
|
||||
select cast(cast(-1.1 as double) as datetime);
|
||||
cast(cast(-1.1 as double) as datetime)
|
||||
NULL
|
||||
|
@ -1001,29 +1001,29 @@ Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '1223.5aa'
|
||||
select column_get(column_create(1, 18446744073709551615 AS unsigned int), 1 as time);
|
||||
column_get(column_create(1, 18446744073709551615 AS unsigned int), 1 as time)
|
||||
NULL
|
||||
838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '1.84467440737096e+19'
|
||||
Warning 1292 Truncated incorrect time value: '1.84467440737096e+19'
|
||||
select column_get(column_create(1, 9223372036854775807 AS int), 1 as time);
|
||||
column_get(column_create(1, 9223372036854775807 AS int), 1 as time)
|
||||
NULL
|
||||
838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '9223372036854775807'
|
||||
Warning 1292 Truncated incorrect time value: '9223372036854775807'
|
||||
select column_get(column_create(1, -9223372036854775808 AS int), 1 as time);
|
||||
column_get(column_create(1, -9223372036854775808 AS int), 1 as time)
|
||||
NULL
|
||||
-838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '-9223372036854775808'
|
||||
Warning 1292 Truncated incorrect time value: '-9223372036854775808'
|
||||
select column_get(column_create(1, 99999999999999999999999999999 AS decimal(32,10)), 1 as time);
|
||||
column_get(column_create(1, 99999999999999999999999999999 AS decimal(32,10)), 1 as time)
|
||||
NULL
|
||||
838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '99999999999999999999999999999'
|
||||
Warning 1292 Truncated incorrect time value: '99999999999999999999999999999'
|
||||
select column_get(column_create(1, 99999999999999999999999999999 AS double), 1 as time);
|
||||
column_get(column_create(1, 99999999999999999999999999999 AS double), 1 as time)
|
||||
NULL
|
||||
838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '1e+29'
|
||||
Warning 1292 Truncated incorrect time value: '1e+29'
|
||||
select column_get(column_create(1, "2011-02-32 8:46:06.23434" AS CHAR), 1 as time);
|
||||
column_get(column_create(1, "2011-02-32 8:46:06.23434" AS CHAR), 1 as time)
|
||||
NULL
|
||||
@ -1425,5 +1425,16 @@ Warning 1265 Data truncated for column 'dyncol' at row 1
|
||||
SELECT COLUMN_ADD( dyncol, 7, '22:22:22', 8, REPEAT('x',270) AS CHAR ) FROM t1;
|
||||
DROP table t1;
|
||||
#
|
||||
# MDEV-4858 Wrong results for a huge unsigned value inserted into a TIME column
|
||||
#
|
||||
SELECT
|
||||
column_get(column_create(1, -999999999999999 AS int), 1 AS TIME) AS t1,
|
||||
column_get(column_create(1, -9223372036854775808 AS int), 1 AS TIME) AS t2;
|
||||
t1 t2
|
||||
-838:59:59 -838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '-999999999999999'
|
||||
Warning 1292 Truncated incorrect time value: '-9223372036854775808'
|
||||
#
|
||||
# end of 5.3 tests
|
||||
#
|
||||
|
@ -1101,9 +1101,9 @@ NULL
|
||||
select isnull(week(now() + 0)), isnull(week(now() + 0.2)),
|
||||
week(20061108), week(20061108.01), week(20061108085411.000002);
|
||||
isnull(week(now() + 0)) isnull(week(now() + 0.2)) week(20061108) week(20061108.01) week(20061108085411.000002)
|
||||
0 0 45 NULL 45
|
||||
0 0 45 45 45
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '20061108.01'
|
||||
Warning 1292 Truncated incorrect datetime value: '20061108.01'
|
||||
End of 4.1 tests
|
||||
explain extended select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a1,
|
||||
timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a2;
|
||||
@ -2381,3 +2381,11 @@ SELECT 1 FROM t1 GROUP BY MONTHNAME(0) WITH ROLLUP;
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-6099 Bad results for DATE_ADD(.., INTERVAL 2000000000000000000.0 SECOND)
|
||||
#
|
||||
SELECT DATE_ADD('2001-01-01 10:20:30',INTERVAL 250000000000.0 SECOND) AS c1, DATE_ADD('2001-01-01 10:20:30',INTERVAL 2000000000000000000.0 SECOND) AS c2;
|
||||
c1 c2
|
||||
9923-03-10 22:47:10.0 NULL
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DECIMAL value: '2000000000000000000.0'
|
||||
|
@ -724,4 +724,13 @@ call test5041();
|
||||
dt
|
||||
0000-01-02 08:20:30
|
||||
drop procedure test5041;
|
||||
#
|
||||
# MDEV-6097 Inconsistent results for CAST(int,decimal,double AS DATETIME)
|
||||
#
|
||||
SELECT
|
||||
CAST(010203101112 AS DATETIME(1)) AS c1,
|
||||
CAST(010203101112.2 AS DATETIME(1)) AS c2,
|
||||
CAST(010203101112.2+0e0 AS DATETIME(1)) AS c3;
|
||||
c1 c2 c3
|
||||
2001-02-03 10:11:12.0 2001-02-03 10:11:12.2 2001-02-03 10:11:12.1
|
||||
End of 5.3 tests
|
||||
|
@ -298,5 +298,33 @@ Field Type Null Key Default Extra
|
||||
MAX(t1)+1 decimal(22,1) YES NULL
|
||||
DROP TABLE t2,t1;
|
||||
#
|
||||
# MDEV-4858 Wrong results for a huge unsigned value inserted into a TIME column
|
||||
#
|
||||
SET sql_mode=traditional;
|
||||
CREATE TABLE t1 (a TIME(6));
|
||||
INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED));
|
||||
ERROR 22007: Incorrect time value: '18446744069414584320' for column 'a' at row 1
|
||||
SET sql_mode=DEFAULT;
|
||||
INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED));
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
838:59:59.999999
|
||||
DROP TABLE t1;
|
||||
SELECT TIME'00:00:00'> CAST(0xFFFFFFFF00000000 AS UNSIGNED);
|
||||
TIME'00:00:00'> CAST(0xFFFFFFFF00000000 AS UNSIGNED)
|
||||
0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: '00:00:00'
|
||||
#
|
||||
# MDEV-6100 No warning on CAST(9000000 AS TIME)
|
||||
#
|
||||
SELECT CAST(9000000 AS TIME);
|
||||
CAST(9000000 AS TIME)
|
||||
838:59:59
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '9000000'
|
||||
#
|
||||
# End of 5.3 tests
|
||||
#
|
||||
|
@ -16,46 +16,46 @@ Warnings:
|
||||
Warning 1265 Data truncated for column 'a' at row 1
|
||||
insert t1 values (99991231235959e1);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'a' at row 1
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
select * from t1;
|
||||
a
|
||||
00:00:00.000
|
||||
00:20:03.123
|
||||
01:02:03.456
|
||||
03:04:05.789
|
||||
15:47:11.123
|
||||
838:59:59.999
|
||||
select truncate(a, 6) from t1;
|
||||
truncate(a, 6)
|
||||
0.000000
|
||||
2003.123000
|
||||
10203.456000
|
||||
30405.789062
|
||||
154711.123000
|
||||
8385959.999000
|
||||
select a DIV 1 from t1;
|
||||
a DIV 1
|
||||
0
|
||||
2003
|
||||
10203
|
||||
30405
|
||||
154711
|
||||
8385959
|
||||
select group_concat(distinct a) from t1;
|
||||
group_concat(distinct a)
|
||||
00:00:00.000,00:20:03.123,01:02:03.456,03:04:05.789,15:47:11.123
|
||||
00:20:03.123,01:02:03.456,03:04:05.789,15:47:11.123,838:59:59.999
|
||||
alter table t1 engine=innodb;
|
||||
select * from t1 order by a;
|
||||
a
|
||||
00:00:00.000
|
||||
00:20:03.123
|
||||
01:02:03.456
|
||||
03:04:05.789
|
||||
15:47:11.123
|
||||
838:59:59.999
|
||||
select * from t1 order by a+0;
|
||||
a
|
||||
00:00:00.000
|
||||
00:20:03.123
|
||||
01:02:03.456
|
||||
03:04:05.789
|
||||
15:47:11.123
|
||||
838:59:59.999
|
||||
drop table t1;
|
||||
create table t1 (a time(4)) engine=innodb;
|
||||
insert t1 values ('2010-12-11 01:02:03.456789');
|
||||
|
@ -622,6 +622,13 @@ INSERT INTO t1 SET dyncol = COLUMN_CREATE( 7, REPEAT('k',487), 209, REPEAT('x',4
|
||||
SELECT COLUMN_ADD( dyncol, 7, '22:22:22', 8, REPEAT('x',270) AS CHAR ) FROM t1;
|
||||
DROP table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-4858 Wrong results for a huge unsigned value inserted into a TIME column
|
||||
--echo #
|
||||
SELECT
|
||||
column_get(column_create(1, -999999999999999 AS int), 1 AS TIME) AS t1,
|
||||
column_get(column_create(1, -9223372036854775808 AS int), 1 AS TIME) AS t2;
|
||||
|
||||
--echo #
|
||||
--echo # end of 5.3 tests
|
||||
--echo #
|
||||
|
@ -1437,3 +1437,8 @@ CREATE TABLE t1 (i INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SELECT 1 FROM t1 GROUP BY MONTHNAME(0) WITH ROLLUP;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6099 Bad results for DATE_ADD(.., INTERVAL 2000000000000000000.0 SECOND)
|
||||
--echo #
|
||||
SELECT DATE_ADD('2001-01-01 10:20:30',INTERVAL 250000000000.0 SECOND) AS c1, DATE_ADD('2001-01-01 10:20:30',INTERVAL 2000000000000000000.0 SECOND) AS c2;
|
||||
|
@ -519,6 +519,14 @@ DELIMITER ;|
|
||||
call test5041();
|
||||
drop procedure test5041;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6097 Inconsistent results for CAST(int,decimal,double AS DATETIME)
|
||||
--echo #
|
||||
SELECT
|
||||
CAST(010203101112 AS DATETIME(1)) AS c1,
|
||||
CAST(010203101112.2 AS DATETIME(1)) AS c2,
|
||||
CAST(010203101112.2+0e0 AS DATETIME(1)) AS c3;
|
||||
|
||||
|
||||
--echo End of 5.3 tests
|
||||
|
||||
|
@ -201,6 +201,23 @@ SELECT * FROM t2;
|
||||
SHOW COLUMNS FROM t2;
|
||||
DROP TABLE t2,t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-4858 Wrong results for a huge unsigned value inserted into a TIME column
|
||||
--echo #
|
||||
SET sql_mode=traditional;
|
||||
CREATE TABLE t1 (a TIME(6));
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED));
|
||||
SET sql_mode=DEFAULT;
|
||||
INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED));
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
SELECT TIME'00:00:00'> CAST(0xFFFFFFFF00000000 AS UNSIGNED);
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6100 No warning on CAST(9000000 AS TIME)
|
||||
--echo #
|
||||
SELECT CAST(9000000 AS TIME);
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.3 tests
|
||||
|
Reference in New Issue
Block a user