diff options
author | tsmith@ramayana.hindu.god <> | 2008-01-25 10:37:29 -0700 |
---|---|---|
committer | tsmith@ramayana.hindu.god <> | 2008-01-25 10:37:29 -0700 |
commit | 3906cc27d76d544dcecb0fa6ef2ee2c58a8741a1 (patch) | |
tree | 74fe704d2ae83b58d06940ffcf7a36638868fee0 /sql/item_func.cc | |
parent | 5f6429b01a378b63abe9b88ae35e4922f66de674 (diff) | |
parent | 21630ab91f60e66c81cab3bbaa6cea7fec359c7e (diff) | |
download | mariadb-git-3906cc27d76d544dcecb0fa6ef2ee2c58a8741a1.tar.gz |
Merge ramayana.hindu.god:/home/tsmith/m/bk/51
into ramayana.hindu.god:/home/tsmith/m/bk/maint/51
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index be8966598d6..6e9371de9dc 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1994,7 +1994,7 @@ void Item_func_round::fix_length_and_dec() int length_increase= ((decimals_delta <= 0) || truncate) ? 0:1; precision-= decimals_delta - length_increase; - decimals= decimals_to_set; + decimals= min(decimals_to_set, DECIMAL_MAX_SCALE); max_length= my_decimal_precision_to_length(precision, decimals, unsigned_flag); break; @@ -2093,18 +2093,18 @@ my_decimal *Item_func_round::decimal_op(my_decimal *decimal_value) { my_decimal val, *value= args[0]->val_decimal(&val); longlong dec= args[1]->val_int(); - if (dec > 0 || (dec < 0 && args[1]->unsigned_flag)) - { + if (dec >= 0 || args[1]->unsigned_flag) dec= min((ulonglong) dec, decimals); - decimals= (uint8) dec; // to get correct output - } else if (dec < INT_MIN) dec= INT_MIN; if (!(null_value= (args[0]->null_value || args[1]->null_value || my_decimal_round(E_DEC_FATAL_ERROR, value, (int) dec, - truncate, decimal_value) > 1))) + truncate, decimal_value) > 1))) + { + decimal_value->frac= decimals; return decimal_value; + } return 0; } |