summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhf@deer.(none) <>2005-03-04 22:01:21 +0400
committerhf@deer.(none) <>2005-03-04 22:01:21 +0400
commitaf329d532f5dfa501bf6fffbe059cd4a9da0246f (patch)
tree3aa70db57e8ce8248bf9ea137e9d9b0089cb0d8b
parent5b16dbf960f0abb90b5ddde001bc72f4efdcfa66 (diff)
parent7e7d98a291a4f372171317b232df3d97bf7f740e (diff)
downloadmariadb-git-af329d532f5dfa501bf6fffbe059cd4a9da0246f.tar.gz
Merge bk@192.168.21.1:/usr/home/bk/mysql-5.0
into deer.(none):/home/hf/work/mysql-5.0.8915
-rw-r--r--sql/item_func.cc26
1 files changed, 19 insertions, 7 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 0d88c689d9f..c1f5de23b7d 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -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();
- null_value= args[0]->null_value;
- return (longlong) ceil(value);
+ longlong result;
+ switch (args[0]->result_type()) {
+ case INT_RESULT:
+ result= args[0]->val_int();
+ null_value= args[0]->null_value;
+ break;
+ case DECIMAL_RESULT:
+ {
+ my_decimal dec_buf, *dec;
+ if ((dec= decimal_op(&dec_buf)))
+ my_decimal2int(E_DEC_FATAL_ERROR, dec, unsigned_flag, &result);
+ else
+ result= 0;
+ break;
+ }
+ default:
+ result= (longlong)real_op();
+ };
+ return result;
}