summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2012-11-17 16:50:15 +0100
committerSergei Golubchik <sergii@pisem.net>2012-11-17 16:50:15 +0100
commit13ba0dd286f3296bfbbd202fa76d47770734b472 (patch)
tree5790c99069390098160a26ac5b05215f4179f818 /sql
parentecf04668a2db3d7fc91e421e68eeb5ab25064aa0 (diff)
downloadmariadb-git-13ba0dd286f3296bfbbd202fa76d47770734b472.tar.gz
MDEV-736 LP:1004615 - Unexpected warnings "Encountered illegal value '' when converting to DECIMAL" on a query with aggregate functions and GROUP BY
fix: don't call field->val_decimal() if the field->is_null() because the buffer at field->ptr might not hold a valid decimal value sql/item_sum.cc: do not call field->val_decimal() if the field->is_null() storage/maria/ma_blockrec.c: cleanup storage/maria/ma_rrnd.c: cleanup strings/decimal.c: typo
Diffstat (limited to 'sql')
-rw-r--r--sql/item_sum.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 86aef19efc0..1c83f0e2422 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -2149,9 +2149,8 @@ Item_sum_hybrid::min_max_update_int_field()
void
Item_sum_hybrid::min_max_update_decimal_field()
{
- /* TODO: optimize: do not get result_field in case of args[0] is NULL */
my_decimal old_val, nr_val;
- const my_decimal *old_nr= result_field->val_decimal(&old_val);
+ const my_decimal *old_nr;
const my_decimal *nr= args[0]->val_decimal(&nr_val);
if (!args[0]->null_value)
{
@@ -2159,16 +2158,17 @@ Item_sum_hybrid::min_max_update_decimal_field()
old_nr=nr;
else
{
+ old_nr= result_field->val_decimal(&old_val);
bool res= my_decimal_cmp(old_nr, nr) > 0;
/* (cmp_sign > 0 && res) || (!(cmp_sign > 0) && !res) */
if ((cmp_sign > 0) ^ (!res))
old_nr=nr;
}
result_field->set_notnull();
+ result_field->store_decimal(old_nr);
}
else if (result_field->is_null(0))
result_field->set_null();
- result_field->store_decimal(old_nr);
}