summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2015-10-06 18:03:10 +0300
committerSergei Petrunia <psergey@askmonty.org>2015-10-06 18:03:10 +0300
commitd6371d3a8eccedb056708b9d8abae9cc4db3ed4e (patch)
tree3c388fd874823c46c0935e9501932b004c7b3d5b /sql/item_sum.cc
parent21adad000a00a62357c0da63ff9ae98850475618 (diff)
downloadmariadb-git-d6371d3a8eccedb056708b9d8abae9cc4db3ed4e.tar.gz
Combined fix for MDEV-7267 and MDEV-8864
The problem was that GROUP BY code created Item_field objects that referred to fields in the temp. tables used for GROUP BY. Item_ref and set_items_ref_array() call caused pointers to temp. table fields to occur in many places. This patch introduces Item_temptable_field, which can handle item->print() calls made after the underlying table is freed.
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 4cbbc274526..58be20e0322 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -490,7 +490,7 @@ Item *Item_sum::get_tmp_table_item(THD *thd)
if (arg->type() == Item::FIELD_ITEM)
((Item_field*) arg)->field= result_field_tmp++;
else
- sum_item->args[i]= new (thd->mem_root) Item_field(thd, result_field_tmp++);
+ sum_item->args[i]= new (thd->mem_root) Item_temptable_field(thd, result_field_tmp++);
}
}
}