summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authortsmith@ramayana.hindu.god <>2008-01-25 10:37:29 -0700
committertsmith@ramayana.hindu.god <>2008-01-25 10:37:29 -0700
commit3906cc27d76d544dcecb0fa6ef2ee2c58a8741a1 (patch)
tree74fe704d2ae83b58d06940ffcf7a36638868fee0 /sql/item_func.cc
parent5f6429b01a378b63abe9b88ae35e4922f66de674 (diff)
parent21630ab91f60e66c81cab3bbaa6cea7fec359c7e (diff)
downloadmariadb-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.cc12
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;
}