Loading mysql-test/r/type_newdecimal.result +8 −2 Original line number Diff line number Diff line Loading @@ -733,6 +733,9 @@ abs(9999999999999999999999) select abs(-9999999999999999999999); abs(-9999999999999999999999) 9999999999999999999999 select ceiling(999999999999999999); ceiling(999999999999999999) 999999999999999999 select ceiling(99999999999999999999); ceiling(99999999999999999999) 99999999999999999999 Loading @@ -741,13 +744,16 @@ ceiling(9.9999999999999999999) 10 select ceiling(-9.9999999999999999999); ceiling(-9.9999999999999999999) -10 -9 select floor(999999999999999999); floor(999999999999999999) 999999999999999999 select floor(9999999999999999999999); floor(9999999999999999999999) 9999999999999999999999 select floor(9.999999999999999999999); floor(9.999999999999999999999) 10 9 select floor(-9.999999999999999999999); floor(-9.999999999999999999999) -10 Loading mysql-test/t/type_newdecimal.test +2 −0 Original line number Diff line number Diff line Loading @@ -601,6 +601,7 @@ select abs(9999999999999999999999); select abs(-9999999999999999999999); #-- should return 9999999999999999999999 # select ceiling(999999999999999999); select ceiling(99999999999999999999); #-- should return 99999999999999999999 # Loading @@ -610,6 +611,7 @@ select ceiling(9.9999999999999999999); select ceiling(-9.9999999999999999999); #-- should return 9 # select floor(999999999999999999); select floor(9999999999999999999999); #-- should return 9999999999999999999999 # Loading sql/item_func.cc +38 −14 Original line number Diff line number Diff line Loading @@ -1629,13 +1629,25 @@ void Item_func_int_val::find_num_type() longlong Item_func_ceiling::int_op() { /* the volatile's for BUG #3051 to calm optimizer down (because of gcc's bug) */ volatile double value= args[0]->val_real(); longlong result; switch (args[0]->result_type()) { case INT_RESULT: result= args[0]->val_int(); null_value= args[0]->null_value; return (longlong) ceil(value); break; case DECIMAL_RESULT: { my_decimal dec_buf, *dec; if ((dec= Item_func_ceiling::decimal_op(&dec_buf))) my_decimal2int(E_DEC_FATAL_ERROR, dec, unsigned_flag, &result); else result= 0; break; } default: result= (longlong)Item_func_ceiling::real_op(); }; return result; } Loading Loading @@ -1664,13 +1676,25 @@ my_decimal *Item_func_ceiling::decimal_op(my_decimal *decimal_value) longlong Item_func_floor::int_op() { /* the volatile's for BUG #3051 to calm optimizer down (because of gcc's bug) */ volatile double value= args[0]->val_real(); longlong result; switch (args[0]->result_type()) { case INT_RESULT: result= args[0]->val_int(); null_value= args[0]->null_value; return (longlong) floor(value); break; case DECIMAL_RESULT: { my_decimal dec_buf, *dec; if ((dec= Item_func_floor::decimal_op(&dec_buf))) my_decimal2int(E_DEC_FATAL_ERROR, dec, unsigned_flag, &result); else result= 0; break; } default: result= (longlong)Item_func_floor::real_op(); }; return result; } Loading Loading
mysql-test/r/type_newdecimal.result +8 −2 Original line number Diff line number Diff line Loading @@ -733,6 +733,9 @@ abs(9999999999999999999999) select abs(-9999999999999999999999); abs(-9999999999999999999999) 9999999999999999999999 select ceiling(999999999999999999); ceiling(999999999999999999) 999999999999999999 select ceiling(99999999999999999999); ceiling(99999999999999999999) 99999999999999999999 Loading @@ -741,13 +744,16 @@ ceiling(9.9999999999999999999) 10 select ceiling(-9.9999999999999999999); ceiling(-9.9999999999999999999) -10 -9 select floor(999999999999999999); floor(999999999999999999) 999999999999999999 select floor(9999999999999999999999); floor(9999999999999999999999) 9999999999999999999999 select floor(9.999999999999999999999); floor(9.999999999999999999999) 10 9 select floor(-9.999999999999999999999); floor(-9.999999999999999999999) -10 Loading
mysql-test/t/type_newdecimal.test +2 −0 Original line number Diff line number Diff line Loading @@ -601,6 +601,7 @@ select abs(9999999999999999999999); select abs(-9999999999999999999999); #-- should return 9999999999999999999999 # select ceiling(999999999999999999); select ceiling(99999999999999999999); #-- should return 99999999999999999999 # Loading @@ -610,6 +611,7 @@ select ceiling(9.9999999999999999999); select ceiling(-9.9999999999999999999); #-- should return 9 # select floor(999999999999999999); select floor(9999999999999999999999); #-- should return 9999999999999999999999 # Loading
sql/item_func.cc +38 −14 Original line number Diff line number Diff line Loading @@ -1629,13 +1629,25 @@ void Item_func_int_val::find_num_type() longlong Item_func_ceiling::int_op() { /* the volatile's for BUG #3051 to calm optimizer down (because of gcc's bug) */ volatile double value= args[0]->val_real(); longlong result; switch (args[0]->result_type()) { case INT_RESULT: result= args[0]->val_int(); null_value= args[0]->null_value; return (longlong) ceil(value); break; case DECIMAL_RESULT: { my_decimal dec_buf, *dec; if ((dec= Item_func_ceiling::decimal_op(&dec_buf))) my_decimal2int(E_DEC_FATAL_ERROR, dec, unsigned_flag, &result); else result= 0; break; } default: result= (longlong)Item_func_ceiling::real_op(); }; return result; } Loading Loading @@ -1664,13 +1676,25 @@ my_decimal *Item_func_ceiling::decimal_op(my_decimal *decimal_value) longlong Item_func_floor::int_op() { /* the volatile's for BUG #3051 to calm optimizer down (because of gcc's bug) */ volatile double value= args[0]->val_real(); longlong result; switch (args[0]->result_type()) { case INT_RESULT: result= args[0]->val_int(); null_value= args[0]->null_value; return (longlong) floor(value); break; case DECIMAL_RESULT: { my_decimal dec_buf, *dec; if ((dec= Item_func_floor::decimal_op(&dec_buf))) my_decimal2int(E_DEC_FATAL_ERROR, dec, unsigned_flag, &result); else result= 0; break; } default: result= (longlong)Item_func_floor::real_op(); }; return result; } Loading