Commit 6cc4218f authored by unknown's avatar unknown
Browse files

Fix for bug #12956: cast make differ rounding.


sql/item_func.cc:
  Fix for bug #12956: cast make differ rounding.
  - call rint() as we do in the Field_*int*::store(double)
parent 57e1c5aa
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -337,7 +337,7 @@ set @precision=10000000000;
select rand(), 
cast(rand(10)*@precision as unsigned integer) from t1;
rand()	cast(rand(10)*@precision as unsigned integer)
-	6570515219
-	6570515220
-	1282061302
-	6698761160
-	9647622201
@@ -348,23 +348,23 @@ prepare stmt from
set @var=1;
execute stmt using @var;
rand()	cast(rand(10)*@precision as unsigned integer)	cast(rand(?)*@precision as unsigned integer)
-	6570515219	-
-	6570515220	-
-	1282061302	-
-	6698761160	-
-	9647622201	-
set @var=2;
execute stmt using @var;
rand()	cast(rand(10)*@precision as unsigned integer)	cast(rand(?)*@precision as unsigned integer)
-	6570515219	6555866465
-	1282061302	1223466192
-	6698761160	6449731873
-	6570515220	6555866465
-	1282061302	1223466193
-	6698761160	6449731874
-	9647622201	8578261098
set @var=3;
execute stmt using @var;
rand()	cast(rand(10)*@precision as unsigned integer)	cast(rand(?)*@precision as unsigned integer)
-	6570515219	9057697559
-	6570515220	9057697560
-	1282061302	3730790581
-	6698761160	1480860534
-	6698761160	1480860535
-	9647622201	6211931236
drop table t1;
deallocate prepare stmt;
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ while ($1)
  SET @rnd= RAND();
  SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
  SET @id_rev= @rnd_max - @id;
  SET @grp= CAST(128.0 * @rnd AS UNSIGNED); 
  SET @grp= CAST(127.0 * @rnd AS UNSIGNED); 
  INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev); 
  dec $1;
}
+1 −1
Original line number Diff line number Diff line
@@ -735,7 +735,7 @@ longlong Item_func_numhybrid::val_int()
  case INT_RESULT:
    return int_op();
  case REAL_RESULT:
    return (longlong)real_op();
    return (longlong) rint(real_op());
  case STRING_RESULT:
  {
    int err_not_used;