summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index c5588e43b49..63a2279bb0d 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -257,6 +257,8 @@ void Item_func::traverse_cond(Cond_traverser traverser,
Item *Item_func::transform(Item_transformer transformer, byte *argument)
{
+ DBUG_ASSERT(!current_thd->is_stmt_prepare());
+
if (arg_count)
{
Item **arg,**arg_end;
@@ -265,6 +267,13 @@ Item *Item_func::transform(Item_transformer transformer, byte *argument)
Item *new_item= (*arg)->transform(transformer, argument);
if (!new_item)
return 0;
+
+ /*
+ THD::change_item_tree() should be called only if the tree was
+ really transformed, i.e. when a new item has been created.
+ Otherwise we'll be allocating a lot of unnecessary memory for
+ change records at each execution.
+ */
if (*arg != new_item)
current_thd->change_item_tree(arg, new_item);
}