mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
CAST(string_argument AS UNSIGNED) didn't work for big integers above the signed range. (Bug #7036)
Produce warnings of wrong cast of strings to signed/unsigned. Don't block not resolved IP's if DNS server is down (Bug #8467) Fix compiler problems with MinGW (Bug #8872) configure.in: Fix compiler problems with MinGW (Bug #8872) include/config-win.h: Fix compiler problems with MinGW (Bug #8872) include/my_global.h: Fix compiler problems with MinGW (Bug #8872) mysql-test/r/cast.result: Test for cast to signed/unsigned outside of range (Bug #7036) mysql-test/t/cast.test: Test for cast to signed/unsigned outside of range (Bug #7036) mysys/default.c: Cleanup (combine identical code). Done mainly by Jani sql/field.h: Added cast_to_int_type() to ensure that enums are casted as numbers sql/hostname.cc: Don't block not resolved IP's if DNS server is down (Bug #8467) sql/item.h: Added cast_to_int_type() to ensure that enums are casted as numbers sql/item_func.cc: CAST(string_argument AS UNSIGNED) didn't work for big integers above the signed range. (Bug #7036) Produce warnings of wrong cast of strings to signed/unsigned sql/item_func.h: CAST(string_argument AS UNSIGNED) didn't work for big integers above the signed range. (Bug #7036)
This commit is contained in:
parent
2a69f0049b
commit
97b0821462
11 changed files with 263 additions and 59 deletions
|
|
@ -4,9 +4,6 @@ CAST(1-2 AS UNSIGNED)
|
|||
select CAST(CAST(1-2 AS UNSIGNED) AS SIGNED INTEGER);
|
||||
CAST(CAST(1-2 AS UNSIGNED) AS SIGNED INTEGER)
|
||||
-1
|
||||
select CONVERT('-1',UNSIGNED);
|
||||
CONVERT('-1',UNSIGNED)
|
||||
18446744073709551615
|
||||
select cast(-5 as unsigned) | 1, cast(-5 as unsigned) & -1;
|
||||
cast(-5 as unsigned) | 1 cast(-5 as unsigned) & -1
|
||||
18446744073709551611 18446744073709551611
|
||||
|
|
@ -57,6 +54,41 @@ CONVERT(DATE "2004-01-22 21:45:33",BINARY(4))
|
|||
select CAST(DATE "2004-01-22 21:45:33" AS BINARY(4));
|
||||
CAST(DATE "2004-01-22 21:45:33" AS BINARY(4))
|
||||
2004
|
||||
select cast('18446744073709551616' as unsigned);
|
||||
cast('18446744073709551616' as unsigned)
|
||||
18446744073709551615
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: '18446744073709551616'
|
||||
select cast('18446744073709551616' as signed);
|
||||
cast('18446744073709551616' as signed)
|
||||
-1
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: '18446744073709551616'
|
||||
select cast('9223372036854775809' as signed);
|
||||
cast('9223372036854775809' as signed)
|
||||
-9223372036854775807
|
||||
Warnings:
|
||||
Warning 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
||||
select cast('-1' as unsigned);
|
||||
cast('-1' as unsigned)
|
||||
18446744073709551615
|
||||
Warnings:
|
||||
Warning 1105 Cast to unsigned converted negative integer to it's positive complement
|
||||
select cast('abc' as signed);
|
||||
cast('abc' as signed)
|
||||
0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'abc'
|
||||
select cast('1a' as signed);
|
||||
cast('1a' as signed)
|
||||
1
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: '1a'
|
||||
select cast('' as signed);
|
||||
cast('' as signed)
|
||||
0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: ''
|
||||
set names binary;
|
||||
select cast(_latin1'test' as char character set latin2);
|
||||
cast(_latin1'test' as char character set latin2)
|
||||
|
|
@ -187,3 +219,36 @@ timediff(cast('2004-12-30 12:00:00' as time), '12:00:00')
|
|||
select timediff(cast('1 12:00:00' as time), '12:00:00');
|
||||
timediff(cast('1 12:00:00' as time), '12:00:00')
|
||||
24:00:00
|
||||
select cast(18446744073709551615 as unsigned);
|
||||
cast(18446744073709551615 as unsigned)
|
||||
18446744073709551615
|
||||
select cast(18446744073709551615 as signed);
|
||||
cast(18446744073709551615 as signed)
|
||||
-1
|
||||
select cast('18446744073709551615' as unsigned);
|
||||
cast('18446744073709551615' as unsigned)
|
||||
18446744073709551615
|
||||
select cast('18446744073709551615' as signed);
|
||||
cast('18446744073709551615' as signed)
|
||||
-1
|
||||
Warnings:
|
||||
Warning 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
||||
select cast('9223372036854775807' as signed);
|
||||
cast('9223372036854775807' as signed)
|
||||
9223372036854775807
|
||||
select cast(concat('184467440','73709551615') as unsigned);
|
||||
cast(concat('184467440','73709551615') as unsigned)
|
||||
18446744073709551615
|
||||
select cast(concat('184467440','73709551615') as signed);
|
||||
cast(concat('184467440','73709551615') as signed)
|
||||
-1
|
||||
Warnings:
|
||||
Warning 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
||||
select cast(repeat('1',20) as unsigned);
|
||||
cast(repeat('1',20) as unsigned)
|
||||
11111111111111111111
|
||||
select cast(repeat('1',20) as signed);
|
||||
cast(repeat('1',20) as signed)
|
||||
-7335632962598440505
|
||||
Warnings:
|
||||
Warning 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
select CAST(1-2 AS UNSIGNED);
|
||||
select CAST(CAST(1-2 AS UNSIGNED) AS SIGNED INTEGER);
|
||||
select CONVERT('-1',UNSIGNED);
|
||||
select cast(-5 as unsigned) | 1, cast(-5 as unsigned) & -1;
|
||||
select cast(-5 as unsigned) -1, cast(-5 as unsigned) + 1;
|
||||
select ~5, cast(~5 as signed);
|
||||
|
|
@ -22,6 +21,15 @@ select CONVERT(DATE "2004-01-22 21:45:33",CHAR(4));
|
|||
select CONVERT(DATE "2004-01-22 21:45:33",BINARY(4));
|
||||
select CAST(DATE "2004-01-22 21:45:33" AS BINARY(4));
|
||||
|
||||
# out-of-range cases
|
||||
select cast('18446744073709551616' as unsigned);
|
||||
select cast('18446744073709551616' as signed);
|
||||
select cast('9223372036854775809' as signed);
|
||||
select cast('-1' as unsigned);
|
||||
select cast('abc' as signed);
|
||||
select cast('1a' as signed);
|
||||
select cast('' as signed);
|
||||
|
||||
#
|
||||
# Character set convertion
|
||||
#
|
||||
|
|
@ -118,3 +126,19 @@ select date_add(cast('2004-12-30 12:00:00' as date), interval 0 hour);
|
|||
select timediff(cast('2004-12-30 12:00:00' as time), '12:00:00');
|
||||
# Still we should not throw away "days" part of time value
|
||||
select timediff(cast('1 12:00:00' as time), '12:00:00');
|
||||
|
||||
#
|
||||
# Bug #7036: Casting from string to unsigned would cap value of result at
|
||||
# maximum signed value instead of maximum unsigned value
|
||||
#
|
||||
select cast(18446744073709551615 as unsigned);
|
||||
select cast(18446744073709551615 as signed);
|
||||
select cast('18446744073709551615' as unsigned);
|
||||
select cast('18446744073709551615' as signed);
|
||||
select cast('9223372036854775807' as signed);
|
||||
|
||||
select cast(concat('184467440','73709551615') as unsigned);
|
||||
select cast(concat('184467440','73709551615') as signed);
|
||||
|
||||
select cast(repeat('1',20) as unsigned);
|
||||
select cast(repeat('1',20) as signed);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue