Loading mysql-test/r/cast.result +3 −0 Original line number Diff line number Diff line Loading @@ -252,3 +252,6 @@ cast(repeat('1',20) as signed) -7335632962598440505 Warnings: 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 mysql-test/t/cast.test +5 −0 Original line number Diff line number Diff line Loading @@ -143,4 +143,9 @@ select cast(concat('184467440','73709551615') as signed); select cast(repeat('1',20) as unsigned); 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 sql/item.h +8 −0 Original line number Diff line number Diff line Loading @@ -703,6 +703,14 @@ class Item_real :public Item_num longlong val_int() { 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)); } String *val_str(String*); Loading Loading
mysql-test/r/cast.result +3 −0 Original line number Diff line number Diff line Loading @@ -252,3 +252,6 @@ cast(repeat('1',20) as signed) -7335632962598440505 Warnings: 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
mysql-test/t/cast.test +5 −0 Original line number Diff line number Diff line Loading @@ -143,4 +143,9 @@ select cast(concat('184467440','73709551615') as signed); select cast(repeat('1',20) as unsigned); 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
sql/item.h +8 −0 Original line number Diff line number Diff line Loading @@ -703,6 +703,14 @@ class Item_real :public Item_num longlong val_int() { 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)); } String *val_str(String*); Loading