mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fix CAST(1.0e+300 TO SIGNED). (Bug #13344)
mysql-test/r/cast.result: Update results mysql-test/t/cast.test: Add regression test sql/item.h: Cap Item_real::val_int() to LONGLONG_MIN and LONGLONG_MAX.
This commit is contained in:
@@ -252,3 +252,6 @@ cast(repeat('1',20) as signed)
|
|||||||
-7335632962598440505
|
-7335632962598440505
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
Warning 1105 Cast to signed converted positive out-of-range integer to it's negative complement
|
||||||
|
select cast(1.0e+300 as signed int);
|
||||||
|
cast(1.0e+300 as signed int)
|
||||||
|
9223372036854775807
|
||||||
|
@@ -143,4 +143,9 @@ select cast(concat('184467440','73709551615') as signed);
|
|||||||
select cast(repeat('1',20) as unsigned);
|
select cast(repeat('1',20) as unsigned);
|
||||||
select cast(repeat('1',20) as signed);
|
select cast(repeat('1',20) as signed);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #13344: cast of large decimal to signed int not handled correctly
|
||||||
|
#
|
||||||
|
select cast(1.0e+300 as signed int);
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@@ -703,6 +703,14 @@ public:
|
|||||||
longlong val_int()
|
longlong val_int()
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
|
if (value <= (double) LONGLONG_MIN)
|
||||||
|
{
|
||||||
|
return LONGLONG_MIN;
|
||||||
|
}
|
||||||
|
else if (value >= (double) (ulonglong) LONGLONG_MAX)
|
||||||
|
{
|
||||||
|
return LONGLONG_MAX;
|
||||||
|
}
|
||||||
return (longlong) (value+(value > 0 ? 0.5 : -0.5));
|
return (longlong) (value+(value > 0 ? 0.5 : -0.5));
|
||||||
}
|
}
|
||||||
String *val_str(String*);
|
String *val_str(String*);
|
||||||
|
Reference in New Issue
Block a user