summaryrefslogtreecommitdiff
path: root/sql/sql_class.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r--sql/sql_class.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index cfbf0385b6f..21d4949ad91 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -1244,22 +1244,28 @@ void Statement::set_statement(Statement *stmt)
mem_root= stmt->mem_root;
}
+
void Statement::set_n_backup_item_arena(Statement *set, Statement *backup)
{
- backup->mem_root= mem_root;
- backup->free_list= free_list;
+ backup->set_item_arena(this);
set_item_arena(set);
}
+void Statement::restore_backup_item_arena(Statement *set, Statement *backup)
+{
+ set->set_item_arena(this);
+ set_item_arena(backup);
+ // reset backup mem_root to avoid its freeing
+ init_alloc_root(&backup->mem_root, 0, 0);
+}
+
void Statement::set_item_arena(Statement *set)
{
mem_root= set->mem_root;
free_list= set->free_list;
}
-
-
Statement::~Statement()
{
free_root(&mem_root, MYF(0));