Addition to fix for bug #12956: cast make differ rounding.
- use rint() in some other val_int() methods as well.
This commit is contained in:
parent
b46c240b96
commit
516fd4254e
@ -2467,7 +2467,7 @@ longlong Item_param::val_int()
|
||||
{
|
||||
switch (state) {
|
||||
case REAL_VALUE:
|
||||
return (longlong) (value.real + (value.real > 0 ? 0.5 : -0.5));
|
||||
return (longlong) rint(value.real);
|
||||
case INT_VALUE:
|
||||
return value.integer;
|
||||
case DECIMAL_VALUE:
|
||||
@ -5439,7 +5439,7 @@ void Item_cache_real::store(Item *item)
|
||||
longlong Item_cache_real::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
return (longlong) (value+(value > 0 ? 0.5 : -0.5));
|
||||
return (longlong) rint(value);
|
||||
}
|
||||
|
||||
|
||||
|
@ -199,7 +199,7 @@ public:
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *decimal_value);
|
||||
longlong val_int()
|
||||
{ DBUG_ASSERT(fixed == 1); return (longlong) val_real(); }
|
||||
{ DBUG_ASSERT(fixed == 1); return (longlong) rint(val_real()); }
|
||||
enum Item_result result_type () const { return REAL_RESULT; }
|
||||
void fix_length_and_dec()
|
||||
{ decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
|
||||
@ -943,7 +943,7 @@ class Item_func_udf_float :public Item_udf_func
|
||||
longlong val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
return (longlong) Item_func_udf_float::val_real();
|
||||
return (longlong) rint(Item_func_udf_float::val_real());
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *dec_buf)
|
||||
{
|
||||
|
@ -452,7 +452,7 @@ longlong Item_sum_sum::val_int()
|
||||
&result);
|
||||
return result;
|
||||
}
|
||||
return (longlong) val_real();
|
||||
return (longlong) rint(val_real());
|
||||
}
|
||||
|
||||
|
||||
@ -1285,7 +1285,7 @@ longlong Item_sum_hybrid::val_int()
|
||||
return sum_int;
|
||||
}
|
||||
default:
|
||||
return (longlong) Item_sum_hybrid::val_real();
|
||||
return (longlong) rint(Item_sum_hybrid::val_real());
|
||||
}
|
||||
}
|
||||
|
||||
@ -2001,7 +2001,7 @@ double Item_avg_field::val_real()
|
||||
|
||||
longlong Item_avg_field::val_int()
|
||||
{
|
||||
return (longlong) val_real();
|
||||
return (longlong) rint(val_real());
|
||||
}
|
||||
|
||||
|
||||
|
@ -126,7 +126,7 @@ public:
|
||||
longlong val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
return (longlong) val_real(); /* Real as default */
|
||||
return (longlong) rint(val_real()); /* Real as default */
|
||||
}
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
@ -392,7 +392,7 @@ public:
|
||||
bool add();
|
||||
double val_real();
|
||||
// In SPs we might force the "wrong" type with select into a declare variable
|
||||
longlong val_int() { return (longlong)val_real(); }
|
||||
longlong val_int() { return (longlong) rint(val_real()); }
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
String *val_str(String *str);
|
||||
void reset_field();
|
||||
@ -421,7 +421,7 @@ public:
|
||||
enum Type type() const {return FIELD_VARIANCE_ITEM; }
|
||||
double val_real();
|
||||
longlong val_int()
|
||||
{ /* can't be fix_fields()ed */ return (longlong) val_real(); }
|
||||
{ /* can't be fix_fields()ed */ return (longlong) rint(val_real()); }
|
||||
String *val_str(String*);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool is_null() { (void) val_int(); return null_value; }
|
||||
@ -699,7 +699,7 @@ class Item_sum_udf_float :public Item_udf_sum
|
||||
longlong val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
return (longlong) Item_sum_udf_float::val_real();
|
||||
return (longlong) rint(Item_sum_udf_float::val_real());
|
||||
}
|
||||
double val_real();
|
||||
String *val_str(String*str);
|
||||
|
Loading…
x
Reference in New Issue
Block a user