summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc62
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);