diff options
author | hf@deer.(none) <> | 2004-01-20 20:55:47 +0400 |
---|---|---|
committer | hf@deer.(none) <> | 2004-01-20 20:55:47 +0400 |
commit | 37abf689ecedcc377370697bb13a570d6d8c392e (patch) | |
tree | 38b07f5cc9271b9d99a946af98e1ce00eeaaa2e9 | |
parent | 7dda8c102f88de1578e343d508374b60b0cfe5fa (diff) | |
download | mariadb-git-37abf689ecedcc377370697bb13a570d6d8c392e.tar.gz |
Pack of changes about 'cleanup()'-s
Some errorneous code trimmed
-rw-r--r-- | sql/item.cc | 3 | ||||
-rw-r--r-- | sql/item.h | 13 | ||||
-rw-r--r-- | sql/item_row.h | 10 | ||||
-rw-r--r-- | sql/item_sum.cc | 1 | ||||
-rw-r--r-- | sql/item_sum.h | 6 | ||||
-rw-r--r-- | sql/sql_parse.cc | 2 |
6 files changed, 19 insertions, 16 deletions
diff --git a/sql/item.cc b/sql/item.cc index 72c5ac3fd55..09328dfbf07 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -2024,7 +2024,8 @@ void Item_cache_row::bring_value() Item_type_holder::Item_type_holder(THD *thd, Item *item) - :Item(thd, item), item_type(item->result_type()) + :Item(thd, item), item_type(item->result_type()), + orig_type(item_type) { DBUG_ASSERT(item->fixed); diff --git a/sql/item.h b/sql/item.h index e9d34568350..d06977f555e 100644 --- a/sql/item.h +++ b/sql/item.h @@ -125,7 +125,7 @@ public: optimisation changes in prepared statements */ Item(THD *thd, Item *item); - virtual ~Item() { name=0; cleanup(); } /*lint -e1509 */ + virtual ~Item() { name=0; } /*lint -e1509 */ void set_name(const char *str,uint length, CHARSET_INFO *cs); void init_make_field(Send_field *tmp_field,enum enum_field_types type); virtual void cleanup() { fixed=0; } @@ -227,6 +227,11 @@ public: /* Used in sql_select.cc:eliminate_not_funcs() */ virtual Item *neg_transformer() { return NULL; } + void delete_self() + { + cleanup(); + delete this; + } }; @@ -1003,6 +1008,7 @@ class Item_type_holder: public Item { protected: Item_result item_type; + Item_result orig_type; Field *field_example; public: Item_type_holder(THD*, Item*); @@ -1014,6 +1020,11 @@ public: String *val_str(String*); bool join_types(THD *thd, Item *); Field *example() { return field_example; } + void cleanup() + { + Item::cleanup(); + item_type= orig_type; + } }; diff --git a/sql/item_row.h b/sql/item_row.h index 1b792f981fd..f87b4f66e80 100644 --- a/sql/item_row.h +++ b/sql/item_row.h @@ -34,16 +34,6 @@ public: with_null(0) {} - void cleanup() - { - if (array_holder && items) - { - sql_element_free(items); - items= 0; - array_holder= 0; - } - } - enum Type type() const { return ROW_ITEM; }; void illegal_method_call(const char *); bool is_null() { return null_value; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 7c2d5501c06..e01f9db3463 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -1097,6 +1097,7 @@ void Item_sum_count_distinct::cleanup() if (use_tree) delete_tree(tree); table= 0; + use_tree= 0; } } diff --git a/sql/item_sum.h b/sql/item_sum.h index 9f1c8a09a4e..dc84e4d4ab7 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -610,7 +610,7 @@ class Item_sum_udf_float :public Item_sum_num public: Item_sum_udf_float(udf_func *udf_arg) :Item_sum_num() {} Item_sum_udf_float(udf_func *udf_arg, List<Item> &list) :Item_sum_num() {} - Item_sum_udf_float(THD *thd, Item_sum_udf_float &item) + Item_sum_udf_float(THD *thd, Item_sum_udf_float *item) :Item_sum_num(thd, item) {} enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; } double val() { return 0.0; } @@ -625,7 +625,7 @@ class Item_sum_udf_int :public Item_sum_num public: Item_sum_udf_int(udf_func *udf_arg) :Item_sum_num() {} Item_sum_udf_int(udf_func *udf_arg, List<Item> &list) :Item_sum_num() {} - Item_sum_udf_int(THD *thd, Item_sum_udf_int &item) + Item_sum_udf_int(THD *thd, Item_sum_udf_int *item) :Item_sum_num(thd, item) {} enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; } longlong val_int() { return 0; } @@ -641,7 +641,7 @@ class Item_sum_udf_str :public Item_sum_num public: Item_sum_udf_str(udf_func *udf_arg) :Item_sum_num() {} Item_sum_udf_str(udf_func *udf_arg, List<Item> &list) :Item_sum_num() {} - Item_sum_udf_str(THD *thd, Item_sum_udf_str &item) + Item_sum_udf_str(THD *thd, Item_sum_udf_str *item) :Item_sum_num(thd, item) {} String *val_str(String *) { null_value=1; return 0; } double val() { null_value=1; return 0.0; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index de75ed301e5..7929247676f 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1109,7 +1109,7 @@ end: void free_items(Item *item) { for (; item ; item=item->next) - delete item; + item->delete_self(); } /* This works because items are allocated with sql_alloc() */ |