summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2003-12-30 14:08:19 +0400
committerunknown <hf@deer.(none)>2003-12-30 14:08:19 +0400
commit367ded9f71c7209c851e212ecedc538ca810d8da (patch)
tree2ae6e41d1324a906e2f8a6868b34fe75950e736f /sql/item_sum.cc
parentd55382369eb639417dd01a62ff4867f9213f10ce (diff)
downloadmariadb-git-367ded9f71c7209c851e212ecedc538ca810d8da.tar.gz
Fix for prepared statements
Here i added Item_*::cleanup() functions, removed a lot of ~Item_*'s, added code to restore order_list and group_list sql/item.cc: cleanups methods implemented Item_ref constructors changed sql/item.h: cleanups declared Item_ref constructors changed some ~Item_* deleted sql/item_cmpfunc.cc: new Item_ref format sql/item_cmpfunc.h: saving/restoring of the original arguments added to eq and equal functions sql/item_func.cc: New Item_ref format sql/item_func.h: destructors removed/changed to 'cleanup()' sql/item_row.cc: New Item_ref format sql/item_row.h: ~Item_row -> cleanup() sql/item_strfunc.cc: new Item_ref format sql/item_strfunc.h: destructors removed sql/item_subselect.cc: Item_subselect implementation, new Item_ref() format sql/item_subselect.h: cleanups for subselects declared sql/item_sum.cc: cleanups implementations sql/item_sum.h: cleanups declarations destructors removed sql/mysql_priv.h: free_items, cleanup_items exported sql/sql_prepare.cc: cleanup_items, free_items calls added stmt->query_id= thd->query_id restored cleanup procedures for group_list and order_list added sql/sql_yacc.yy: New Item_ref() format
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index f187650515a..84d00ce8732 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1082,8 +1082,9 @@ int dump_leaf(byte* key, uint32 count __attribute__((unused)),
}
-Item_sum_count_distinct::~Item_sum_count_distinct()
+void Item_sum_count_distinct::cleanup()
{
+ Item_sum_int::cleanup();
/*
Free table and tree if they belong to this item (if item have not pointer
to original item from which was made copy => it own its objects )
@@ -1095,6 +1096,7 @@ Item_sum_count_distinct::~Item_sum_count_distinct()
delete tmp_table_param;
if (use_tree)
delete_tree(tree);
+ table= 0;
}
}
@@ -1661,6 +1663,23 @@ Item_func_group_concat::Item_func_group_concat(bool is_distinct,
}
+void Item_func_group_concat::cleanup()
+{
+ /*
+ Free table and tree if they belong to this item (if item have not pointer
+ to original item from which was made copy => it own its objects )
+ */
+ if (!original)
+ {
+ THD *thd= current_thd;
+ if (table)
+ free_tmp_table(thd, table);
+ delete tmp_table_param;
+ if (tree_mode)
+ delete_tree(tree);
+ }
+}
+
Item_func_group_concat::~Item_func_group_concat()
{
/*
@@ -1676,11 +1695,6 @@ Item_func_group_concat::~Item_func_group_concat()
sprintf(warn_buff, ER(ER_CUT_VALUE_GROUP_CONCAT), count_cut_values);
warning->set_msg(thd, warn_buff);
}
- if (table)
- free_tmp_table(thd, table);
- delete tmp_table_param;
- if (tree_mode)
- delete_tree(tree);
}
}