diff options
author | hf@deer.(none) <> | 2005-03-04 22:01:21 +0400 |
---|---|---|
committer | hf@deer.(none) <> | 2005-03-04 22:01:21 +0400 |
commit | af329d532f5dfa501bf6fffbe059cd4a9da0246f (patch) | |
tree | 3aa70db57e8ce8248bf9ea137e9d9b0089cb0d8b | |
parent | 5b16dbf960f0abb90b5ddde001bc72f4efdcfa66 (diff) | |
parent | 7e7d98a291a4f372171317b232df3d97bf7f740e (diff) | |
download | mariadb-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.cc | 26 |
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; } |