diff options
author | unknown <hf@deer.(none)> | 2003-12-30 14:08:19 +0400 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2003-12-30 14:08:19 +0400 |
commit | 367ded9f71c7209c851e212ecedc538ca810d8da (patch) | |
tree | 2ae6e41d1324a906e2f8a6868b34fe75950e736f /sql/item_sum.cc | |
parent | d55382369eb639417dd01a62ff4867f9213f10ce (diff) | |
download | mariadb-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.cc | 26 |
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); } } |