diff options
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index f3e5e844048..3da1e62a6d2 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -319,11 +319,11 @@ void Item_func::traverse_cond(Cond_traverser traverser, } -bool Item_args::transform_args(Item_transformer transformer, uchar *arg) +bool Item_args::transform_args(THD *thd, Item_transformer transformer, uchar *arg) { for (uint i= 0; i < arg_count; i++) { - Item *new_item= args[i]->transform(transformer, arg); + Item *new_item= args[i]->transform(thd, transformer, arg); if (!new_item) return true; /* @@ -333,7 +333,7 @@ bool Item_args::transform_args(Item_transformer transformer, uchar *arg) change records at each execution. */ if (args[i] != new_item) - current_thd->change_item_tree(&args[i], new_item); + thd->change_item_tree(&args[i], new_item); } return false; } @@ -356,12 +356,12 @@ bool Item_args::transform_args(Item_transformer transformer, uchar *arg) Item returned as the result of transformation of the root node */ -Item *Item_func::transform(Item_transformer transformer, uchar *argument) +Item *Item_func::transform(THD *thd, Item_transformer transformer, uchar *argument) { - DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare()); - if (transform_args(transformer, argument)) + DBUG_ASSERT(!thd->stmt_arena->is_stmt_prepare()); + if (transform_args(thd, transformer, argument)) return 0; - return (this->*transformer)(argument); + return (this->*transformer)(thd, argument); } @@ -391,7 +391,7 @@ Item *Item_func::transform(Item_transformer transformer, uchar *argument) Item returned as the result of transformation of the root node */ -Item *Item_func::compile(Item_analyzer analyzer, uchar **arg_p, +Item *Item_func::compile(THD *thd, Item_analyzer analyzer, uchar **arg_p, Item_transformer transformer, uchar *arg_t) { if (!(this->*analyzer)(arg_p)) @@ -406,12 +406,13 @@ Item *Item_func::compile(Item_analyzer analyzer, uchar **arg_p, to analyze any argument of the condition formula. */ uchar *arg_v= *arg_p; - Item *new_item= (*arg)->compile(analyzer, &arg_v, transformer, arg_t); + Item *new_item= (*arg)->compile(thd, analyzer, &arg_v, transformer, + arg_t); if (new_item && *arg != new_item) - current_thd->change_item_tree(arg, new_item); + thd->change_item_tree(arg, new_item); } } - return (this->*transformer)(arg_t); + return (this->*transformer)(thd, arg_t); } /** @@ -726,7 +727,7 @@ void Item_func::signal_divide_by_null() Item *Item_func::get_tmp_table_item(THD *thd) { if (!with_sum_func && !const_item()) - return new Item_field(result_field); + return new Item_field(thd, result_field); return copy_or_same(thd); } @@ -5533,8 +5534,8 @@ get_var_with_binlog(THD *thd, enum_sql_command sql_command, LEX *sav_lex= thd->lex, lex_tmp; thd->lex= &lex_tmp; lex_start(thd); - tmp_var_list.push_back(new set_var_user(new Item_func_set_user_var(name, - new Item_null()))); + tmp_var_list.push_back(new set_var_user(new Item_func_set_user_var(thd, name, + new Item_null(thd)))); /* Create the variable */ if (sql_set_variables(thd, &tmp_var_list, false)) { @@ -5698,7 +5699,7 @@ bool Item_func_get_user_var::eq(const Item *item, bool binary_cmp) const bool Item_func_get_user_var::set_value(THD *thd, sp_rcontext * /*ctx*/, Item **it) { - Item_func_set_user_var *suv= new Item_func_set_user_var(get_name(), *it); + Item_func_set_user_var *suv= new Item_func_set_user_var(thd, get_name(), *it); /* Item_func_set_user_var is not fixed after construction, call fix_fields(). @@ -5779,11 +5780,11 @@ void Item_user_var_as_out_param::print_for_load(THD *thd, String *str) Item_func_get_system_var:: -Item_func_get_system_var(sys_var *var_arg, enum_var_type var_type_arg, +Item_func_get_system_var(THD *thd, sys_var *var_arg, enum_var_type var_type_arg, LEX_STRING *component_arg, const char *name_arg, - size_t name_len_arg) - :var(var_arg), var_type(var_type_arg), orig_var_type(var_type_arg), - component(*component_arg), cache_present(0) + size_t name_len_arg): + Item_func(thd), var(var_arg), var_type(var_type_arg), + orig_var_type(var_type_arg), component(*component_arg), cache_present(0) { /* set_name() will allocate the name */ set_name(name_arg, (uint) name_len_arg, system_charset_info); @@ -6095,7 +6096,7 @@ void Item_func_get_system_var::cleanup() } -void Item_func_match::init_search(bool no_order) +void Item_func_match::init_search(THD *thd, bool no_order) { DBUG_ENTER("Item_func_match::init_search"); @@ -6113,10 +6114,10 @@ void Item_func_match::init_search(bool no_order) if (key == NO_SUCH_KEY) { List<Item> fields; - fields.push_back(new Item_string(" ", 1, cmp_collation.collation)); + fields.push_back(new Item_string(thd, " ", 1, cmp_collation.collation)); for (uint i= 1; i < arg_count; i++) fields.push_back(args[i]); - concat_ws= new Item_func_concat_ws(fields); + concat_ws= new Item_func_concat_ws(thd, fields); /* Above function used only to get value and do not need fix_fields for it: Item_string - basic constant @@ -6129,7 +6130,7 @@ void Item_func_match::init_search(bool no_order) if (master) { join_key= master->join_key= join_key | master->join_key; - master->init_search(no_order); + master->init_search(thd, no_order); ft_handler= master->ft_handler; join_key= master->join_key; DBUG_VOID_RETURN; @@ -6464,7 +6465,7 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, set_if_smaller(component_name->length, MAX_SYS_VAR_LENGTH); - return new Item_func_get_system_var(var, var_type, component_name, + return new Item_func_get_system_var(thd, var, var_type, component_name, NULL, 0); } @@ -6480,8 +6481,9 @@ longlong Item_func_row_count::val_int() -Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, sp_name *name) - :Item_func(), context(context_arg), m_name(name), m_sp(NULL), sp_result_field(NULL) +Item_func_sp::Item_func_sp(THD *thd, Name_resolution_context *context_arg, + sp_name *name): + Item_func(thd), context(context_arg), m_name(name), m_sp(NULL), sp_result_field(NULL) { maybe_null= 1; m_name->init_qname(current_thd); @@ -6490,10 +6492,10 @@ Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, sp_name *name) } -Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, - sp_name *name_arg, List<Item> &list) - :Item_func(list), context(context_arg), m_name(name_arg), m_sp(NULL), - sp_result_field(NULL) +Item_func_sp::Item_func_sp(THD *thd, Name_resolution_context *context_arg, + sp_name *name_arg, List<Item> &list): + Item_func(thd, list), context(context_arg), m_name(name_arg), m_sp(NULL), + sp_result_field(NULL) { maybe_null= 1; m_name->init_qname(current_thd); |