mirror of
https://github.com/MariaDB/server.git
synced 2025-04-02 05:15:33 +02:00
MDEV-6152: Remove calls to current_thd while creating Item
- Part 3: Adding mem_root to push_back() and push_front() Other things: - Added THD as an argument to some partition functions. - Added memory overflow checking for XML tag's in read_xml()
This commit is contained in:
parent
ba340d8c47
commit
3cb578c001
50 changed files with 1101 additions and 751 deletions
plugin/feedback
sql
events.ccha_partition.cchandler.ccitem.ccitem_cmpfunc.ccitem_cmpfunc.hitem_create.ccitem_func.ccitem_subselect.ccitem_sum.cclog_event.ccopt_index_cond_pushdown.ccopt_range.ccopt_subselect.ccopt_table_elimination.ccparse_file.ccpartition_info.ccpartition_info.hprotocol.ccrepl_failsafe.ccrpl_utility.ccslave.ccsp_head.ccsp_pcontext.ccsql_acl.ccsql_admin.ccsql_analyse.ccsql_base.ccsql_class.ccsql_class.hsql_error.ccsql_explain.ccsql_help.ccsql_insert.ccsql_lex.ccsql_lex.hsql_load.ccsql_parse.ccsql_partition.ccsql_partition_admin.ccsql_profile.ccsql_repl.ccsql_select.ccsql_show.ccsql_table.ccsql_update.ccsql_view.ccsql_yacc.yytable.cc
|
@ -120,7 +120,7 @@ static COND* make_cond(THD *thd, TABLE_LIST *tables, LEX_STRING *filter)
|
|||
if (!like)
|
||||
return OOM;
|
||||
|
||||
res->add(like);
|
||||
res->add(like, thd->mem_root);
|
||||
}
|
||||
|
||||
if (res->fix_fields(thd, (Item**)&res))
|
||||
|
|
|
@ -640,35 +640,37 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol)
|
|||
DBUG_RETURN(TRUE);
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Event", NAME_CHAR_LEN));
|
||||
Item_empty_string(thd, "Event", NAME_CHAR_LEN),
|
||||
mem_root);
|
||||
|
||||
if (sql_mode_string_representation(thd, et->sql_mode, &sql_mode))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "sql_mode",
|
||||
(uint) sql_mode.length));
|
||||
(uint) sql_mode.length), mem_root);
|
||||
|
||||
tz_name= et->time_zone->get_name();
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "time_zone", tz_name->length()));
|
||||
Item_empty_string(thd, "time_zone", tz_name->length()),
|
||||
mem_root);
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Create Event",
|
||||
show_str.length()));
|
||||
show_str.length()), mem_root);
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE));
|
||||
MY_CS_NAME_SIZE), mem_root);
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE));
|
||||
MY_CS_NAME_SIZE), mem_root);
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Database Collation",
|
||||
MY_CS_NAME_SIZE));
|
||||
MY_CS_NAME_SIZE), mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
|
|
@ -1810,7 +1810,7 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
|
|||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||
if (p_share_refs->init(num_subparts))
|
||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||
if (m_new_partitions_share_refs.push_back(p_share_refs))
|
||||
if (m_new_partitions_share_refs.push_back(p_share_refs, thd->mem_root))
|
||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||
do
|
||||
{
|
||||
|
|
|
@ -1986,16 +1986,16 @@ bool mysql_xa_recover(THD *thd)
|
|||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_int(thd, "formatID", 0,
|
||||
MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
MY_INT32_NUM_DECIMAL_DIGITS), mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_int(thd, "gtrid_length", 0,
|
||||
MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
MY_INT32_NUM_DECIMAL_DIGITS), mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_int(thd, "bqual_length", 0,
|
||||
MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
MY_INT32_NUM_DECIMAL_DIGITS), mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "data",
|
||||
XIDDATASIZE));
|
||||
XIDDATASIZE), mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
@ -5533,9 +5533,13 @@ bool ha_show_status(THD *thd, handlerton *db_type, enum ha_stat_type stat)
|
|||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
bool result;
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Type", 10));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Name", FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Status", 10));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Type", 10),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Name", FN_REFLEN), mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Status", 10),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
|
20
sql/item.cc
20
sql/item.cc
|
@ -4785,7 +4785,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
|
|||
non aggregated fields of the outer select.
|
||||
*/
|
||||
marker= select->cur_pos_in_select_list;
|
||||
select->non_agg_fields.push_back(this);
|
||||
select->non_agg_fields.push_back(this, thd->mem_root);
|
||||
}
|
||||
if (*from_field != view_ref_found)
|
||||
{
|
||||
|
@ -4810,7 +4810,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
|
|||
if (!(rf= new (thd->mem_root) Item_outer_ref(thd, context, this)))
|
||||
return -1;
|
||||
thd->change_item_tree(reference, rf);
|
||||
select->inner_refs_list.push_back(rf);
|
||||
select->inner_refs_list.push_back(rf, thd->mem_root);
|
||||
rf->in_sum_func= thd->lex->in_sum_func;
|
||||
}
|
||||
/*
|
||||
|
@ -4930,7 +4930,8 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
|
|||
|
||||
if (place != IN_HAVING && select->group_list.elements)
|
||||
{
|
||||
outer_context->select_lex->inner_refs_list.push_back((Item_outer_ref*)rf);
|
||||
outer_context->select_lex->inner_refs_list.push_back((Item_outer_ref*)rf,
|
||||
thd->mem_root);
|
||||
((Item_outer_ref*)rf)->in_sum_func= thd->lex->in_sum_func;
|
||||
}
|
||||
thd->change_item_tree(reference, rf);
|
||||
|
@ -5205,7 +5206,7 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
|||
!outer_fixed && !thd->lex->in_sum_func &&
|
||||
thd->lex->current_select->cur_pos_in_select_list != UNDEF_POS)
|
||||
{
|
||||
thd->lex->current_select->non_agg_fields.push_back(this);
|
||||
thd->lex->current_select->non_agg_fields.push_back(this, thd->mem_root);
|
||||
marker= thd->lex->current_select->cur_pos_in_select_list;
|
||||
}
|
||||
mark_non_agg_field:
|
||||
|
@ -5241,7 +5242,7 @@ mark_non_agg_field:
|
|||
else
|
||||
{
|
||||
if (outer_fixed)
|
||||
thd->lex->in_sum_func->outer_fields.push_back(this);
|
||||
thd->lex->in_sum_func->outer_fields.push_back(this, thd->mem_root);
|
||||
else if (thd->lex->in_sum_func->nest_level !=
|
||||
thd->lex->current_select->nest_level)
|
||||
select_lex->set_non_agg_field_used(true);
|
||||
|
@ -6731,9 +6732,10 @@ Item *Item_field::update_value_transformer(THD *thd, uchar *select_arg)
|
|||
Item_ref *ref;
|
||||
|
||||
ref_pointer_array[el]= (Item*)this;
|
||||
all_fields->push_front((Item*)this);
|
||||
ref= new (thd->mem_root) Item_ref(thd, &select->context, ref_pointer_array + el,
|
||||
table_name, field_name);
|
||||
all_fields->push_front((Item*)this, thd->mem_root);
|
||||
ref= new (thd->mem_root)
|
||||
Item_ref(thd, &select->context, ref_pointer_array + el,
|
||||
table_name, field_name);
|
||||
return ref;
|
||||
}
|
||||
return this;
|
||||
|
@ -7165,7 +7167,7 @@ void Item_ref::cleanup()
|
|||
|
||||
Item* Item_ref::transform(THD *thd, Item_transformer transformer, uchar *arg)
|
||||
{
|
||||
DBUG_ASSERT(!current_thd->stmt_arena->is_stmt_prepare());
|
||||
DBUG_ASSERT(!thd->stmt_arena->is_stmt_prepare());
|
||||
DBUG_ASSERT((*ref) != NULL);
|
||||
|
||||
/* Transform the object we are referencing. */
|
||||
|
|
|
@ -2774,6 +2774,26 @@ Item_func_nullif::is_null()
|
|||
}
|
||||
|
||||
|
||||
Item_func_case::Item_func_case(THD *thd, List<Item> &list,
|
||||
Item *first_expr_arg, Item *else_expr_arg):
|
||||
Item_func_hybrid_field_type(thd), first_expr_num(-1), else_expr_num(-1),
|
||||
left_result_type(INT_RESULT), case_item(0)
|
||||
{
|
||||
ncases= list.elements;
|
||||
if (first_expr_arg)
|
||||
{
|
||||
first_expr_num= list.elements;
|
||||
list.push_back(first_expr_arg, thd->mem_root);
|
||||
}
|
||||
if (else_expr_arg)
|
||||
{
|
||||
else_expr_num= list.elements;
|
||||
list.push_back(else_expr_arg, thd->mem_root);
|
||||
}
|
||||
set_arguments(list);
|
||||
bzero(&cmp_items, sizeof(cmp_items));
|
||||
}
|
||||
|
||||
/**
|
||||
Find and return matching items for CASE or ELSE item if all compares
|
||||
are failed or NULL if ELSE item isn't defined.
|
||||
|
@ -4252,6 +4272,14 @@ Item_cond::Item_cond(THD *thd, Item_cond *item)
|
|||
}
|
||||
|
||||
|
||||
Item_cond::Item_cond(THD *thd, Item *i1, Item *i2):
|
||||
Item_bool_func(thd), abort_on_null(0)
|
||||
{
|
||||
list.push_back(i1, thd->mem_root);
|
||||
list.push_back(i2, thd->mem_root);
|
||||
}
|
||||
|
||||
|
||||
Item *Item_cond_and::copy_andor_structure(THD *thd)
|
||||
{
|
||||
Item_cond_and *item;
|
||||
|
@ -4265,7 +4293,7 @@ void Item_cond::copy_andor_arguments(THD *thd, Item_cond *item)
|
|||
{
|
||||
List_iterator_fast<Item> li(item->list);
|
||||
while (Item *it= li++)
|
||||
list.push_back(it->copy_andor_structure(thd));
|
||||
list.push_back(it->copy_andor_structure(thd), thd->mem_root);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4788,7 +4816,7 @@ Item *and_expressions(THD *thd, Item *a, Item *b, Item **org_item)
|
|||
}
|
||||
return res;
|
||||
}
|
||||
if (((Item_cond_and*) a)->add((Item*) b))
|
||||
if (((Item_cond_and*) a)->add((Item*) b, thd->mem_root))
|
||||
return 0;
|
||||
((Item_cond_and*) a)->used_tables_cache|= b->used_tables();
|
||||
((Item_cond_and*) a)->not_null_tables_cache|= b->not_null_tables();
|
||||
|
@ -5836,7 +5864,7 @@ void Item_equal::add_const(THD *thd, Item *c, Item *f)
|
|||
with_const= TRUE;
|
||||
if (f)
|
||||
compare_as_dates= f->cmp_type() == TIME_RESULT;
|
||||
equal_items.push_front(c);
|
||||
equal_items.push_front(c, thd->mem_root);
|
||||
return;
|
||||
}
|
||||
Item *const_item= get_const();
|
||||
|
@ -5991,7 +6019,7 @@ bool Item_equal::merge_with_check(THD *thd, Item_equal *item, bool save_merged)
|
|||
while ((item= fi++))
|
||||
{
|
||||
if (!contains(fi.get_curr_field()))
|
||||
add(item);
|
||||
add(item, thd->mem_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6041,7 +6069,7 @@ void Item_equal::merge_into_list(THD *thd, List<Item_equal> *list,
|
|||
}
|
||||
}
|
||||
if (!only_intersected && !merge_into)
|
||||
list->push_back(this);
|
||||
list->push_back(this, thd->mem_root);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1302,24 +1302,7 @@ class Item_func_case :public Item_func_hybrid_field_type
|
|||
cmp_item *case_item;
|
||||
public:
|
||||
Item_func_case(THD *thd, List<Item> &list, Item *first_expr_arg,
|
||||
Item *else_expr_arg):
|
||||
Item_func_hybrid_field_type(thd), first_expr_num(-1), else_expr_num(-1),
|
||||
left_result_type(INT_RESULT), case_item(0)
|
||||
{
|
||||
ncases= list.elements;
|
||||
if (first_expr_arg)
|
||||
{
|
||||
first_expr_num= list.elements;
|
||||
list.push_back(first_expr_arg);
|
||||
}
|
||||
if (else_expr_arg)
|
||||
{
|
||||
else_expr_num= list.elements;
|
||||
list.push_back(else_expr_arg);
|
||||
}
|
||||
set_arguments(list);
|
||||
bzero(&cmp_items, sizeof(cmp_items));
|
||||
}
|
||||
Item *else_expr_arg);
|
||||
double real_op();
|
||||
longlong int_op();
|
||||
String *str_op(String *);
|
||||
|
@ -1789,24 +1772,19 @@ public:
|
|||
/* Item_cond() is only used to create top level items */
|
||||
Item_cond(THD *thd): Item_bool_func(thd), abort_on_null(1)
|
||||
{ const_item_cache=0; }
|
||||
Item_cond(THD *thd, Item *i1, Item *i2):
|
||||
Item_bool_func(thd), abort_on_null(0)
|
||||
{
|
||||
list.push_back(i1);
|
||||
list.push_back(i2);
|
||||
}
|
||||
Item_cond(THD *thd, Item *i1, Item *i2);
|
||||
Item_cond(THD *thd, Item_cond *item);
|
||||
Item_cond(THD *thd, List<Item> &nlist):
|
||||
Item_bool_func(thd), list(nlist), abort_on_null(0) {}
|
||||
bool add(Item *item)
|
||||
bool add(Item *item, MEM_ROOT *root)
|
||||
{
|
||||
DBUG_ASSERT(item);
|
||||
return list.push_back(item);
|
||||
return list.push_back(item, root);
|
||||
}
|
||||
bool add_at_head(Item *item)
|
||||
bool add_at_head(Item *item, MEM_ROOT *root)
|
||||
{
|
||||
DBUG_ASSERT(item);
|
||||
return list.push_front(item);
|
||||
return list.push_front(item, root);
|
||||
}
|
||||
void add_at_head(List<Item> *nlist)
|
||||
{
|
||||
|
@ -2004,7 +1982,7 @@ public:
|
|||
inline Item* get_const() { return with_const ? equal_items.head() : NULL; }
|
||||
void add_const(THD *thd, Item *c, Item *f = NULL);
|
||||
/** Add a non-constant item to the multiple equality */
|
||||
void add(Item *f) { equal_items.push_back(f); }
|
||||
void add(Item *f, MEM_ROOT *root) { equal_items.push_back(f, root); }
|
||||
bool contains(Field *field);
|
||||
Item* get_first(struct st_join_table *context, Item *field);
|
||||
/** Get number of field items / references to field items in this object */
|
||||
|
|
|
@ -6349,8 +6349,8 @@ static List<Item> *create_func_dyncol_prepare(THD *thd,
|
|||
for (uint i= 0; (def= li++) ;)
|
||||
{
|
||||
dfs[0][i++]= *def;
|
||||
args->push_back(def->key);
|
||||
args->push_back(def->value);
|
||||
args->push_back(def->key, thd->mem_root);
|
||||
args->push_back(def->value, thd->mem_root);
|
||||
}
|
||||
return args;
|
||||
}
|
||||
|
@ -6374,7 +6374,7 @@ Item *create_func_dyncol_add(THD *thd, Item *str,
|
|||
if (!(args= create_func_dyncol_prepare(thd, &dfs, list)))
|
||||
return NULL;
|
||||
|
||||
args->push_back(str);
|
||||
args->push_back(str, thd->mem_root);
|
||||
|
||||
return new (thd->mem_root) Item_func_dyncol_add(thd, *args, dfs);
|
||||
}
|
||||
|
@ -6399,11 +6399,11 @@ Item *create_func_dyncol_delete(THD *thd, Item *str, List<Item> &nums)
|
|||
dfs[i].key= key;
|
||||
dfs[i].value= new (thd->mem_root) Item_null(thd);
|
||||
dfs[i].type= DYN_COL_INT;
|
||||
args->push_back(dfs[i].key);
|
||||
args->push_back(dfs[i].value);
|
||||
args->push_back(dfs[i].key, thd->mem_root);
|
||||
args->push_back(dfs[i].value, thd->mem_root);
|
||||
}
|
||||
|
||||
args->push_back(str);
|
||||
args->push_back(str, thd->mem_root);
|
||||
|
||||
return new (thd->mem_root) Item_func_dyncol_add(thd, *args, dfs);
|
||||
}
|
||||
|
|
|
@ -5552,7 +5552,8 @@ get_var_with_binlog(THD *thd, enum_sql_command sql_command,
|
|||
tmp_var_list.push_back(new (thd->mem_root)
|
||||
set_var_user(new (thd->mem_root)
|
||||
Item_func_set_user_var(thd, name,
|
||||
new (thd->mem_root) Item_null(thd))));
|
||||
new (thd->mem_root) Item_null(thd))),
|
||||
thd->mem_root);
|
||||
/* Create the variable */
|
||||
if (sql_set_variables(thd, &tmp_var_list, false))
|
||||
{
|
||||
|
@ -6131,7 +6132,9 @@ void Item_func_match::init_search(THD *thd, bool no_order)
|
|||
if (key == NO_SUCH_KEY)
|
||||
{
|
||||
List<Item> fields;
|
||||
fields.push_back(new (thd->mem_root) Item_string(thd, " ", 1, cmp_collation.collation));
|
||||
fields.push_back(new (thd->mem_root)
|
||||
Item_string(thd, " ", 1, cmp_collation.collation),
|
||||
thd->mem_root);
|
||||
for (uint i= 1; i < arg_count; i++)
|
||||
fields.push_back(args[i]);
|
||||
concat_ws= new (thd->mem_root) Item_func_concat_ws(thd, fields);
|
||||
|
|
|
@ -2563,7 +2563,7 @@ bool Item_in_subselect::inject_in_to_exists_cond(JOIN *join_arg)
|
|||
Item_equal *elem;
|
||||
while ((elem= li++))
|
||||
{
|
||||
and_args->push_back(elem);
|
||||
and_args->push_back(elem, thd->mem_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2580,7 +2580,8 @@ bool Item_in_subselect::inject_in_to_exists_cond(JOIN *join_arg)
|
|||
join_arg->having= select_lex->having;
|
||||
}
|
||||
join_arg->thd->change_item_tree(&unit->global_parameters()->select_limit,
|
||||
new (thd->mem_root) Item_int(thd, (int32) 1));
|
||||
new (thd->mem_root)
|
||||
Item_int(thd, (int32) 1));
|
||||
unit->select_limit_cnt= 1;
|
||||
|
||||
DBUG_RETURN(false);
|
||||
|
@ -2820,7 +2821,7 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
|
|||
it.replace(local_field);
|
||||
else
|
||||
{
|
||||
first_select->item_list.push_back(local_field);
|
||||
first_select->item_list.push_back(local_field, thd->mem_root);
|
||||
first_select->join->all_fields.elements++;
|
||||
}
|
||||
first_select->ref_pointer_array[i]= (Item *)local_field;
|
||||
|
@ -2846,7 +2847,7 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
|
|||
}
|
||||
outer_exp->fix_after_pullout(unit->outer_select(), &outer_exp);
|
||||
outer_exp->update_used_tables();
|
||||
outer.push_back(outer_exp);
|
||||
outer.push_back(outer_exp, thd->mem_root);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2998,12 +2999,13 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
|
|||
&unit->outer_select()->context,
|
||||
optimizer->arguments()[0]->addr(i),
|
||||
(char *)"<no matter>",
|
||||
(char *)exists_outer_expr_name)));
|
||||
(char *)exists_outer_expr_name)),
|
||||
thd->mem_root);
|
||||
}
|
||||
}
|
||||
if (and_list->elements > 0)
|
||||
{
|
||||
and_list->push_front(optimizer);
|
||||
and_list->push_front(optimizer, thd->mem_root);
|
||||
exp= new (thd->mem_root) Item_cond_and(thd, *and_list);
|
||||
}
|
||||
else
|
||||
|
@ -3308,7 +3310,8 @@ bool Item_in_subselect::init_left_expr_cache()
|
|||
Cached_item *cur_item_cache= new_Cached_item(thd,
|
||||
left_expr->element_index(i),
|
||||
FALSE);
|
||||
if (!cur_item_cache || left_expr_cache->push_front(cur_item_cache))
|
||||
if (!cur_item_cache || left_expr_cache->push_front(cur_item_cache,
|
||||
thd->mem_root))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
@ -4931,14 +4934,17 @@ bool subselect_hash_sj_engine::make_semi_join_conds()
|
|||
|
||||
for (uint i= 0; i < item_in->left_expr->cols(); i++)
|
||||
{
|
||||
Item_func_eq *eq_cond; /* New equi-join condition for the current column. */
|
||||
/* New equi-join condition for the current column. */
|
||||
Item_func_eq *eq_cond;
|
||||
/* Item for the corresponding field from the materialized temp table. */
|
||||
Item_field *right_col_item;
|
||||
|
||||
if (!(right_col_item= new (thd->mem_root) Item_field(thd, context, tmp_table->field[i])) ||
|
||||
!(eq_cond= new (thd->mem_root) Item_func_eq(thd, item_in->left_expr->element_index(i),
|
||||
right_col_item)) ||
|
||||
(((Item_cond_and*)semi_join_conds)->add(eq_cond)))
|
||||
if (!(right_col_item= new (thd->mem_root)
|
||||
Item_field(thd, context, tmp_table->field[i])) ||
|
||||
!(eq_cond= new (thd->mem_root)
|
||||
Item_func_eq(thd, item_in->left_expr->element_index(i),
|
||||
right_col_item)) ||
|
||||
(((Item_cond_and*)semi_join_conds)->add(eq_cond, thd->mem_root)))
|
||||
{
|
||||
delete semi_join_conds;
|
||||
semi_join_conds= NULL;
|
||||
|
|
|
@ -272,7 +272,7 @@ bool Item_sum::check_sum_func(THD *thd, Item **ref)
|
|||
Let upper function decide whether this field is a non
|
||||
aggregated one.
|
||||
*/
|
||||
in_sum_func->outer_fields.push_back(field);
|
||||
in_sum_func->outer_fields.push_back(field, thd->mem_root);
|
||||
}
|
||||
else
|
||||
sel->set_non_agg_field_used(true);
|
||||
|
@ -777,7 +777,7 @@ bool Aggregator_distinct::setup(THD *thd)
|
|||
for (uint i=0; i < item_sum->get_arg_count() ; i++)
|
||||
{
|
||||
Item *item=item_sum->get_arg(i);
|
||||
if (list.push_back(item))
|
||||
if (list.push_back(item, thd->mem_root))
|
||||
return TRUE; // End of memory
|
||||
if (item->const_item() && item->is_null())
|
||||
always_null= true;
|
||||
|
@ -898,7 +898,7 @@ bool Aggregator_distinct::setup(THD *thd)
|
|||
PS/SP. Hence all further allocations are performed in the runtime
|
||||
mem_root.
|
||||
*/
|
||||
if (field_list.push_back(&field_def))
|
||||
if (field_list.push_back(&field_def, thd->mem_root))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
item_sum->null_value= item_sum->maybe_null= 1;
|
||||
|
@ -3505,7 +3505,7 @@ bool Item_func_group_concat::setup(THD *thd)
|
|||
for (uint i= 0; i < arg_count_field; i++)
|
||||
{
|
||||
Item *item= args[i];
|
||||
if (list.push_back(item))
|
||||
if (list.push_back(item, thd->mem_root))
|
||||
DBUG_RETURN(TRUE);
|
||||
if (item->const_item())
|
||||
{
|
||||
|
|
|
@ -1037,17 +1037,28 @@ int Log_event::net_send(THD *thd, Protocol *protocol, const char* log_name,
|
|||
void Log_event::init_show_field_list(THD *thd, List<Item>* field_list)
|
||||
{
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
field_list->push_back(new (mem_root) Item_empty_string(thd, "Log_name", 20));
|
||||
field_list->push_back(new (mem_root) Item_return_int(thd, "Pos",
|
||||
MY_INT32_NUM_DECIMAL_DIGITS,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list->push_back(new (mem_root) Item_empty_string(thd, "Event_type", 20));
|
||||
field_list->push_back(new (mem_root) Item_return_int(thd, "Server_id", 10,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list->push_back(new (mem_root) Item_return_int(thd, "End_log_pos",
|
||||
MY_INT32_NUM_DECIMAL_DIGITS,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list->push_back(new (mem_root) Item_empty_string(thd, "Info", 20));
|
||||
field_list->push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Log_name", 20),
|
||||
mem_root);
|
||||
field_list->push_back(new (mem_root)
|
||||
Item_return_int(thd, "Pos",
|
||||
MY_INT32_NUM_DECIMAL_DIGITS,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
mem_root);
|
||||
field_list->push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Event_type", 20),
|
||||
mem_root);
|
||||
field_list->push_back(new (mem_root)
|
||||
Item_return_int(thd, "Server_id", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
mem_root);
|
||||
field_list->push_back(new (mem_root)
|
||||
Item_return_int(thd, "End_log_pos",
|
||||
MY_INT32_NUM_DECIMAL_DIGITS,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
mem_root);
|
||||
field_list->push_back(new (mem_root) Item_empty_string(thd, "Info", 20),
|
||||
mem_root);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5726,8 +5737,10 @@ void Load_log_event::set_fields(const char* affected_db,
|
|||
const char* field = fields;
|
||||
for (i= 0; i < num_fields; i++)
|
||||
{
|
||||
field_list.push_back(new (thd->mem_root) Item_field(thd, context,
|
||||
affected_db, table_name, field));
|
||||
field_list.push_back(new (thd->mem_root)
|
||||
Item_field(thd, context, affected_db, table_name,
|
||||
field),
|
||||
thd->mem_root);
|
||||
field+= field_lens[i] + 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ static Item *make_cond_for_index(THD *thd, Item *cond, TABLE *table, uint keyno,
|
|||
Item *fix= make_cond_for_index(thd, item, table, keyno, other_tbls_ok);
|
||||
if (fix)
|
||||
{
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
used_tables|= fix->used_tables();
|
||||
}
|
||||
if (MY_TEST(item->marker == ICP_COND_USES_INDEX_ONLY))
|
||||
|
@ -237,7 +237,7 @@ static Item *make_cond_for_index(THD *thd, Item *cond, TABLE *table, uint keyno,
|
|||
Item *fix= make_cond_for_index(thd, item, table, keyno, other_tbls_ok);
|
||||
if (!fix)
|
||||
return (COND*) 0;
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
if (MY_TEST(item->marker == ICP_COND_USES_INDEX_ONLY))
|
||||
{
|
||||
n_marked++;
|
||||
|
@ -280,7 +280,7 @@ static Item *make_cond_remainder(THD *thd, Item *cond, TABLE *table, uint keyno,
|
|||
other_tbls_ok, exclude_index);
|
||||
if (fix)
|
||||
{
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
tbl_map |= fix->used_tables();
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ static Item *make_cond_remainder(THD *thd, Item *cond, TABLE *table, uint keyno,
|
|||
other_tbls_ok, FALSE);
|
||||
if (!fix)
|
||||
return (COND*) 0;
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
tbl_map |= fix->used_tables();
|
||||
}
|
||||
new_cond->quick_fix_field();
|
||||
|
|
|
@ -792,6 +792,8 @@ SEL_TREE::SEL_TREE(SEL_TREE *arg, bool without_merges,
|
|||
{
|
||||
keys_map= arg->keys_map;
|
||||
type= arg->type;
|
||||
MEM_ROOT *mem_root;
|
||||
|
||||
for (uint idx= 0; idx < param->keys; idx++)
|
||||
{
|
||||
if ((keys[idx]= arg->keys[idx]))
|
||||
|
@ -801,16 +803,17 @@ SEL_TREE::SEL_TREE(SEL_TREE *arg, bool without_merges,
|
|||
if (without_merges)
|
||||
return;
|
||||
|
||||
mem_root= current_thd->mem_root;
|
||||
List_iterator<SEL_IMERGE> it(arg->merges);
|
||||
for (SEL_IMERGE *el= it++; el; el= it++)
|
||||
{
|
||||
SEL_IMERGE *merge= new SEL_IMERGE(el, 0, param);
|
||||
SEL_IMERGE *merge= new (mem_root) SEL_IMERGE(el, 0, param);
|
||||
if (!merge || merge->trees == merge->trees_next)
|
||||
{
|
||||
merges.empty();
|
||||
return;
|
||||
}
|
||||
merges.push_back (merge);
|
||||
merges.push_back(merge, mem_root);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -937,11 +940,12 @@ int imerge_list_or_list(RANGE_OPT_PARAM *param,
|
|||
|
||||
uint rc;
|
||||
bool is_last_check_pass= FALSE;
|
||||
|
||||
SEL_IMERGE *imerge= im1->head();
|
||||
uint elems= imerge->trees_next-imerge->trees;
|
||||
MEM_ROOT *mem_root= current_thd->mem_root;
|
||||
|
||||
im1->empty();
|
||||
im1->push_back(imerge);
|
||||
im1->push_back(imerge, mem_root);
|
||||
|
||||
rc= imerge->or_sel_imerge_with_checks(param, elems, im2->head(),
|
||||
TRUE, &is_last_check_pass);
|
||||
|
@ -957,14 +961,14 @@ int imerge_list_or_list(RANGE_OPT_PARAM *param,
|
|||
|
||||
if (!is_last_check_pass)
|
||||
{
|
||||
SEL_IMERGE* new_imerge= new SEL_IMERGE(imerge, elems, param);
|
||||
SEL_IMERGE* new_imerge= new (mem_root) SEL_IMERGE(imerge, elems, param);
|
||||
if (new_imerge)
|
||||
{
|
||||
is_last_check_pass= TRUE;
|
||||
rc= new_imerge->or_sel_imerge_with_checks(param, elems, im2->head(),
|
||||
FALSE, &is_last_check_pass);
|
||||
if (!rc)
|
||||
im1->push_back(new_imerge);
|
||||
im1->push_back(new_imerge, mem_root);
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
|
@ -1024,17 +1028,17 @@ int imerge_list_or_tree(RANGE_OPT_PARAM *param,
|
|||
List<SEL_IMERGE> *merges,
|
||||
SEL_TREE *tree)
|
||||
{
|
||||
|
||||
SEL_IMERGE *imerge;
|
||||
List<SEL_IMERGE> additional_merges;
|
||||
List_iterator<SEL_IMERGE> it(*merges);
|
||||
MEM_ROOT *mem_root= current_thd->mem_root;
|
||||
|
||||
while ((imerge= it++))
|
||||
{
|
||||
bool is_last_check_pass;
|
||||
int rc= 0;
|
||||
int rc1= 0;
|
||||
SEL_TREE *or_tree= new SEL_TREE (tree, FALSE, param);
|
||||
SEL_TREE *or_tree= new (mem_root) SEL_TREE (tree, FALSE, param);
|
||||
if (or_tree)
|
||||
{
|
||||
uint elems= imerge->trees_next-imerge->trees;
|
||||
|
@ -1042,13 +1046,14 @@ int imerge_list_or_tree(RANGE_OPT_PARAM *param,
|
|||
TRUE, &is_last_check_pass);
|
||||
if (!is_last_check_pass)
|
||||
{
|
||||
SEL_IMERGE *new_imerge= new SEL_IMERGE(imerge, elems, param);
|
||||
SEL_IMERGE *new_imerge= new (mem_root) SEL_IMERGE(imerge, elems,
|
||||
param);
|
||||
if (new_imerge)
|
||||
{
|
||||
rc1= new_imerge->or_sel_tree_with_checks(param, elems, or_tree,
|
||||
FALSE, &is_last_check_pass);
|
||||
if (!rc1)
|
||||
additional_merges.push_back(new_imerge);
|
||||
additional_merges.push_back(new_imerge, mem_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1110,11 +1115,12 @@ int imerge_list_and_tree(RANGE_OPT_PARAM *param,
|
|||
SEL_IMERGE *new_imerge= NULL;
|
||||
List<SEL_IMERGE> new_merges;
|
||||
List_iterator<SEL_IMERGE> it(*merges);
|
||||
MEM_ROOT *mem_root= current_thd->mem_root;
|
||||
|
||||
while ((imerge= it++))
|
||||
{
|
||||
if (!new_imerge)
|
||||
new_imerge= new SEL_IMERGE();
|
||||
new_imerge= new (mem_root) SEL_IMERGE();
|
||||
if (imerge->have_common_keys(param, tree) &&
|
||||
new_imerge && !imerge->and_sel_tree(param, tree, new_imerge))
|
||||
{
|
||||
|
@ -1125,7 +1131,7 @@ int imerge_list_and_tree(RANGE_OPT_PARAM *param,
|
|||
if (replace)
|
||||
it.replace(new_imerge);
|
||||
else
|
||||
new_merges.push_back(new_imerge);
|
||||
new_merges.push_back(new_imerge, mem_root);
|
||||
new_imerge= NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1371,7 +1377,7 @@ QUICK_INDEX_SORT_SELECT::push_quick_back(QUICK_RANGE_SELECT *quick_sel_range)
|
|||
pk_quick_select= quick_sel_range;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
DBUG_RETURN(quick_selects.push_back(quick_sel_range));
|
||||
DBUG_RETURN(quick_selects.push_back(quick_sel_range, thd->mem_root));
|
||||
}
|
||||
|
||||
QUICK_INDEX_SORT_SELECT::~QUICK_INDEX_SORT_SELECT()
|
||||
|
|
|
@ -691,7 +691,8 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
|||
{
|
||||
Query_arena *arena, backup;
|
||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||
select_lex->outer_select()->sj_subselects.push_back(in_subs);
|
||||
select_lex->outer_select()->sj_subselects.push_back(in_subs,
|
||||
thd->mem_root);
|
||||
if (arena)
|
||||
thd->restore_active_arena(arena, &backup);
|
||||
in_subs->is_registered_semijoin= TRUE;
|
||||
|
@ -728,7 +729,8 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
|||
{
|
||||
Query_arena *arena, backup;
|
||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||
select_lex->outer_select()->sj_subselects.push_back(in_subs);
|
||||
select_lex->outer_select()->sj_subselects.push_back(in_subs,
|
||||
thd->mem_root);
|
||||
if (arena)
|
||||
thd->restore_active_arena(arena, &backup);
|
||||
in_subs->is_registered_semijoin= TRUE;
|
||||
|
@ -1425,7 +1427,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
A3: changes in the TABLE_LIST::outer_join will make everything work
|
||||
automatically.
|
||||
*/
|
||||
if (!(wrap_nest= alloc_join_nest(parent_join->thd)))
|
||||
if (!(wrap_nest= alloc_join_nest(thd)))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -1434,7 +1436,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
wrap_nest->alias= (char*) "(sj-wrap)";
|
||||
|
||||
wrap_nest->nested_join->join_list.empty();
|
||||
wrap_nest->nested_join->join_list.push_back(outer_tbl);
|
||||
wrap_nest->nested_join->join_list.push_back(outer_tbl, thd->mem_root);
|
||||
|
||||
outer_tbl->embedding= wrap_nest;
|
||||
outer_tbl->join_list= &wrap_nest->nested_join->join_list;
|
||||
|
@ -1470,7 +1472,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
|
||||
TABLE_LIST *sj_nest;
|
||||
NESTED_JOIN *nested_join;
|
||||
if (!(sj_nest= alloc_join_nest(parent_join->thd)))
|
||||
if (!(sj_nest= alloc_join_nest(thd)))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -1484,7 +1486,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
subq_pred->left_expr->used_tables();
|
||||
/* Nests do not participate in those 'chains', so: */
|
||||
/* sj_nest->next_leaf= sj_nest->next_local= sj_nest->next_global == NULL*/
|
||||
emb_join_list->push_back(sj_nest);
|
||||
emb_join_list->push_back(sj_nest, thd->mem_root);
|
||||
|
||||
/*
|
||||
nested_join->used_tables and nested_join->not_null_tables are
|
||||
|
@ -1503,7 +1505,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
{
|
||||
tl->embedding= sj_nest;
|
||||
tl->join_list= &nested_join->join_list;
|
||||
nested_join->join_list.push_back(tl);
|
||||
nested_join->join_list.push_back(tl, thd->mem_root);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1593,10 +1595,11 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
|
||||
if (subq_pred->left_expr->cols() == 1)
|
||||
{
|
||||
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr);
|
||||
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr,
|
||||
thd->mem_root);
|
||||
Item_func_eq *item_eq=
|
||||
new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr,
|
||||
subq_lex->ref_pointer_array[0]);
|
||||
subq_lex->ref_pointer_array[0]);
|
||||
item_eq->in_equality_no= 0;
|
||||
sj_nest->sj_on_expr= and_items(thd, sj_nest->sj_on_expr, item_eq);
|
||||
}
|
||||
|
@ -1605,10 +1608,12 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
for (uint i= 0; i < subq_pred->left_expr->cols(); i++)
|
||||
{
|
||||
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr->
|
||||
element_index(i));
|
||||
element_index(i),
|
||||
thd->mem_root);
|
||||
Item_func_eq *item_eq=
|
||||
new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr->element_index(i),
|
||||
subq_lex->ref_pointer_array[i]);
|
||||
new (thd->mem_root)
|
||||
Item_func_eq(thd, subq_pred->left_expr->element_index(i),
|
||||
subq_lex->ref_pointer_array[i]);
|
||||
item_eq->in_equality_no= i;
|
||||
sj_nest->sj_on_expr= and_items(thd, sj_nest->sj_on_expr, item_eq);
|
||||
}
|
||||
|
@ -1623,7 +1628,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
we have in here).
|
||||
*/
|
||||
if (!sj_nest->sj_on_expr->fixed &&
|
||||
sj_nest->sj_on_expr->fix_fields(parent_join->thd, &sj_nest->sj_on_expr))
|
||||
sj_nest->sj_on_expr->fix_fields(thd, &sj_nest->sj_on_expr))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -1649,7 +1654,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
sj_nest->sj_on_expr);
|
||||
emb_tbl_nest->on_expr->top_level_item();
|
||||
if (!emb_tbl_nest->on_expr->fixed &&
|
||||
emb_tbl_nest->on_expr->fix_fields(parent_join->thd,
|
||||
emb_tbl_nest->on_expr->fix_fields(thd,
|
||||
&emb_tbl_nest->on_expr))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -1667,7 +1672,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
save_lex= thd->lex->current_select;
|
||||
thd->lex->current_select=parent_join->select_lex;
|
||||
if (!parent_join->conds->fixed &&
|
||||
parent_join->conds->fix_fields(parent_join->thd,
|
||||
parent_join->conds->fix_fields(thd,
|
||||
&parent_join->conds))
|
||||
{
|
||||
DBUG_RETURN(1);
|
||||
|
@ -1681,7 +1686,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||
Item_func_match *ifm;
|
||||
List_iterator_fast<Item_func_match> li(*(subq_lex->ftfunc_list));
|
||||
while ((ifm= li++))
|
||||
parent_lex->ftfunc_list->push_front(ifm);
|
||||
parent_lex->ftfunc_list->push_front(ifm, thd->mem_root);
|
||||
}
|
||||
|
||||
parent_lex->have_merged_subqueries= TRUE;
|
||||
|
@ -1723,16 +1728,16 @@ static bool convert_subq_to_jtbm(JOIN *parent_join,
|
|||
List<TABLE_LIST> *emb_join_list= &parent_lex->top_join_list;
|
||||
TABLE_LIST *emb_tbl_nest= NULL; // will change when we learn to handle outer joins
|
||||
TABLE_LIST *tl;
|
||||
DBUG_ENTER("convert_subq_to_jtbm");
|
||||
bool optimization_delayed= TRUE;
|
||||
subq_pred->set_strategy(SUBS_MATERIALIZATION);
|
||||
TABLE_LIST *jtbm;
|
||||
char *tbl_alias;
|
||||
DBUG_ENTER("convert_subq_to_jtbm");
|
||||
|
||||
subq_pred->set_strategy(SUBS_MATERIALIZATION);
|
||||
subq_pred->is_jtbm_merged= TRUE;
|
||||
|
||||
*remove_item= TRUE;
|
||||
|
||||
TABLE_LIST *jtbm;
|
||||
char *tbl_alias;
|
||||
if (!(tbl_alias= (char*)parent_join->thd->calloc(SUBQERY_TEMPTABLE_NAME_MAX_LEN)) ||
|
||||
!(jtbm= alloc_join_nest(parent_join->thd))) //todo: this is not a join nest!
|
||||
{
|
||||
|
@ -1746,13 +1751,13 @@ static bool convert_subq_to_jtbm(JOIN *parent_join,
|
|||
|
||||
/* Nests do not participate in those 'chains', so: */
|
||||
/* jtbm->next_leaf= jtbm->next_local= jtbm->next_global == NULL*/
|
||||
emb_join_list->push_back(jtbm);
|
||||
emb_join_list->push_back(jtbm, parent_join->thd->mem_root);
|
||||
|
||||
/*
|
||||
Inject the jtbm table into TABLE_LIST::next_leaf list, so that
|
||||
make_join_statistics() and co. can find it.
|
||||
*/
|
||||
parent_lex->leaf_tables.push_back(jtbm);
|
||||
parent_lex->leaf_tables.push_back(jtbm, parent_join->thd->mem_root);
|
||||
|
||||
if (subq_pred->unit->first_select()->options & OPTION_SCHEMA_TABLE)
|
||||
parent_lex->options |= OPTION_SCHEMA_TABLE;
|
||||
|
@ -2073,7 +2078,7 @@ int pull_out_semijoin_tables(JOIN *join)
|
|||
*/
|
||||
child_li.remove();
|
||||
sj_nest->nested_join->used_tables &= ~tbl->table->map;
|
||||
upper_join_list->push_back(tbl);
|
||||
upper_join_list->push_back(tbl, join->thd->mem_root);
|
||||
tbl->join_list= upper_join_list;
|
||||
tbl->embedding= sj_nest->embedding;
|
||||
}
|
||||
|
@ -3512,16 +3517,19 @@ void fix_semijoin_strategies_for_picked_join_order(JOIN *join)
|
|||
|
||||
bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab)
|
||||
{
|
||||
DBUG_ENTER("setup_sj_materialization");
|
||||
JOIN_TAB *tab= sjm_tab->bush_children->start;
|
||||
TABLE_LIST *emb_sj_nest= tab->table->pos_in_table_list->embedding;
|
||||
SJ_MATERIALIZATION_INFO *sjm;
|
||||
THD *thd;
|
||||
|
||||
DBUG_ENTER("setup_sj_materialization");
|
||||
|
||||
/* Walk out of outer join nests until we reach the semi-join nest we're in */
|
||||
while (!emb_sj_nest->sj_mat_info)
|
||||
emb_sj_nest= emb_sj_nest->embedding;
|
||||
|
||||
SJ_MATERIALIZATION_INFO *sjm= emb_sj_nest->sj_mat_info;
|
||||
THD *thd= tab->join->thd;
|
||||
sjm= emb_sj_nest->sj_mat_info;
|
||||
thd= tab->join->thd;
|
||||
/* First the calls come to the materialization function */
|
||||
//List<Item> &item_list= emb_sj_nest->sj_subq_pred->unit->first_select()->item_list;
|
||||
|
||||
|
@ -3537,8 +3545,8 @@ bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab)
|
|||
Item **p_end= p_item + subq_select->item_list.elements;
|
||||
//while((right_expr= it++))
|
||||
for(;p_item != p_end; p_item++)
|
||||
sjm->sjm_table_cols.push_back(*p_item);
|
||||
|
||||
sjm->sjm_table_cols.push_back(*p_item, thd->mem_root);
|
||||
|
||||
sjm->sjm_table_param.field_count= subq_select->item_list.elements;
|
||||
sjm->sjm_table_param.force_not_null_cols= TRUE;
|
||||
|
||||
|
@ -3554,8 +3562,8 @@ bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab)
|
|||
sjm->table->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||
sjm->table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
|
||||
|
||||
tab->join->sj_tmp_tables.push_back(sjm->table);
|
||||
tab->join->sjm_info_list.push_back(sjm);
|
||||
tab->join->sj_tmp_tables.push_back(sjm->table, thd->mem_root);
|
||||
tab->join->sjm_info_list.push_back(sjm, thd->mem_root);
|
||||
|
||||
sjm->materialized= FALSE;
|
||||
sjm_tab->table= sjm->table;
|
||||
|
@ -4338,7 +4346,7 @@ int init_dups_weedout(JOIN *join, uint first_table, int first_fanout_table, uint
|
|||
sjtbl->null_bytes= (jt_null_bits + 7)/8;
|
||||
if (sjtbl->create_sj_weedout_tmp_table(thd))
|
||||
DBUG_RETURN(TRUE);
|
||||
join->sj_tmp_tables.push_back(sjtbl->tmp_table);
|
||||
join->sj_tmp_tables.push_back(sjtbl->tmp_table, thd->mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5103,12 +5111,13 @@ TABLE *create_dummy_tmp_table(THD *thd)
|
|||
sjm_table_param.field_count= 1;
|
||||
List<Item> sjm_table_cols;
|
||||
Item *column_item= new (thd->mem_root) Item_int(thd, 1);
|
||||
sjm_table_cols.push_back(column_item);
|
||||
sjm_table_cols.push_back(column_item, thd->mem_root);
|
||||
if (!(table= create_tmp_table(thd, &sjm_table_param,
|
||||
sjm_table_cols, (ORDER*) 0,
|
||||
TRUE /* distinct */,
|
||||
1, /*save_sum_fields*/
|
||||
thd->variables.option_bits | TMP_TABLE_ALL_COLUMNS,
|
||||
thd->variables.option_bits |
|
||||
TMP_TABLE_ALL_COLUMNS,
|
||||
HA_POS_ERROR /*rows_limit */,
|
||||
(char*)"dummy", TRUE /* Do not open */)))
|
||||
{
|
||||
|
|
|
@ -1018,6 +1018,7 @@ public:
|
|||
bool Dep_analysis_context::setup_equality_modules_deps(List<Dep_module>
|
||||
*bound_modules)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
DBUG_ENTER("setup_equality_modules_deps");
|
||||
|
||||
/*
|
||||
|
@ -1042,7 +1043,7 @@ bool Dep_analysis_context::setup_equality_modules_deps(List<Dep_module>
|
|||
}
|
||||
|
||||
void *buf;
|
||||
if (!(buf= current_thd->alloc(bitmap_buffer_size(offset))) ||
|
||||
if (!(buf= thd->alloc(bitmap_buffer_size(offset))) ||
|
||||
my_bitmap_init(&expr_deps, (my_bitmap_map*)buf, offset, FALSE))
|
||||
{
|
||||
DBUG_RETURN(TRUE); /* purecov: inspected */
|
||||
|
@ -1084,7 +1085,7 @@ bool Dep_analysis_context::setup_equality_modules_deps(List<Dep_module>
|
|||
}
|
||||
|
||||
if (!eq_mod->unbound_args)
|
||||
bound_modules->push_back(eq_mod);
|
||||
bound_modules->push_back(eq_mod, thd->mem_root);
|
||||
}
|
||||
|
||||
DBUG_RETURN(FALSE);
|
||||
|
@ -1255,7 +1256,7 @@ void build_eq_mods_for_cond(THD *thd, Dep_analysis_context *ctx,
|
|||
{
|
||||
Dep_value_field *field_val;
|
||||
if ((field_val= ctx->get_field_value(equal_field)))
|
||||
fvl->push_back(field_val);
|
||||
fvl->push_back(field_val, thd->mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -667,7 +667,8 @@ parse_quoted_escaped_string(const char *ptr, const char *end,
|
|||
@param[in] mem_root MEM_ROOT for parameters allocation
|
||||
*/
|
||||
|
||||
bool get_file_options_ulllist(const char *&ptr, const char *end, const char *line,
|
||||
bool get_file_options_ulllist(const char *&ptr, const char *end,
|
||||
const char *line,
|
||||
uchar* base, File_option *parameter,
|
||||
MEM_ROOT *mem_root)
|
||||
{
|
||||
|
|
|
@ -34,14 +34,16 @@
|
|||
#include "ha_partition.h"
|
||||
|
||||
|
||||
partition_info *partition_info::get_clone()
|
||||
partition_info *partition_info::get_clone(THD *thd)
|
||||
{
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("partition_info::get_clone");
|
||||
|
||||
if (!this)
|
||||
DBUG_RETURN(NULL);
|
||||
List_iterator<partition_element> part_it(partitions);
|
||||
partition_element *part;
|
||||
partition_info *clone= new partition_info();
|
||||
partition_info *clone= new (mem_root) partition_info();
|
||||
if (!clone)
|
||||
{
|
||||
mem_alloc_error(sizeof(partition_info));
|
||||
|
@ -57,7 +59,7 @@ partition_info *partition_info::get_clone()
|
|||
{
|
||||
List_iterator<partition_element> subpart_it(part->subpartitions);
|
||||
partition_element *subpart;
|
||||
partition_element *part_clone= new partition_element();
|
||||
partition_element *part_clone= new (mem_root) partition_element();
|
||||
if (!part_clone)
|
||||
{
|
||||
mem_alloc_error(sizeof(partition_element));
|
||||
|
@ -74,9 +76,9 @@ partition_info *partition_info::get_clone()
|
|||
DBUG_RETURN(NULL);
|
||||
}
|
||||
memcpy(subpart_clone, subpart, sizeof(partition_element));
|
||||
part_clone->subpartitions.push_back(subpart_clone);
|
||||
part_clone->subpartitions.push_back(subpart_clone, mem_root);
|
||||
}
|
||||
clone->partitions.push_back(part_clone);
|
||||
clone->partitions.push_back(part_clone, mem_root);
|
||||
}
|
||||
DBUG_RETURN(clone);
|
||||
}
|
||||
|
@ -2236,12 +2238,12 @@ bool partition_info::is_full_part_expr_in_fields(List<Item> &fields)
|
|||
FALSE Success
|
||||
*/
|
||||
|
||||
int partition_info::add_max_value()
|
||||
int partition_info::add_max_value(THD *thd)
|
||||
{
|
||||
DBUG_ENTER("partition_info::add_max_value");
|
||||
|
||||
part_column_list_val *col_val;
|
||||
if (!(col_val= add_column_value()))
|
||||
if (!(col_val= add_column_value(thd)))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -2261,7 +2263,7 @@ int partition_info::add_max_value()
|
|||
0 Memory allocation failure
|
||||
*/
|
||||
|
||||
part_column_list_val *partition_info::add_column_value()
|
||||
part_column_list_val *partition_info::add_column_value(THD *thd)
|
||||
{
|
||||
uint max_val= num_columns ? num_columns : MAX_REF_PARTS;
|
||||
DBUG_ENTER("add_column_value");
|
||||
|
@ -2283,9 +2285,9 @@ part_column_list_val *partition_info::add_column_value()
|
|||
into the structure used for 1 column. After this we call
|
||||
ourselves recursively which should always succeed.
|
||||
*/
|
||||
if (!reorganize_into_single_field_col_val())
|
||||
if (!reorganize_into_single_field_col_val(thd))
|
||||
{
|
||||
DBUG_RETURN(add_column_value());
|
||||
DBUG_RETURN(add_column_value(thd));
|
||||
}
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
|
@ -2366,7 +2368,7 @@ bool partition_info::add_column_list_value(THD *thd, Item *item)
|
|||
if (part_type == LIST_PARTITION &&
|
||||
num_columns == 1U)
|
||||
{
|
||||
if (init_column_part())
|
||||
if (init_column_part(thd))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -2395,7 +2397,7 @@ bool partition_info::add_column_list_value(THD *thd, Item *item)
|
|||
}
|
||||
thd->where= save_where;
|
||||
|
||||
if (!(col_val= add_column_value()))
|
||||
if (!(col_val= add_column_value(thd)))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -2416,7 +2418,7 @@ bool partition_info::add_column_list_value(THD *thd, Item *item)
|
|||
TRUE Failure
|
||||
FALSE Success
|
||||
*/
|
||||
bool partition_info::init_column_part()
|
||||
bool partition_info::init_column_part(THD *thd)
|
||||
{
|
||||
partition_element *p_elem= curr_part_elem;
|
||||
part_column_list_val *col_val_array;
|
||||
|
@ -2425,8 +2427,8 @@ bool partition_info::init_column_part()
|
|||
DBUG_ENTER("partition_info::init_column_part");
|
||||
|
||||
if (!(list_val=
|
||||
(part_elem_value*)sql_calloc(sizeof(part_elem_value))) ||
|
||||
p_elem->list_val_list.push_back(list_val))
|
||||
(part_elem_value*) thd->calloc(sizeof(part_elem_value))) ||
|
||||
p_elem->list_val_list.push_back(list_val, thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(sizeof(part_elem_value));
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -2436,8 +2438,8 @@ bool partition_info::init_column_part()
|
|||
else
|
||||
loc_num_columns= MAX_REF_PARTS;
|
||||
if (!(col_val_array=
|
||||
(part_column_list_val*)sql_calloc(loc_num_columns *
|
||||
sizeof(part_column_list_val))))
|
||||
(part_column_list_val*) thd->calloc(loc_num_columns *
|
||||
sizeof(part_column_list_val))))
|
||||
{
|
||||
mem_alloc_error(loc_num_columns * sizeof(part_elem_value));
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -2470,7 +2472,8 @@ bool partition_info::init_column_part()
|
|||
TRUE Failure
|
||||
FALSE Success
|
||||
*/
|
||||
int partition_info::reorganize_into_single_field_col_val()
|
||||
|
||||
int partition_info::reorganize_into_single_field_col_val(THD *thd)
|
||||
{
|
||||
part_column_list_val *col_val, *new_col_val;
|
||||
part_elem_value *val= curr_list_val;
|
||||
|
@ -2486,11 +2489,11 @@ int partition_info::reorganize_into_single_field_col_val()
|
|||
{
|
||||
col_val= &val->col_val_array[i];
|
||||
DBUG_ASSERT(part_type == LIST_PARTITION);
|
||||
if (init_column_part())
|
||||
if (init_column_part(thd))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
if (!(new_col_val= add_column_value()))
|
||||
if (!(new_col_val= add_column_value(thd)))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
@ -3103,7 +3106,7 @@ void partition_info::print_debug(const char *str, uint *value)
|
|||
remove code parts using ifdef, but the code parts cannot be called
|
||||
so we simply need to add empty functions to make the linker happy.
|
||||
*/
|
||||
part_column_list_val *partition_info::add_column_value()
|
||||
part_column_list_val *partition_info::add_column_value(THD *thd)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
@ -3118,12 +3121,12 @@ bool partition_info::set_part_expr(char *start_token, Item *item_ptr,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
int partition_info::reorganize_into_single_field_col_val()
|
||||
int partition_info::reorganize_into_single_field_col_val(THD *thd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool partition_info::init_column_part()
|
||||
bool partition_info::init_column_part(THD *thd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -3132,7 +3135,7 @@ bool partition_info::add_column_list_value(THD *thd, Item *item)
|
|||
{
|
||||
return FALSE;
|
||||
}
|
||||
int partition_info::add_max_value()
|
||||
int partition_info::add_max_value(THD *thd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -292,7 +292,7 @@ public:
|
|||
}
|
||||
~partition_info() {}
|
||||
|
||||
partition_info *get_clone();
|
||||
partition_info *get_clone(THD *thd);
|
||||
bool set_named_partition_bitmap(const char *part_name, uint length);
|
||||
bool set_partition_bitmaps(TABLE_LIST *table_list);
|
||||
/* Answers the question if subpartitioning is used for a certain table */
|
||||
|
@ -328,16 +328,16 @@ public:
|
|||
part_elem_value *val,
|
||||
uint part_id);
|
||||
bool fix_parser_data(THD *thd);
|
||||
int add_max_value();
|
||||
int add_max_value(THD *thd);
|
||||
void init_col_val(part_column_list_val *col_val, Item *item);
|
||||
int reorganize_into_single_field_col_val();
|
||||
part_column_list_val *add_column_value();
|
||||
int reorganize_into_single_field_col_val(THD *thd);
|
||||
part_column_list_val *add_column_value(THD *thd);
|
||||
bool set_part_expr(char *start_token, Item *item_ptr,
|
||||
char *end_token, bool is_subpart);
|
||||
static int compare_column_values(const void *a, const void *b);
|
||||
bool set_up_charset_field_preps();
|
||||
bool check_partition_field_length();
|
||||
bool init_column_part();
|
||||
bool init_column_part(THD *thd);
|
||||
bool add_column_list_value(THD *thd, Item *item);
|
||||
void set_show_version_string(String *packet);
|
||||
partition_element *get_part_elem(const char *partition_name,
|
||||
|
|
|
@ -1520,7 +1520,7 @@ bool Protocol_binary::send_out_parameters(List<Item_param> *sp_params)
|
|||
if (!item_param->get_out_param_info())
|
||||
continue; // It's an IN-parameter.
|
||||
|
||||
if (out_param_lst.push_back(item_param))
|
||||
if (out_param_lst.push_back(item_param, thd->mem_root))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -233,17 +233,26 @@ bool show_slave_hosts(THD* thd)
|
|||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("show_slave_hosts");
|
||||
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Server_id", 10,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Host", 20));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Server_id", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Host", 20),
|
||||
thd->mem_root);
|
||||
if (opt_show_slave_auth_info)
|
||||
{
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "User", 20));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Password", 20));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "User", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Password", 20),
|
||||
thd->mem_root);
|
||||
}
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Port", 7, MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Master_id", 10,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Port", 7, MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Master_id", 10, MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
|
|
@ -950,7 +950,7 @@ TABLE *table_def::create_conversion_table(THD *thd, rpl_group_info *rgi,
|
|||
{
|
||||
Create_field *field_def=
|
||||
(Create_field*) alloc_root(thd->mem_root, sizeof(Create_field));
|
||||
if (field_list.push_back(field_def))
|
||||
if (field_list.push_back(field_def, thd->mem_root))
|
||||
DBUG_RETURN(NULL);
|
||||
|
||||
uint decimals= 0;
|
||||
|
|
297
sql/slave.cc
297
sql/slave.cc
|
@ -2520,110 +2520,207 @@ static bool send_show_master_info_header(THD *thd, bool full,
|
|||
|
||||
if (full)
|
||||
{
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Connection_name",
|
||||
MAX_CONNECTION_NAME));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Slave_SQL_State",
|
||||
30));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Connection_name",
|
||||
MAX_CONNECTION_NAME),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Slave_SQL_State", 30),
|
||||
thd->mem_root);
|
||||
}
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Slave_IO_State",
|
||||
30));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_Host",
|
||||
sizeof(mi->host)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_User",
|
||||
sizeof(mi->user)));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Master_Port", 7,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Connect_Retry", 10,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_Log_File",
|
||||
FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Read_Master_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Relay_Log_File",
|
||||
FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Relay_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Relay_Master_Log_File",
|
||||
FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Slave_IO_Running", 3));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Slave_SQL_Running", 3));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Do_DB", 20));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Ignore_DB", 20));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Do_Table", 20));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Ignore_Table",
|
||||
23));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Wild_Do_Table",
|
||||
24));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Wild_Ignore_Table",
|
||||
28));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Last_Errno", 4,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Last_Error", 20));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Skip_Counter", 10,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Exec_Master_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Relay_Log_Space", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Until_Condition", 6));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Until_Log_File", FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Until_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Allowed", 7));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_CA_File",
|
||||
sizeof(mi->ssl_ca)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_CA_Path",
|
||||
sizeof(mi->ssl_capath)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Cert",
|
||||
sizeof(mi->ssl_cert)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Cipher",
|
||||
sizeof(mi->ssl_cipher)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Key",
|
||||
sizeof(mi->ssl_key)));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Seconds_Behind_Master", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd,
|
||||
"Master_SSL_Verify_Server_Cert",
|
||||
3));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Last_IO_Errno", 4,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Last_IO_Error", 20));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Last_SQL_Errno", 4,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Last_SQL_Error", 20));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Ignore_Server_Ids",
|
||||
FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Master_Server_Id",
|
||||
sizeof(ulong),
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Crl",
|
||||
sizeof(mi->ssl_crl)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Crlpath",
|
||||
sizeof(mi->ssl_crlpath)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Using_Gtid",
|
||||
sizeof("Current_Pos")-1));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Gtid_IO_Pos", 30));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Do_Domain_Ids",
|
||||
FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Ignore_Domain_Ids",
|
||||
FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Parallel_Mode",
|
||||
sizeof("conservative")-1));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Slave_IO_State", 30),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_Host", sizeof(mi->host)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_User", sizeof(mi->user)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Master_Port", 7, MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Connect_Retry", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_Log_File", FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Read_Master_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Relay_Log_File", FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Relay_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Relay_Master_Log_File",
|
||||
FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Slave_IO_Running", 3),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Slave_SQL_Running", 3),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Do_DB", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Ignore_DB", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Do_Table", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Ignore_Table", 23),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Wild_Do_Table", 24),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Wild_Ignore_Table",
|
||||
28),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Last_Errno", 4, MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Last_Error", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Skip_Counter", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Exec_Master_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Relay_Log_Space", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Until_Condition", 6),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Until_Log_File", FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Until_Log_Pos", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Allowed", 7),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_CA_File",
|
||||
sizeof(mi->ssl_ca)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_CA_Path",
|
||||
sizeof(mi->ssl_capath)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Cert",
|
||||
sizeof(mi->ssl_cert)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Cipher",
|
||||
sizeof(mi->ssl_cipher)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Key",
|
||||
sizeof(mi->ssl_key)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Seconds_Behind_Master", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Verify_Server_Cert",
|
||||
3),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Last_IO_Errno", 4,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Last_IO_Error", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Last_SQL_Errno", 4,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Last_SQL_Error", 20),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Ignore_Server_Ids",
|
||||
FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Master_Server_Id", sizeof(ulong),
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Crl",
|
||||
sizeof(mi->ssl_crl)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Master_SSL_Crlpath",
|
||||
sizeof(mi->ssl_crlpath)),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Using_Gtid",
|
||||
sizeof("Current_Pos")-1),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Gtid_IO_Pos", 30),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Do_Domain_Ids",
|
||||
FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Replicate_Ignore_Domain_Ids",
|
||||
FN_REFLEN),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Parallel_Mode",
|
||||
sizeof("conservative")-1),
|
||||
thd->mem_root);
|
||||
if (full)
|
||||
{
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Retried_transactions",
|
||||
10, MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Max_relay_log_size",
|
||||
10, MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Executed_log_entries",
|
||||
10, MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Slave_received_heartbeats",
|
||||
10, MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_float(thd, "Slave_heartbeat_period",
|
||||
0.0, 3, 10));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Gtid_Slave_Pos",
|
||||
gtid_pos_length));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Retried_transactions", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Max_relay_log_size", 10,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Executed_log_entries", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Slave_received_heartbeats", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_float(thd, "Slave_heartbeat_period", 0.0, 3, 10),
|
||||
thd->mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Gtid_Slave_Pos",
|
||||
gtid_pos_length),
|
||||
thd->mem_root);
|
||||
}
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
|
|
|
@ -2574,8 +2574,12 @@ sp_head::show_create_routine(THD *thd, int type)
|
|||
|
||||
/* Send header. */
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, col1_caption, NAME_CHAR_LEN));
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "sql_mode", sql_mode.length));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, col1_caption, NAME_CHAR_LEN),
|
||||
thd->mem_root);
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "sql_mode", sql_mode.length),
|
||||
thd->mem_root);
|
||||
|
||||
{
|
||||
/*
|
||||
|
@ -2589,17 +2593,23 @@ sp_head::show_create_routine(THD *thd, int type)
|
|||
|
||||
stmt_fld->maybe_null= TRUE;
|
||||
|
||||
fields.push_back(stmt_fld);
|
||||
fields.push_back(stmt_fld, thd->mem_root);
|
||||
}
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE),
|
||||
thd->mem_root);
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE),
|
||||
thd->mem_root);
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "Database Collation",
|
||||
MY_CS_NAME_SIZE));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Database Collation",
|
||||
MY_CS_NAME_SIZE),
|
||||
thd->mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&fields,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
@ -2782,11 +2792,13 @@ sp_head::show_routine_code(THD *thd)
|
|||
if (check_show_routine_access(thd, this, &full_access) || !full_access)
|
||||
DBUG_RETURN(1);
|
||||
|
||||
field_list.push_back(new (thd->mem_root) Item_uint(thd, "Pos", 9));
|
||||
field_list.push_back(new (thd->mem_root) Item_uint(thd, "Pos", 9),
|
||||
thd->mem_root);
|
||||
// 1024 is for not to confuse old clients
|
||||
field_list.push_back(new (thd->mem_root)
|
||||
Item_empty_string(thd, "Instruction",
|
||||
MY_MAX(buffer.length(), 1024)));
|
||||
MY_MAX(buffer.length(), 1024)),
|
||||
thd->mem_root);
|
||||
if (protocol->send_result_set_metadata(&field_list, Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(1);
|
||||
|
|
|
@ -205,7 +205,7 @@ sp_label *sp_pcontext::push_label(THD *thd, LEX_STRING name, uint ip)
|
|||
if (!label)
|
||||
return NULL;
|
||||
|
||||
m_labels.push_front(label);
|
||||
m_labels.push_front(label, thd->mem_root);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
|
|
@ -7796,9 +7796,10 @@ bool mysql_show_grants(THD *thd, LEX_USER *lex_user)
|
|||
strxmov(buff,"Grants for ",rolename, NullS);
|
||||
else
|
||||
strxmov(buff,"Grants for ",username,"@",hostname, NullS);
|
||||
field_list.push_back(field);
|
||||
field_list.push_back(field, thd->mem_root);
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
{
|
||||
mysql_mutex_unlock(&acl_cache->lock);
|
||||
mysql_rwlock_unlock(&LOCK_grant);
|
||||
|
@ -10158,7 +10159,7 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name,
|
|||
combo->auth= au->auth_string;
|
||||
}
|
||||
|
||||
if (user_list.push_back(combo))
|
||||
if (user_list.push_back(combo, thd->mem_root))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
thd->lex->ssl_type= SSL_TYPE_NOT_SPECIFIED;
|
||||
|
|
|
@ -326,15 +326,20 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||
DBUG_ENTER("mysql_admin_table");
|
||||
DBUG_PRINT("enter", ("extra_open_options: %u", extra_open_options));
|
||||
|
||||
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Table",
|
||||
NAME_CHAR_LEN * 2));
|
||||
field_list.push_back(item= new (thd->mem_root)
|
||||
Item_empty_string(thd, "Table",
|
||||
NAME_CHAR_LEN * 2), thd->mem_root);
|
||||
item->maybe_null = 1;
|
||||
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Op", 10));
|
||||
field_list.push_back(item= new (thd->mem_root)
|
||||
Item_empty_string(thd, "Op", 10), thd->mem_root);
|
||||
item->maybe_null = 1;
|
||||
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Msg_type", 10));
|
||||
field_list.push_back(item= new (thd->mem_root)
|
||||
Item_empty_string(thd, "Msg_type", 10), thd->mem_root);
|
||||
item->maybe_null = 1;
|
||||
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Msg_text",
|
||||
SQL_ADMIN_MSG_TEXT_SIZE));
|
||||
field_list.push_back(item= new (thd->mem_root)
|
||||
Item_empty_string(thd, "Msg_text",
|
||||
SQL_ADMIN_MSG_TEXT_SIZE),
|
||||
thd->mem_root);
|
||||
item->maybe_null = 1;
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
|
|
@ -1188,7 +1188,7 @@ bool analyse::change_columns(THD *thd, List<Item> &field_list)
|
|||
output_str_length));
|
||||
|
||||
for (uint i = 0; i < array_elements(func_items); i++)
|
||||
field_list.push_back(func_items[i]);
|
||||
field_list.push_back(func_items[i], thd->mem_root);
|
||||
result_fields = field_list;
|
||||
return 0;
|
||||
} // analyse::change_columns
|
||||
|
|
|
@ -7442,12 +7442,12 @@ store_natural_using_join_columns(THD *thd, TABLE_LIST *natural_using_join,
|
|||
nj_col_1= it_1.get_natural_column_ref();
|
||||
if (nj_col_1->is_common)
|
||||
{
|
||||
natural_using_join->join_columns->push_back(nj_col_1);
|
||||
natural_using_join->join_columns->push_back(nj_col_1, thd->mem_root);
|
||||
/* Reset the common columns for the next call to mark_common_columns. */
|
||||
nj_col_1->is_common= FALSE;
|
||||
}
|
||||
else
|
||||
non_join_columns->push_back(nj_col_1);
|
||||
non_join_columns->push_back(nj_col_1, thd->mem_root);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -7487,7 +7487,7 @@ store_natural_using_join_columns(THD *thd, TABLE_LIST *natural_using_join,
|
|||
{
|
||||
nj_col_2= it_2.get_natural_column_ref();
|
||||
if (!nj_col_2->is_common)
|
||||
non_join_columns->push_back(nj_col_2);
|
||||
non_join_columns->push_back(nj_col_2, thd->mem_root);
|
||||
else
|
||||
{
|
||||
/* Reset the common columns for the next call to mark_common_columns. */
|
||||
|
@ -8054,7 +8054,7 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
|
|||
{
|
||||
List_iterator_fast <TABLE_LIST> ti(select_lex->leaf_tables_prep);
|
||||
while ((table_list= ti++))
|
||||
leaves.push_back(table_list);
|
||||
leaves.push_back(table_list, thd->mem_root);
|
||||
}
|
||||
|
||||
while ((table_list= ti++))
|
||||
|
|
|
@ -2459,8 +2459,8 @@ void THD::make_explain_json_field_list(List<Item> &field_list, bool is_analyze)
|
|||
Item *item= new (mem_root) Item_empty_string(this, (is_analyze ?
|
||||
"ANALYZE" :
|
||||
"EXPLAIN"),
|
||||
78, system_charset_info);
|
||||
field_list.push_back(item);
|
||||
78, system_charset_info);
|
||||
field_list.push_back(item, mem_root);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2479,68 +2479,77 @@ void THD::make_explain_field_list(List<Item> &field_list, uint8 explain_flags,
|
|||
CHARSET_INFO *cs= system_charset_info;
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_return_int(this, "id", 3,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
MYSQL_TYPE_LONGLONG), mem_root);
|
||||
item->maybe_null= 1;
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(this, "select_type", 19, cs));
|
||||
Item_empty_string(this, "select_type", 19, cs),
|
||||
mem_root);
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_empty_string(this, "table", NAME_CHAR_LEN, cs));
|
||||
Item_empty_string(this, "table", NAME_CHAR_LEN, cs),
|
||||
mem_root);
|
||||
item->maybe_null= 1;
|
||||
if (explain_flags & DESCRIBE_PARTITIONS)
|
||||
{
|
||||
/* Maximum length of string that make_used_partitions_str() can produce */
|
||||
item= new (mem_root) Item_empty_string(this, "partitions",
|
||||
MAX_PARTITIONS * (1 + FN_LEN), cs);
|
||||
field_list.push_back(item);
|
||||
field_list.push_back(item, mem_root);
|
||||
item->maybe_null= 1;
|
||||
}
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_empty_string(this, "type", 10, cs));
|
||||
Item_empty_string(this, "type", 10, cs),
|
||||
mem_root);
|
||||
item->maybe_null= 1;
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_empty_string(this, "possible_keys",
|
||||
NAME_CHAR_LEN*MAX_KEY, cs));
|
||||
NAME_CHAR_LEN*MAX_KEY, cs),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new (mem_root)
|
||||
Item_empty_string(this, "key", NAME_CHAR_LEN, cs));
|
||||
Item_empty_string(this, "key", NAME_CHAR_LEN, cs),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new (mem_root)
|
||||
Item_empty_string(this, "key_len",
|
||||
NAME_CHAR_LEN*MAX_KEY));
|
||||
NAME_CHAR_LEN*MAX_KEY),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new (mem_root)
|
||||
Item_empty_string(this, "ref",
|
||||
NAME_CHAR_LEN*MAX_REF_PARTS,
|
||||
cs));
|
||||
NAME_CHAR_LEN*MAX_REF_PARTS, cs),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_return_int(this, "rows", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
Item_return_int(this, "rows", 10, MYSQL_TYPE_LONGLONG),
|
||||
mem_root);
|
||||
if (is_analyze)
|
||||
{
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_float(this, "r_rows", 0.1234, 10, 4));
|
||||
Item_float(this, "r_rows", 0.1234, 10, 4),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
}
|
||||
|
||||
if (is_analyze || (explain_flags & DESCRIBE_EXTENDED))
|
||||
{
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_float(this, "filtered", 0.1234, 2, 4));
|
||||
Item_float(this, "filtered", 0.1234, 2, 4),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
}
|
||||
|
||||
if (is_analyze)
|
||||
{
|
||||
field_list.push_back(item= new (mem_root)
|
||||
Item_float(this, "r_filtered", 0.1234, 2,
|
||||
4));
|
||||
Item_float(this, "r_filtered", 0.1234, 2, 4),
|
||||
mem_root);
|
||||
item->maybe_null=1;
|
||||
}
|
||||
|
||||
item->maybe_null= 1;
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(this, "Extra", 255, cs));
|
||||
Item_empty_string(this, "Extra", 255, cs),
|
||||
mem_root);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -5316,7 +5316,7 @@ inline bool add_item_to_list(THD *thd, Item *item)
|
|||
|
||||
inline bool add_value_to_list(THD *thd, Item *value)
|
||||
{
|
||||
return thd->lex->value_list.push_back(value);
|
||||
return thd->lex->value_list.push_back(value, thd->mem_root);
|
||||
}
|
||||
|
||||
inline bool add_order_to_list(THD *thd, Item *item, bool asc)
|
||||
|
|
|
@ -815,25 +815,29 @@ bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
|
|||
{
|
||||
List<Item> field_list;
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("mysqld_show_warnings");
|
||||
|
||||
DBUG_ASSERT(thd->get_stmt_da()->is_warning_info_read_only());
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Level", 7));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Code", 4,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Message",
|
||||
MYSQL_ERRMSG_SIZE));
|
||||
|
||||
if (thd->protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
const Sql_condition *err;
|
||||
SELECT_LEX *sel= &thd->lex->select_lex;
|
||||
SELECT_LEX_UNIT *unit= &thd->lex->unit;
|
||||
ulonglong idx= 0;
|
||||
Protocol *protocol=thd->protocol;
|
||||
DBUG_ENTER("mysqld_show_warnings");
|
||||
|
||||
DBUG_ASSERT(thd->get_stmt_da()->is_warning_info_read_only());
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Level", 7),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Code", 4, MYSQL_TYPE_LONG),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Message", MYSQL_ERRMSG_SIZE),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
unit->set_limit(sel);
|
||||
|
||||
|
|
|
@ -204,7 +204,8 @@ int Explain_query::print_explain(select_result_sink *output,
|
|||
}
|
||||
|
||||
|
||||
void Explain_query::print_explain_json(select_result_sink *output, bool is_analyze)
|
||||
void Explain_query::print_explain_json(select_result_sink *output,
|
||||
bool is_analyze)
|
||||
{
|
||||
Json_writer writer;
|
||||
writer.start_object();
|
||||
|
@ -228,7 +229,8 @@ void Explain_query::print_explain_json(select_result_sink *output, bool is_analy
|
|||
List<Item> item_list;
|
||||
String *buf= &writer.output;
|
||||
item_list.push_back(new (thd->mem_root)
|
||||
Item_string(thd, buf->ptr(), buf->length(), cs));
|
||||
Item_string(thd, buf->ptr(), buf->length(), cs),
|
||||
thd->mem_root);
|
||||
output->send_data(item_list);
|
||||
}
|
||||
|
||||
|
@ -260,13 +262,16 @@ bool Explain_query::print_explain_str(THD *thd, String *out_str,
|
|||
|
||||
static void push_str(THD *thd, List<Item> *item_list, const char *str)
|
||||
{
|
||||
item_list->push_back(new (thd->mem_root) Item_string_sys(thd, str));
|
||||
item_list->push_back(new (thd->mem_root) Item_string_sys(thd, str),
|
||||
thd->mem_root);
|
||||
}
|
||||
|
||||
|
||||
static void push_string(THD *thd, List<Item> *item_list, String *str)
|
||||
{
|
||||
item_list->push_back(new (thd->mem_root) Item_string_sys(thd, str->ptr(), str->length()));
|
||||
item_list->push_back(new (thd->mem_root)
|
||||
Item_string_sys(thd, str->ptr(), str->length()),
|
||||
thd->mem_root);
|
||||
}
|
||||
|
||||
static void push_string_list(THD *thd, List<Item> *item_list,
|
||||
|
@ -318,26 +323,31 @@ int print_explain_row(select_result_sink *result,
|
|||
const char *extra)
|
||||
{
|
||||
THD *thd= result->thd;
|
||||
Item *item_null= new (thd->mem_root) Item_null(thd);
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
Item *item_null= new (mem_root) Item_null(thd);
|
||||
List<Item> item_list;
|
||||
Item *item;
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_number));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, select_type));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, table_name));
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_number),
|
||||
mem_root);
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, select_type),
|
||||
mem_root);
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, table_name),
|
||||
mem_root);
|
||||
if (options & DESCRIBE_PARTITIONS)
|
||||
{
|
||||
if (partitions)
|
||||
{
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, partitions));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, partitions),
|
||||
mem_root);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
|
||||
const char *jtype_str= join_type_str[jtype];
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, jtype_str));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, jtype_str),
|
||||
mem_root);
|
||||
|
||||
/* 'possible_keys' */
|
||||
if (possible_keys && !possible_keys->is_empty())
|
||||
|
@ -346,52 +356,55 @@ int print_explain_row(select_result_sink *result,
|
|||
push_string_list(thd, &item_list, *possible_keys, &possible_keys_buf);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* 'index */
|
||||
item= index ? new (mem_root) Item_string_sys(thd, index) : item_null;
|
||||
item_list.push_back(item);
|
||||
item_list.push_back(item, mem_root);
|
||||
|
||||
/* 'key_len */
|
||||
item= key_len ? new (mem_root) Item_string_sys(thd, key_len) : item_null;
|
||||
item_list.push_back(item);
|
||||
item_list.push_back(item, mem_root);
|
||||
|
||||
/* 'ref' */
|
||||
item= ref ? new (mem_root) Item_string_sys(thd, ref) : item_null;
|
||||
item_list.push_back(item);
|
||||
item_list.push_back(item, mem_root);
|
||||
|
||||
/* 'rows' */
|
||||
if (rows)
|
||||
{
|
||||
item_list.push_back(new (mem_root) Item_int(thd, *rows,
|
||||
MY_INT64_NUM_DECIMAL_DIGITS));
|
||||
item_list.push_back(new (mem_root)
|
||||
Item_int(thd, *rows, MY_INT64_NUM_DECIMAL_DIGITS),
|
||||
mem_root);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* 'r_rows' */
|
||||
if (is_analyze)
|
||||
{
|
||||
if (r_rows)
|
||||
item_list.push_back(new (mem_root) Item_float(thd, *r_rows, 2));
|
||||
item_list.push_back(new (mem_root) Item_float(thd, *r_rows, 2),
|
||||
mem_root);
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
|
||||
/* 'filtered' */
|
||||
const double filtered=100.0;
|
||||
if (options & DESCRIBE_EXTENDED || is_analyze)
|
||||
item_list.push_back(new (mem_root) Item_float(thd, filtered, 2));
|
||||
item_list.push_back(new (mem_root) Item_float(thd, filtered, 2), mem_root);
|
||||
|
||||
/* 'r_filtered' */
|
||||
if (is_analyze)
|
||||
item_list.push_back(new (mem_root) Item_float(thd, r_filtered, 2));
|
||||
item_list.push_back(new (mem_root) Item_float(thd, r_filtered, 2),
|
||||
mem_root);
|
||||
|
||||
/* 'Extra' */
|
||||
if (extra)
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, extra));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, extra), mem_root);
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
if (result->send_data(item_list))
|
||||
return 1;
|
||||
|
@ -435,9 +448,8 @@ int Explain_union::print_explain(Explain_query *query,
|
|||
bool is_analyze)
|
||||
{
|
||||
THD *thd= output->thd;
|
||||
//CHARSET_INFO *cs= system_charset_info;
|
||||
char table_name_buffer[SAFE_NAME_LEN];
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
char table_name_buffer[SAFE_NAME_LEN];
|
||||
|
||||
/* print all UNION children, in order */
|
||||
for (int i= 0; i < (int) union_members.elements(); i++)
|
||||
|
@ -454,51 +466,53 @@ int Explain_union::print_explain(Explain_query *query,
|
|||
Item *item_null= new (mem_root) Item_null(thd);
|
||||
|
||||
/* `id` column */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `select_type` column */
|
||||
push_str(thd, &item_list, fake_select_type);
|
||||
|
||||
/* `table` column: something like "<union1,2>" */
|
||||
uint len= make_union_table_name(table_name_buffer);
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, table_name_buffer, len));
|
||||
item_list.push_back(new (mem_root)
|
||||
Item_string_sys(thd, table_name_buffer, len),
|
||||
mem_root);
|
||||
|
||||
/* `partitions` column */
|
||||
if (explain_flags & DESCRIBE_PARTITIONS)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `type` column */
|
||||
push_str(thd, &item_list, join_type_str[JT_ALL]);
|
||||
|
||||
/* `possible_keys` column */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `key` */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `key_len` */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `ref` */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `rows` */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `r_rows` */
|
||||
if (is_analyze)
|
||||
{
|
||||
double avg_rows= fake_select_lex_tracker.get_avg_rows();
|
||||
item_list.push_back(new (mem_root) Item_float(thd, avg_rows, 2));
|
||||
item_list.push_back(new (mem_root) Item_float(thd, avg_rows, 2), mem_root);
|
||||
}
|
||||
|
||||
/* `filtered` */
|
||||
if (explain_flags & DESCRIBE_EXTENDED || is_analyze)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `r_filtered` */
|
||||
if (is_analyze)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `Extra` */
|
||||
StringBuffer<256> extra_buf;
|
||||
|
@ -506,8 +520,10 @@ int Explain_union::print_explain(Explain_query *query,
|
|||
{
|
||||
extra_buf.append(STRING_WITH_LEN("Using filesort"));
|
||||
}
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, extra_buf.ptr(),
|
||||
extra_buf.length()));
|
||||
item_list.push_back(new (mem_root)
|
||||
Item_string_sys(thd, extra_buf.ptr(),
|
||||
extra_buf.length()),
|
||||
mem_root);
|
||||
|
||||
//output->unit.offset_limit_cnt= 0;
|
||||
if (output->send_data(item_list))
|
||||
|
@ -710,25 +726,28 @@ int Explain_select::print_explain(Explain_query *query,
|
|||
List<Item> item_list;
|
||||
Item *item_null= new (mem_root) Item_null(thd);
|
||||
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_id));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, select_type));
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_id),
|
||||
mem_root);
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, select_type),
|
||||
mem_root);
|
||||
for (uint i=0 ; i < 7; i++)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
if (explain_flags & DESCRIBE_PARTITIONS)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* filtered */
|
||||
if (is_analyze || explain_flags & DESCRIBE_EXTENDED)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
if (is_analyze)
|
||||
{
|
||||
/* r_rows, r_filtered */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, message));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, message),
|
||||
mem_root);
|
||||
|
||||
if (output->send_data(item_list))
|
||||
return 1;
|
||||
|
@ -1122,7 +1141,8 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
Item *item_null= new (mem_root) Item_null(thd);
|
||||
|
||||
/* `id` column */
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_id));
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_id),
|
||||
mem_root);
|
||||
|
||||
/* `select_type` column */
|
||||
push_str(thd, &item_list, select_type);
|
||||
|
@ -1138,7 +1158,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
push_string(thd, &item_list, &used_partitions);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
|
||||
/* `type` column */
|
||||
|
@ -1147,7 +1167,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
/* `possible_keys` column */
|
||||
StringBuffer<64> possible_keys_buf;
|
||||
if (possible_keys.is_empty())
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
else
|
||||
push_string_list(thd, &item_list, possible_keys, &possible_keys_buf);
|
||||
|
||||
|
@ -1158,7 +1178,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
if (key_str.length() > 0)
|
||||
push_string(thd, &item_list, &key_str);
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `key_len` */
|
||||
StringBuffer<64> key_len_str;
|
||||
|
@ -1167,7 +1187,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
if (key_len_str.length() > 0)
|
||||
push_string(thd, &item_list, &key_len_str);
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `ref` */
|
||||
StringBuffer<64> ref_list_buf;
|
||||
|
@ -1179,7 +1199,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
push_str(thd, &item_list, "");
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
else
|
||||
push_string_list(thd, &item_list, ref_list, &ref_list_buf);
|
||||
|
@ -1187,23 +1207,26 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
/* `rows` */
|
||||
if (rows_set)
|
||||
{
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (longlong) (ulonglong) rows,
|
||||
MY_INT64_NUM_DECIMAL_DIGITS));
|
||||
item_list.push_back(new (mem_root)
|
||||
Item_int(thd, (longlong) (ulonglong) rows,
|
||||
MY_INT64_NUM_DECIMAL_DIGITS),
|
||||
mem_root);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `r_rows` */
|
||||
if (is_analyze)
|
||||
{
|
||||
if (!tracker.has_scans())
|
||||
{
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
double avg_rows= tracker.get_avg_rows();
|
||||
item_list.push_back(new (mem_root) Item_float(thd, avg_rows, 2));
|
||||
item_list.push_back(new (mem_root) Item_float(thd, avg_rows, 2),
|
||||
mem_root);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1212,10 +1235,11 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
{
|
||||
if (filtered_set)
|
||||
{
|
||||
item_list.push_back(new (mem_root) Item_float(thd, filtered, 2));
|
||||
item_list.push_back(new (mem_root) Item_float(thd, filtered, 2),
|
||||
mem_root);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
|
||||
/* `r_filtered` */
|
||||
|
@ -1223,14 +1247,16 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
{
|
||||
if (!tracker.has_scans())
|
||||
{
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
double r_filtered= tracker.get_filtered_after_where();
|
||||
if (bka_type.is_using_jbuf())
|
||||
r_filtered *= jbuf_tracker.get_filtered_after_where();
|
||||
item_list.push_back(new (mem_root) Item_float(thd, r_filtered * 100.0, 2));
|
||||
item_list.push_back(new (mem_root)
|
||||
Item_float(thd, r_filtered * 100.0, 2),
|
||||
mem_root);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1264,8 +1290,10 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
|
|||
extra_buf.append(STRING_WITH_LEN("Using filesort"));
|
||||
}
|
||||
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, extra_buf.ptr(),
|
||||
extra_buf.length()));
|
||||
item_list.push_back(new (mem_root)
|
||||
Item_string_sys(thd, extra_buf.ptr(),
|
||||
extra_buf.length()),
|
||||
mem_root);
|
||||
|
||||
if (output->send_data(item_list))
|
||||
return 1;
|
||||
|
|
|
@ -151,10 +151,10 @@ void memorize_variant_topic(THD *thd, TABLE *topics, int count,
|
|||
else
|
||||
{
|
||||
if (count == 1)
|
||||
names->push_back(name);
|
||||
names->push_back(name, thd->mem_root);
|
||||
String *new_name= new (thd->mem_root) String;
|
||||
get_field(mem_root,find_fields[help_topic_name].field,new_name);
|
||||
names->push_back(new_name);
|
||||
names->push_back(new_name, thd->mem_root);
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -380,7 +380,7 @@ int search_categories(THD *thd, TABLE *categories,
|
|||
get_field(thd->mem_root,pfname,lname);
|
||||
if (++count == 1 && res_id)
|
||||
*res_id= (int16) pcat_id->val_int();
|
||||
names->push_back(lname);
|
||||
names->push_back(lname, thd->mem_root);
|
||||
}
|
||||
end_read_record(&read_record_info);
|
||||
|
||||
|
@ -415,7 +415,7 @@ void get_all_items_for_category(THD *thd, TABLE *items, Field *pfname,
|
|||
continue;
|
||||
String *name= new (thd->mem_root) String();
|
||||
get_field(thd->mem_root,pfname,name);
|
||||
res->push_back(name);
|
||||
res->push_back(name, thd->mem_root);
|
||||
}
|
||||
end_read_record(&read_record_info);
|
||||
|
||||
|
@ -454,9 +454,12 @@ int send_answer_1(Protocol *protocol, String *s1, String *s2, String *s3)
|
|||
DBUG_ENTER("send_answer_1");
|
||||
|
||||
List<Item> field_list;
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "name", 64));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "description", 1000));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "example", 1000));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "name", 64),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "description", 1000),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "example", 1000),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
@ -500,11 +503,17 @@ int send_header_2(Protocol *protocol, bool for_category)
|
|||
DBUG_ENTER("send_header_2");
|
||||
List<Item> field_list;
|
||||
if (for_category)
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "source_category_name",
|
||||
64));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "name", 64));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "is_it_category", 1));
|
||||
DBUG_RETURN(protocol->send_result_set_metadata(&field_list, Protocol::SEND_NUM_ROWS |
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "source_category_name", 64),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "name", 64),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "is_it_category", 1),
|
||||
mem_root);
|
||||
DBUG_RETURN(protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF));
|
||||
}
|
||||
|
||||
|
|
|
@ -3957,7 +3957,7 @@ static TABLE *create_table_from_items(THD *thd,
|
|||
DBUG_RETURN(0);
|
||||
if (item->maybe_null)
|
||||
cr_field->flags &= ~NOT_NULL_FLAG;
|
||||
alter_info->create_list.push_back(cr_field);
|
||||
alter_info->create_list.push_back(cr_field, thd->mem_root);
|
||||
}
|
||||
|
||||
DEBUG_SYNC(thd,"create_table_select_before_create");
|
||||
|
|
|
@ -2334,9 +2334,9 @@ bool st_select_lex::add_group_to_list(THD *thd, Item *item, bool asc)
|
|||
}
|
||||
|
||||
|
||||
bool st_select_lex::add_ftfunc_to_list(Item_func_match *func)
|
||||
bool st_select_lex::add_ftfunc_to_list(THD *thd, Item_func_match *func)
|
||||
{
|
||||
return !func || ftfunc_list->push_back(func); // end of memory?
|
||||
return !func || ftfunc_list->push_back(func, thd->mem_root); // end of memory?
|
||||
}
|
||||
|
||||
|
||||
|
@ -3459,7 +3459,7 @@ void st_select_lex::alloc_index_hints (THD *thd)
|
|||
*/
|
||||
bool st_select_lex::add_index_hint (THD *thd, char *str, uint length)
|
||||
{
|
||||
return index_hints->push_front (new (thd->mem_root)
|
||||
return index_hints->push_front(new (thd->mem_root)
|
||||
Index_hint(current_index_hint_type,
|
||||
current_index_hint_clause,
|
||||
str, length), thd->mem_root);
|
||||
|
@ -3800,7 +3800,7 @@ bool SELECT_LEX::merge_subquery(THD *thd, TABLE_LIST *derived,
|
|||
Item_in_subselect *in_subq;
|
||||
while ((in_subq= li++))
|
||||
{
|
||||
sj_subselects.push_back(in_subq);
|
||||
sj_subselects.push_back(in_subq, thd->mem_root);
|
||||
if (in_subq->emb_on_expr_nest == NO_JOIN_NEST)
|
||||
in_subq->emb_on_expr_nest= derived;
|
||||
}
|
||||
|
|
|
@ -926,7 +926,7 @@ public:
|
|||
|
||||
bool add_item_to_list(THD *thd, Item *item);
|
||||
bool add_group_to_list(THD *thd, Item *item, bool asc);
|
||||
bool add_ftfunc_to_list(Item_func_match *func);
|
||||
bool add_ftfunc_to_list(THD *thd, Item_func_match *func);
|
||||
bool add_order_to_list(THD *thd, Item *item, bool asc);
|
||||
bool add_gorder_to_list(THD *thd, Item *item, bool asc);
|
||||
TABLE_LIST* add_table_to_list(THD *thd, Table_ident *table,
|
||||
|
|
|
@ -99,7 +99,7 @@ public:
|
|||
/* load xml */
|
||||
List<XML_TAG> taglist;
|
||||
int read_value(int delim, String *val);
|
||||
int read_xml();
|
||||
int read_xml(THD *thd);
|
||||
int clear_level(int level);
|
||||
|
||||
my_off_t file_length() { return cache.end_of_file; }
|
||||
|
@ -270,7 +270,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||
Item *item;
|
||||
if (!(item= field_iterator.create_item(thd)))
|
||||
DBUG_RETURN(TRUE);
|
||||
fields_vars.push_back(item->real_item());
|
||||
fields_vars.push_back(item->real_item(), thd->mem_root);
|
||||
}
|
||||
bitmap_set_all(table->write_set);
|
||||
/*
|
||||
|
@ -1151,7 +1151,7 @@ read_xml_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
|
|||
}
|
||||
|
||||
// read row tag and save values into tag list
|
||||
if (read_info.read_xml())
|
||||
if (read_info.read_xml(thd))
|
||||
break;
|
||||
|
||||
List_iterator_fast<XML_TAG> xmlit(read_info.taglist);
|
||||
|
@ -1875,7 +1875,7 @@ int READ_INFO::read_value(int delim, String *val)
|
|||
tags and attributes are stored in taglist
|
||||
when tag set in ROWS IDENTIFIED BY is closed, we are ready and return
|
||||
*/
|
||||
int READ_INFO::read_xml()
|
||||
int READ_INFO::read_xml(THD *thd)
|
||||
{
|
||||
DBUG_ENTER("READ_INFO::read_xml");
|
||||
int chr, chr2, chr3;
|
||||
|
@ -1973,11 +1973,13 @@ int READ_INFO::read_xml()
|
|||
goto found_eof;
|
||||
|
||||
/* save value to list */
|
||||
if(tag.length() > 0 && value.length() > 0)
|
||||
if (tag.length() > 0 && value.length() > 0)
|
||||
{
|
||||
DBUG_PRINT("read_xml", ("lev:%i tag:%s val:%s",
|
||||
level,tag.c_ptr_safe(), value.c_ptr_safe()));
|
||||
taglist.push_front( new XML_TAG(level, tag, value));
|
||||
XML_TAG *tmp= new XML_TAG(level, tag, value);
|
||||
if (!tmp || taglist.push_front(tmp, thd->mem_root))
|
||||
DBUG_RETURN(1); // End of memory
|
||||
}
|
||||
tag.length(0);
|
||||
value.length(0);
|
||||
|
@ -2037,13 +2039,15 @@ int READ_INFO::read_xml()
|
|||
}
|
||||
|
||||
chr= read_value(delim, &value);
|
||||
if(attribute.length() > 0 && value.length() > 0)
|
||||
if (attribute.length() > 0 && value.length() > 0)
|
||||
{
|
||||
DBUG_PRINT("read_xml", ("lev:%i att:%s val:%s\n",
|
||||
level + 1,
|
||||
attribute.c_ptr_safe(),
|
||||
value.c_ptr_safe()));
|
||||
taglist.push_front(new XML_TAG(level + 1, attribute, value));
|
||||
XML_TAG *tmp= new XML_TAG(level + 1, attribute, value);
|
||||
if (!tmp || taglist.push_front(tmp, thd->mem_root))
|
||||
DBUG_RETURN(1); // End of memory
|
||||
}
|
||||
attribute.length(0);
|
||||
value.length(0);
|
||||
|
|
|
@ -2754,7 +2754,7 @@ mysql_execute_command(THD *thd)
|
|||
}
|
||||
}
|
||||
DBUG_ASSERT(o);
|
||||
lex->old_var_list.push_back(o);
|
||||
lex->old_var_list.push_back(o, thd->mem_root);
|
||||
}
|
||||
lex->reset_arena_for_set_stmt(&backup);
|
||||
if (lex->old_var_list.is_empty())
|
||||
|
@ -3273,7 +3273,7 @@ mysql_execute_command(THD *thd)
|
|||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
{
|
||||
partition_info *part_info= thd->lex->part_info;
|
||||
if (part_info && !(part_info= thd->lex->part_info->get_clone()))
|
||||
if (part_info && !(part_info= thd->lex->part_info->get_clone(thd)))
|
||||
{
|
||||
res= -1;
|
||||
goto end_with_restore_list;
|
||||
|
@ -7551,7 +7551,7 @@ bool st_select_lex::init_nested_join(THD *thd)
|
|||
nested_join= ptr->nested_join=
|
||||
((NESTED_JOIN*) ((uchar*) ptr + ALIGN_SIZE(sizeof(TABLE_LIST))));
|
||||
|
||||
join_list->push_front(ptr);
|
||||
join_list->push_front(ptr, thd->mem_root);
|
||||
ptr->embedding= embedding;
|
||||
ptr->join_list= join_list;
|
||||
ptr->alias= (char*) "(nested_join)";
|
||||
|
@ -7593,7 +7593,7 @@ TABLE_LIST *st_select_lex::end_nested_join(THD *thd)
|
|||
join_list->pop();
|
||||
embedded->join_list= join_list;
|
||||
embedded->embedding= embedding;
|
||||
join_list->push_front(embedded);
|
||||
join_list->push_front(embedded, thd->mem_root);
|
||||
ptr= embedded;
|
||||
embedded->lifted= 1;
|
||||
}
|
||||
|
@ -7657,7 +7657,7 @@ TABLE_LIST *st_select_lex::nest_last_join(THD *thd)
|
|||
ptr->join_using_fields= prev_join_using;
|
||||
}
|
||||
}
|
||||
join_list->push_front(ptr);
|
||||
join_list->push_front(ptr, thd->mem_root);
|
||||
nested_join->used_tables= nested_join->not_null_tables= (table_map) 0;
|
||||
DBUG_RETURN(ptr);
|
||||
}
|
||||
|
@ -7724,8 +7724,8 @@ TABLE_LIST *st_select_lex::convert_right_join()
|
|||
TABLE_LIST *tab1= join_list->pop();
|
||||
DBUG_ENTER("convert_right_join");
|
||||
|
||||
join_list->push_front(tab2);
|
||||
join_list->push_front(tab1);
|
||||
join_list->push_front(tab2, parent_lex->thd->mem_root);
|
||||
join_list->push_front(tab1, parent_lex->thd->mem_root);
|
||||
tab1->outer_join|= JOIN_TYPE_RIGHT;
|
||||
|
||||
DBUG_RETURN(tab1);
|
||||
|
|
|
@ -4724,7 +4724,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
thd->work_part_info= thd->lex->part_info;
|
||||
|
||||
if (thd->work_part_info &&
|
||||
!(thd->work_part_info= thd->lex->part_info->get_clone()))
|
||||
!(thd->work_part_info= thd->lex->part_info->get_clone(thd)))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/* ALTER_ADMIN_PARTITION is handled in mysql_admin_table */
|
||||
|
@ -4804,7 +4804,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
Create copy of partition_info to avoid modifying original
|
||||
TABLE::part_info, to keep it safe for later use.
|
||||
*/
|
||||
if (!(tab_part_info= tab_part_info->get_clone()))
|
||||
if (!(tab_part_info= tab_part_info->get_clone(thd)))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
|
@ -4855,7 +4855,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
we read data from old version of table using this TABLE object
|
||||
while copying them to new version of table.
|
||||
*/
|
||||
if (!(tab_part_info= tab_part_info->get_clone()))
|
||||
if (!(tab_part_info= tab_part_info->get_clone(thd)))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
DBUG_PRINT("info", ("*fast_alter_table flags: 0x%x", flags));
|
||||
|
@ -5152,7 +5152,7 @@ that are reorganised.
|
|||
partition_element *part_elem= alt_it++;
|
||||
if (*fast_alter_table)
|
||||
part_elem->part_state= PART_TO_BE_ADDED;
|
||||
if (tab_part_info->partitions.push_back(part_elem))
|
||||
if (tab_part_info->partitions.push_back(part_elem, thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
goto err;
|
||||
|
@ -5459,7 +5459,8 @@ the generated partition syntax in a correct manner.
|
|||
else
|
||||
tab_max_range= part_elem->range_value;
|
||||
if (*fast_alter_table &&
|
||||
tab_part_info->temp_partitions.push_back(part_elem))
|
||||
tab_part_info->temp_partitions.push_back(part_elem,
|
||||
thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
goto err;
|
||||
|
@ -5643,7 +5644,7 @@ the generated partition syntax in a correct manner.
|
|||
|
||||
Create a copy of TABLE::part_info to be able to modify it freely.
|
||||
*/
|
||||
if (!(tab_part_info= tab_part_info->get_clone()))
|
||||
if (!(tab_part_info= tab_part_info->get_clone(thd)))
|
||||
DBUG_RETURN(TRUE);
|
||||
thd->work_part_info= tab_part_info;
|
||||
if (create_info->used_fields & HA_CREATE_USED_ENGINE &&
|
||||
|
@ -6634,7 +6635,7 @@ void handle_alter_part_error(ALTER_PARTITION_PARAM_TYPE *lpt,
|
|||
}
|
||||
}
|
||||
/* Ensure the share is destroyed and reopened. */
|
||||
part_info= lpt->part_info->get_clone();
|
||||
part_info= lpt->part_info->get_clone(thd);
|
||||
close_all_tables_for_name(thd, table->s, HA_EXTRA_NOT_USED, NULL);
|
||||
}
|
||||
else
|
||||
|
@ -6652,7 +6653,7 @@ err_exclusive_lock:
|
|||
the table cache.
|
||||
*/
|
||||
mysql_lock_remove(thd, thd->lock, table);
|
||||
part_info= lpt->part_info->get_clone();
|
||||
part_info= lpt->part_info->get_clone(thd);
|
||||
close_thread_table(thd, &thd->open_tables);
|
||||
lpt->table_list->table= NULL;
|
||||
}
|
||||
|
|
|
@ -805,7 +805,7 @@ bool Sql_cmd_alter_table_truncate_partition::execute(THD *thd)
|
|||
String(partition_name, system_charset_info);
|
||||
if (!str_partition_name)
|
||||
DBUG_RETURN(true);
|
||||
partition_names_list.push_back(str_partition_name);
|
||||
partition_names_list.push_back(str_partition_name, thd->mem_root);
|
||||
}
|
||||
first_table->partition_names= &partition_names_list;
|
||||
if (first_table->table->part_info->set_partition_bitmaps(first_table))
|
||||
|
|
|
@ -386,30 +386,35 @@ void PROFILING::finish_current_query_impl()
|
|||
|
||||
bool PROFILING::show_profiles()
|
||||
{
|
||||
DBUG_ENTER("PROFILING::show_profiles");
|
||||
QUERY_PROFILE *prof;
|
||||
List<Item> field_list;
|
||||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Query_ID", 10,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Duration",
|
||||
TIME_FLOAT_DIGITS - 1,
|
||||
MYSQL_TYPE_DOUBLE));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Query", 40));
|
||||
|
||||
if (thd->protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
SELECT_LEX *sel= &thd->lex->select_lex;
|
||||
SELECT_LEX_UNIT *unit= &thd->lex->unit;
|
||||
ha_rows idx= 0;
|
||||
Protocol *protocol= thd->protocol;
|
||||
void *iterator;
|
||||
DBUG_ENTER("PROFILING::show_profiles");
|
||||
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Query_ID", 10,
|
||||
MYSQL_TYPE_LONG),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Duration",
|
||||
TIME_FLOAT_DIGITS - 1,
|
||||
MYSQL_TYPE_DOUBLE),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Query", 40),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
unit->set_limit(sel);
|
||||
|
||||
void *iterator;
|
||||
for (iterator= history.new_iterator();
|
||||
iterator != NULL;
|
||||
iterator= history.iterator_next(iterator))
|
||||
|
|
|
@ -4004,11 +4004,19 @@ bool show_binlog_info(THD* thd)
|
|||
DBUG_ENTER("show_binlog_info");
|
||||
|
||||
List<Item> field_list;
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "File", FN_REFLEN));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "Position", 20,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Binlog_Do_DB", 255));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Binlog_Ignore_DB", 255));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "File", FN_REFLEN),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "Position", 20,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Binlog_Do_DB", 255),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Binlog_Ignore_DB", 255),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
@ -4060,9 +4068,13 @@ bool show_binlogs(THD* thd)
|
|||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Log_name", 255));
|
||||
field_list.push_back(new (mem_root) Item_return_int(thd, "File_size", 20,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Log_name", 255),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_return_int(thd, "File_size", 20,
|
||||
MYSQL_TYPE_LONGLONG),
|
||||
mem_root);
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
|
|
@ -481,7 +481,7 @@ fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select,
|
|||
int el= all_fields.elements;
|
||||
ref_pointer_array[el]= item;
|
||||
/* Add the field item to the select list of the current select. */
|
||||
all_fields.push_front(item);
|
||||
all_fields.push_front(item, thd->mem_root);
|
||||
/*
|
||||
If it's needed reset each Item_ref item that refers this field with
|
||||
a new reference taken from ref_pointer_array.
|
||||
|
@ -895,7 +895,7 @@ JOIN::prepare(Item ***rref_pointer_array,
|
|||
Item_field *field= new (thd->mem_root) Item_field(thd, *(Item_field**)ord->item);
|
||||
int el= all_fields.elements;
|
||||
ref_pointer_array[el]= field;
|
||||
all_fields.push_front(field);
|
||||
all_fields.push_front(field, thd->mem_root);
|
||||
ord->item= ref_pointer_array + el;
|
||||
}
|
||||
}
|
||||
|
@ -3903,7 +3903,8 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
|
|||
if (!join->cond_equal)
|
||||
join->cond_equal= new COND_EQUAL;
|
||||
join->cond_equal->current_level.empty();
|
||||
join->cond_equal->current_level.push_back((Item_equal*) conds);
|
||||
join->cond_equal->current_level.push_back((Item_equal*) conds,
|
||||
join->thd->mem_root);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5567,7 +5568,7 @@ is_indexed_agg_distinct(JOIN *join, List<Item_field> *out_args)
|
|||
|
||||
Item_field* item= static_cast<Item_field*>(expr->real_item());
|
||||
if (out_args)
|
||||
out_args->push_back(item);
|
||||
out_args->push_back(item, join->thd->mem_root);
|
||||
|
||||
cur_aggdistinct_fields.set_bit(item->field->field_index);
|
||||
result= true;
|
||||
|
@ -8569,7 +8570,7 @@ get_best_combination(JOIN *join)
|
|||
DBUG_RETURN(TRUE);
|
||||
jt_range->start= jt;
|
||||
jt_range->end= jt + sjm->tables;
|
||||
join->join_tab_ranges.push_back(jt_range);
|
||||
join->join_tab_ranges.push_back(jt_range, join->thd->mem_root);
|
||||
j->bush_children= jt_range;
|
||||
sjm_nest_end= jt + sjm->tables;
|
||||
sjm_nest_root= j;
|
||||
|
@ -11033,7 +11034,7 @@ void JOIN_TAB::remove_redundant_bnl_scan_conds()
|
|||
}
|
||||
}
|
||||
if (!found_cond)
|
||||
reduced_select_cond->add(pushed_item);
|
||||
reduced_select_cond->add(pushed_item, join->thd->mem_root);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -11041,7 +11042,7 @@ void JOIN_TAB::remove_redundant_bnl_scan_conds()
|
|||
while ((pushed_item= pushed_cond_li++))
|
||||
{
|
||||
if (!pushed_item->eq(cache_select->cond, 0))
|
||||
reduced_select_cond->add(pushed_item);
|
||||
reduced_select_cond->add(pushed_item, join->thd->mem_root);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12182,7 +12183,8 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond,
|
|||
Delay the evaluation of constant ORDER and/or GROUP expressions that
|
||||
contain subqueries until the execution phase.
|
||||
*/
|
||||
join->exec_const_order_group_cond.push_back(order->item[0]);
|
||||
join->exec_const_order_group_cond.push_back(order->item[0],
|
||||
join->thd->mem_root);
|
||||
}
|
||||
DBUG_PRINT("info",("removing: %s", order->item[0]->full_name()));
|
||||
continue;
|
||||
|
@ -12570,21 +12572,21 @@ static bool check_simple_equality(THD *thd, Item *left_item, Item *right_item,
|
|||
/* left_item_equal of an upper level contains left_item */
|
||||
left_item_equal= new (thd->mem_root) Item_equal(thd, left_item_equal);
|
||||
left_item_equal->set_context_field(((Item_field*) left_item));
|
||||
cond_equal->current_level.push_back(left_item_equal);
|
||||
cond_equal->current_level.push_back(left_item_equal, thd->mem_root);
|
||||
}
|
||||
if (right_copyfl)
|
||||
{
|
||||
/* right_item_equal of an upper level contains right_item */
|
||||
right_item_equal= new (thd->mem_root) Item_equal(thd, right_item_equal);
|
||||
right_item_equal->set_context_field(((Item_field*) right_item));
|
||||
cond_equal->current_level.push_back(right_item_equal);
|
||||
cond_equal->current_level.push_back(right_item_equal, thd->mem_root);
|
||||
}
|
||||
|
||||
if (left_item_equal)
|
||||
{
|
||||
/* left item was found in the current or one of the upper levels */
|
||||
if (! right_item_equal)
|
||||
left_item_equal->add(orig_right_item);
|
||||
left_item_equal->add(orig_right_item, thd->mem_root);
|
||||
else
|
||||
{
|
||||
/* Merge two multiple equalities forming a new one */
|
||||
|
@ -12599,7 +12601,7 @@ static bool check_simple_equality(THD *thd, Item *left_item, Item *right_item,
|
|||
{
|
||||
/* left item was not found neither the current nor in upper levels */
|
||||
if (right_item_equal)
|
||||
right_item_equal->add(orig_left_item);
|
||||
right_item_equal->add(orig_left_item, thd->mem_root);
|
||||
else
|
||||
{
|
||||
/* None of the fields was found in multiple equalities */
|
||||
|
@ -12608,7 +12610,7 @@ static bool check_simple_equality(THD *thd, Item *left_item, Item *right_item,
|
|||
orig_right_item,
|
||||
FALSE);
|
||||
item_equal->set_context_field((Item_field*)left_item);
|
||||
cond_equal->current_level.push_back(item_equal);
|
||||
cond_equal->current_level.push_back(item_equal, thd->mem_root);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -12664,7 +12666,7 @@ static bool check_simple_equality(THD *thd, Item *left_item, Item *right_item,
|
|||
if (copyfl)
|
||||
{
|
||||
item_equal= new (thd->mem_root) Item_equal(thd, item_equal);
|
||||
cond_equal->current_level.push_back(item_equal);
|
||||
cond_equal->current_level.push_back(item_equal, thd->mem_root);
|
||||
item_equal->set_context_field(field_item);
|
||||
}
|
||||
if (item_equal)
|
||||
|
@ -12746,7 +12748,7 @@ static bool check_row_equality(THD *thd, Item *left_row, Item_row *right_row,
|
|||
eq_item->set_cmp_func_and_arg_cmp_context())
|
||||
return FALSE;
|
||||
eq_item->quick_fix_field();
|
||||
eq_list->push_back(eq_item);
|
||||
eq_list->push_back(eq_item, thd->mem_root);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -13493,7 +13495,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
|
|||
|
||||
if (produce_equality)
|
||||
{
|
||||
if (eq_item && eq_list.push_back(eq_item))
|
||||
if (eq_item && eq_list.push_back(eq_item, thd->mem_root))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
@ -13538,7 +13540,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
|
|||
- if we have only one condition to return, we don't create an Item_cond_and
|
||||
*/
|
||||
|
||||
if (eq_item && eq_list.push_back(eq_item))
|
||||
if (eq_item && eq_list.push_back(eq_item, thd->mem_root))
|
||||
return 0;
|
||||
COND *res= 0;
|
||||
switch (eq_list.elements)
|
||||
|
@ -13562,7 +13564,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
|
|||
res= cond;
|
||||
((Item_cond *) res)->add_at_end(&eq_list);
|
||||
}
|
||||
else if (eq_list.push_front(cond))
|
||||
else if (eq_list.push_front(cond, thd->mem_root))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -13715,7 +13717,7 @@ static COND* substitute_for_best_equal_field(THD *thd, JOIN_TAB *context_tab,
|
|||
{
|
||||
/* Do not add an equality condition if it's always true */
|
||||
if (eq_cond->type() != Item::INT_ITEM &&
|
||||
cond_list->push_front(eq_cond))
|
||||
cond_list->push_front(eq_cond, thd->mem_root))
|
||||
eq_cond= 0;
|
||||
}
|
||||
}
|
||||
|
@ -14332,7 +14334,7 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top,
|
|||
If this is a semi-join that is not contained within another semi-join,
|
||||
leave it intact (otherwise it is flattened)
|
||||
*/
|
||||
join->select_lex->sj_nests.push_back(table);
|
||||
join->select_lex->sj_nests.push_back(table, join->thd->mem_root);
|
||||
|
||||
/*
|
||||
Also, walk through semi-join children and mark those that are now
|
||||
|
@ -14357,7 +14359,7 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top,
|
|||
if (!tbl->embedding && !tbl->on_expr && tbl->table)
|
||||
tbl->table->maybe_null= FALSE;
|
||||
tbl->join_list= table->join_list;
|
||||
repl_list.push_back(tbl);
|
||||
repl_list.push_back(tbl, join->thd->mem_root);
|
||||
tbl->dep_tables|= table->dep_tables;
|
||||
}
|
||||
li.replace(repl_list);
|
||||
|
@ -15146,7 +15148,7 @@ Item_cond::remove_eq_conds(THD *thd, Item::cond_result *cond_value,
|
|||
Item_func::MULT_EQUAL_FUNC)
|
||||
{
|
||||
li.remove();
|
||||
new_equalities.push_back((Item_equal *) new_item);
|
||||
new_equalities.push_back((Item_equal *) new_item, thd->mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -19857,7 +19859,7 @@ make_cond_for_table_from_pred(THD *thd, Item *root_cond, Item *cond,
|
|||
exclude_expensive_cond,
|
||||
retain_ref_cond);
|
||||
if (fix)
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
}
|
||||
switch (new_cond->argument_list()->elements) {
|
||||
case 0:
|
||||
|
@ -19893,7 +19895,7 @@ make_cond_for_table_from_pred(THD *thd, Item *root_cond, Item *cond,
|
|||
retain_ref_cond);
|
||||
if (!fix)
|
||||
return (COND*) 0; // Always true
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
}
|
||||
/*
|
||||
Call fix_fields to propagate all properties of the children to
|
||||
|
@ -19984,7 +19986,7 @@ make_cond_after_sjm(THD *thd, Item *root_cond, Item *cond, table_map tables,
|
|||
Item *fix=make_cond_after_sjm(thd, root_cond, item, tables, sjm_tables,
|
||||
inside_or_clause);
|
||||
if (fix)
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
}
|
||||
switch (new_cond->argument_list()->elements) {
|
||||
case 0:
|
||||
|
@ -20016,7 +20018,7 @@ make_cond_after_sjm(THD *thd, Item *root_cond, Item *cond, table_map tables,
|
|||
/*inside_or_clause= */TRUE);
|
||||
if (!fix)
|
||||
return (COND*) 0; // Always true
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
}
|
||||
/*
|
||||
Item_cond_or do not need fix_fields for execution, its parameters
|
||||
|
@ -21773,7 +21775,8 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
|
|||
return TRUE; /* Wrong field. */
|
||||
|
||||
uint el= all_fields.elements;
|
||||
all_fields.push_front(order_item); /* Add new field to field list. */
|
||||
/* Add new field to field list. */
|
||||
all_fields.push_front(order_item, thd->mem_root);
|
||||
ref_pointer_array[el]= order_item;
|
||||
/*
|
||||
If the order_item is a SUM_FUNC_ITEM, when fix_fields is called
|
||||
|
@ -21959,7 +21962,7 @@ setup_new_fields(THD *thd, List<Item> &fields,
|
|||
thd->where="procedure list";
|
||||
if ((*new_field->item)->fix_fields(thd, new_field->item))
|
||||
DBUG_RETURN(1); /* purecov: inspected */
|
||||
all_fields.push_front(*new_field->item);
|
||||
all_fields.push_front(*new_field->item, thd->mem_root);
|
||||
new_field->item=all_fields.head_ref();
|
||||
}
|
||||
}
|
||||
|
@ -22033,7 +22036,7 @@ create_distinct_group(THD *thd, Item **ref_pointer_array,
|
|||
Item_field *new_item= new (thd->mem_root) Item_field(thd, (Item_field*)item);
|
||||
int el= all_fields.elements;
|
||||
orig_ref_pointer_array[el]= new_item;
|
||||
all_fields.push_front(new_item);
|
||||
all_fields.push_front(new_item, thd->mem_root);
|
||||
ord->item= orig_ref_pointer_array + el;
|
||||
}
|
||||
else
|
||||
|
@ -22464,7 +22467,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
|||
copy_funcs
|
||||
(to see full test case look at having.test, BUG #4358)
|
||||
*/
|
||||
if (param->copy_funcs.push_front(pos))
|
||||
if (param->copy_funcs.push_front(pos, thd->mem_root))
|
||||
goto err;
|
||||
}
|
||||
else
|
||||
|
@ -22512,10 +22515,10 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
|||
goto err;
|
||||
if (i < border) // HAVING, ORDER and GROUP BY
|
||||
{
|
||||
if (extra_funcs.push_back(pos))
|
||||
if (extra_funcs.push_back(pos, thd->mem_root))
|
||||
goto err;
|
||||
}
|
||||
else if (param->copy_funcs.push_back(pos))
|
||||
else if (param->copy_funcs.push_back(pos, thd->mem_root))
|
||||
goto err;
|
||||
}
|
||||
res_all_fields.push_back(pos, thd->mem_root);
|
||||
|
@ -22716,9 +22719,10 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
|
|||
if (field != NULL)
|
||||
{
|
||||
/*
|
||||
Replace "@:=<expression>" with "@:=<tmp table column>". Otherwise, we
|
||||
would re-evaluate <expression>, and if expression were a subquery, this
|
||||
would access already-unlocked tables.
|
||||
Replace "@:=<expression>" with "@:=<tmp table
|
||||
column>". Otherwise, we would re-evaluate <expression>, and
|
||||
if expression were a subquery, this would access
|
||||
already-unlocked tables.
|
||||
*/
|
||||
Item_func_set_user_var* suv=
|
||||
new (thd->mem_root) Item_func_set_user_var(thd, (Item_func_set_user_var*) item);
|
||||
|
@ -22726,14 +22730,15 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
|
|||
if (!suv || !new_field)
|
||||
DBUG_RETURN(true); // Fatal error
|
||||
/*
|
||||
We are replacing the argument of Item_func_set_user_var after its value
|
||||
has been read. The argument's null_value should be set by now, so we
|
||||
must set it explicitly for the replacement argument since the null_value
|
||||
may be read without any preceding call to val_*().
|
||||
We are replacing the argument of Item_func_set_user_var
|
||||
after its value has been read. The argument's null_value
|
||||
should be set by now, so we must set it explicitly for the
|
||||
replacement argument since the null_value may be read
|
||||
without any preceding call to val_*().
|
||||
*/
|
||||
new_field->update_null_value();
|
||||
List<Item> list;
|
||||
list.push_back(new_field);
|
||||
list.push_back(new_field, thd->mem_root);
|
||||
suv->set_arguments(list);
|
||||
item_field= suv;
|
||||
}
|
||||
|
@ -22818,7 +22823,8 @@ change_refs_to_tmp_fields(THD *thd, Item **ref_pointer_array,
|
|||
uint i, border= all_fields.elements - elements;
|
||||
for (i= 0; (item= it++); i++)
|
||||
{
|
||||
res_all_fields.push_back(new_item= item->get_tmp_table_item(thd));
|
||||
res_all_fields.push_back(new_item= item->get_tmp_table_item(thd),
|
||||
thd->mem_root);
|
||||
ref_pointer_array[((i < border)? all_fields.elements-i-1 : i-border)]=
|
||||
new_item;
|
||||
}
|
||||
|
@ -22996,7 +23002,10 @@ static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab)
|
|||
Field *field=table->field[table->key_info[join_tab->ref.key].key_part[i].
|
||||
fieldnr-1];
|
||||
Item *value=join_tab->ref.items[i];
|
||||
cond->add(new (thd->mem_root) Item_func_equal(thd, new (thd->mem_root) Item_field(thd, field), value));
|
||||
cond->add(new (thd->mem_root)
|
||||
Item_func_equal(thd, new (thd->mem_root) Item_field(thd, field),
|
||||
value),
|
||||
thd->mem_root);
|
||||
}
|
||||
if (thd->is_fatal_error)
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -23012,7 +23021,7 @@ static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab)
|
|||
if (join_tab->select->pre_idx_push_select_cond)
|
||||
cond_copy= cond->copy_andor_structure(thd);
|
||||
if (join_tab->select->cond)
|
||||
error=(int) cond->add(join_tab->select->cond);
|
||||
error=(int) cond->add(join_tab->select->cond, thd->mem_root);
|
||||
join_tab->select->cond= cond;
|
||||
if (join_tab->select->pre_idx_push_select_cond)
|
||||
{
|
||||
|
@ -23180,7 +23189,7 @@ bool JOIN::rollup_init()
|
|||
for (i= 0 ; i < send_group_parts; i++)
|
||||
{
|
||||
for (j=0 ; j < fields_list.elements ; j++)
|
||||
rollup.fields[i].push_back(rollup.null_items[i]);
|
||||
rollup.fields[i].push_back(rollup.null_items[i], thd->mem_root);
|
||||
}
|
||||
List_iterator<Item> it(all_fields);
|
||||
Item *item;
|
||||
|
@ -23534,45 +23543,49 @@ int print_explain_message_line(select_result_sink *result,
|
|||
Item *item_null= new (mem_root) Item_null(thd);
|
||||
List<Item> item_list;
|
||||
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_number));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, select_type));
|
||||
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_number),
|
||||
mem_root);
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, select_type),
|
||||
mem_root);
|
||||
/* `table` */
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `partitions` */
|
||||
if (options & DESCRIBE_PARTITIONS)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* type, possible_keys, key, key_len, ref */
|
||||
for (uint i=0 ; i < 5; i++)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `rows` */
|
||||
if (rows)
|
||||
{
|
||||
item_list.push_back(new (mem_root) Item_int(thd, *rows,
|
||||
MY_INT64_NUM_DECIMAL_DIGITS));
|
||||
MY_INT64_NUM_DECIMAL_DIGITS),
|
||||
mem_root);
|
||||
}
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `r_rows` */
|
||||
if (is_analyze)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `filtered` */
|
||||
if (is_analyze || options & DESCRIBE_EXTENDED)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `r_filtered` */
|
||||
if (is_analyze)
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
/* `Extra` */
|
||||
if (message)
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, message));
|
||||
item_list.push_back(new (mem_root) Item_string_sys(thd, message),
|
||||
mem_root);
|
||||
else
|
||||
item_list.push_back(item_null);
|
||||
item_list.push_back(item_null, mem_root);
|
||||
|
||||
if (result->send_data(item_list))
|
||||
return 1;
|
||||
|
|
195
sql/sql_show.cc
195
sql/sql_show.cc
|
@ -454,12 +454,16 @@ bool mysqld_show_authors(THD *thd)
|
|||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("mysqld_show_authors");
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Name", 40));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Location", 40));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Comment", 512));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Name", 40),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Location", 40),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Comment", 512),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
show_table_authors_st *authors;
|
||||
|
@ -489,12 +493,16 @@ bool mysqld_show_contributors(THD *thd)
|
|||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("mysqld_show_contributors");
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Name", 40));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Location", 40));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Comment", 512));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Name", 40),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Location", 40),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Comment", 512),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
show_table_contributors_st *contributors;
|
||||
|
@ -567,12 +575,17 @@ bool mysqld_show_privileges(THD *thd)
|
|||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("mysqld_show_privileges");
|
||||
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Privilege", 10));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Context", 15));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Comment", NAME_CHAR_LEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Privilege", 10),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Context", 15),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Comment",
|
||||
NAME_CHAR_LEN),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
show_privileges_st *privilege= sys_privileges;
|
||||
|
@ -1148,24 +1161,37 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
|
|||
|
||||
if (table_list->view)
|
||||
{
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "View", NAME_CHAR_LEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Create View",
|
||||
MY_MAX(buffer.length(),1024)));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "View", NAME_CHAR_LEN),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Create View",
|
||||
MY_MAX(buffer.length(),1024)),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE),
|
||||
mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Table", NAME_CHAR_LEN));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Table", NAME_CHAR_LEN),
|
||||
mem_root);
|
||||
// 1024 is for not to confuse old clients
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Create Table",
|
||||
MY_MAX(buffer.length(),1024)));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Create Table",
|
||||
MY_MAX(buffer.length(),1024)),
|
||||
mem_root);
|
||||
}
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
goto exit;
|
||||
|
||||
protocol->prepare_for_resend();
|
||||
|
@ -1254,11 +1280,16 @@ bool mysqld_show_create_db(THD *thd, LEX_STRING *dbname,
|
|||
load_db_opt_by_name(thd, dbname->str, &create);
|
||||
}
|
||||
List<Item> field_list;
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Database", NAME_CHAR_LEN));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Create Database", 1024));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Database", NAME_CHAR_LEN),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Create Database", 1024),
|
||||
mem_root);
|
||||
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
protocol->prepare_for_resend();
|
||||
|
@ -1319,16 +1350,19 @@ mysqld_list_fields(THD *thd, TABLE_LIST *table_list, const char *wild)
|
|||
!wild_case_compare(system_charset_info, field->field_name,wild))
|
||||
{
|
||||
if (table_list->view)
|
||||
field_list.push_back(new (mem_root) Item_ident_for_show(thd, field,
|
||||
table_list->view_db.str,
|
||||
table_list->view_name.str));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_ident_for_show(thd, field,
|
||||
table_list->view_db.str,
|
||||
table_list->view_name.str),
|
||||
mem_root);
|
||||
else
|
||||
field_list.push_back(new (mem_root) Item_field(thd, field));
|
||||
field_list.push_back(new (mem_root) Item_field(thd, field), mem_root);
|
||||
}
|
||||
}
|
||||
restore_record(table, s->default_values); // Get empty record
|
||||
table->use_all_columns();
|
||||
if (thd->protocol->send_result_set_metadata(&field_list, Protocol::SEND_DEFAULTS))
|
||||
if (thd->protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_DEFAULTS))
|
||||
DBUG_VOID_RETURN;
|
||||
my_eof(thd);
|
||||
DBUG_VOID_RETURN;
|
||||
|
@ -2350,30 +2384,46 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
|||
MEM_ROOT *mem_root= thd->mem_root;
|
||||
DBUG_ENTER("mysqld_list_processes");
|
||||
|
||||
field_list.push_back(new (mem_root) Item_int(thd, "Id", 0, MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "User",
|
||||
USERNAME_CHAR_LENGTH));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Host",
|
||||
LIST_PROCESS_HOST_LEN));
|
||||
field_list.push_back(field=new (mem_root) Item_empty_string(thd, "db", NAME_CHAR_LEN));
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_int(thd, "Id", 0, MY_INT32_NUM_DECIMAL_DIGITS),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "User",
|
||||
USERNAME_CHAR_LENGTH),
|
||||
mem_root);
|
||||
field_list.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Host",
|
||||
LIST_PROCESS_HOST_LEN),
|
||||
mem_root);
|
||||
field_list.push_back(field=new (mem_root)
|
||||
Item_empty_string(thd, "db", NAME_CHAR_LEN),
|
||||
mem_root);
|
||||
field->maybe_null=1;
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Command", 16));
|
||||
field_list.push_back(field= new (mem_root) Item_return_int(thd, "Time", 7,
|
||||
MYSQL_TYPE_LONG));
|
||||
field_list.push_back(new (mem_root) Item_empty_string(thd, "Command", 16),
|
||||
mem_root);
|
||||
field_list.push_back(field= new (mem_root)
|
||||
Item_return_int(thd, "Time", 7, MYSQL_TYPE_LONG),
|
||||
mem_root);
|
||||
field->unsigned_flag= 0;
|
||||
field_list.push_back(field=new (mem_root) Item_empty_string(thd, "State", 30));
|
||||
field_list.push_back(field=new (mem_root)
|
||||
Item_empty_string(thd, "State", 30),
|
||||
mem_root);
|
||||
field->maybe_null=1;
|
||||
field_list.push_back(field=new (mem_root) Item_empty_string(thd, "Info",
|
||||
max_query_length));
|
||||
field_list.push_back(field=new (mem_root)
|
||||
Item_empty_string(thd, "Info", max_query_length),
|
||||
mem_root);
|
||||
field->maybe_null=1;
|
||||
if (!thd->variables.old_mode &&
|
||||
!(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO))
|
||||
{
|
||||
field_list.push_back(field= new (mem_root) Item_float(thd, "Progress", 0.0, 3, 7));
|
||||
field_list.push_back(field= new (mem_root)
|
||||
Item_float(thd, "Progress", 0.0, 3, 7),
|
||||
mem_root);
|
||||
field->maybe_null= 0;
|
||||
}
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
if (thd->killed)
|
||||
|
@ -2546,11 +2596,11 @@ int select_result_explain_buffer::send_data(List<Item> &items)
|
|||
DBUG_RETURN(MY_TEST(res));
|
||||
}
|
||||
|
||||
bool select_result_text_buffer::send_result_set_metadata(List<Item> &fields, uint flag)
|
||||
bool select_result_text_buffer::send_result_set_metadata(List<Item> &fields,
|
||||
uint flag)
|
||||
{
|
||||
n_columns= fields.elements;
|
||||
return append_row(fields, true /*send item names */);
|
||||
return send_data(fields);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2566,16 +2616,18 @@ int select_result_text_buffer::append_row(List<Item> &items, bool send_names)
|
|||
char **row;
|
||||
int column= 0;
|
||||
|
||||
if (!(row= (char**) thd->alloc(sizeof(char*) * n_columns)))
|
||||
if (!(row= (char**) thd->alloc(sizeof(char*) * n_columns)) ||
|
||||
rows.push_back(row, thd->mem_root))
|
||||
return true;
|
||||
rows.push_back(row);
|
||||
|
||||
while ((item= it++))
|
||||
{
|
||||
DBUG_ASSERT(column < n_columns);
|
||||
StringBuffer<32> buf;
|
||||
const char *data_ptr;
|
||||
char *ptr;
|
||||
size_t data_len;
|
||||
|
||||
if (send_names)
|
||||
{
|
||||
data_ptr= item->name;
|
||||
|
@ -2597,8 +2649,8 @@ int select_result_text_buffer::append_row(List<Item> &items, bool send_names)
|
|||
}
|
||||
}
|
||||
|
||||
char *ptr= (char*)thd->alloc(data_len + 1);
|
||||
memcpy(ptr, data_ptr, data_len + 1);
|
||||
if (!(ptr= (char*) thd->memdup(data_ptr, data_len + 1)))
|
||||
return true;
|
||||
row[column]= ptr;
|
||||
|
||||
column++;
|
||||
|
@ -3557,7 +3609,7 @@ COND *make_cond_for_info_schema(THD *thd, COND *cond, TABLE_LIST *table)
|
|||
{
|
||||
Item *fix= make_cond_for_info_schema(thd, item, table);
|
||||
if (fix)
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
}
|
||||
switch (new_cond->argument_list()->elements) {
|
||||
case 0:
|
||||
|
@ -3581,7 +3633,7 @@ COND *make_cond_for_info_schema(THD *thd, COND *cond, TABLE_LIST *table)
|
|||
Item *fix=make_cond_for_info_schema(thd, item, table);
|
||||
if (!fix)
|
||||
return (COND*) 0;
|
||||
new_cond->argument_list()->push_back(fix);
|
||||
new_cond->argument_list()->push_back(fix, thd->mem_root);
|
||||
}
|
||||
new_cond->quick_fix_field();
|
||||
new_cond->top_level_item();
|
||||
|
@ -7422,7 +7474,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
|
|||
strlen(fields_info->field_name), cs);
|
||||
break;
|
||||
}
|
||||
field_list.push_back(item);
|
||||
field_list.push_back(item, thd->mem_root);
|
||||
item->maybe_null= (fields_info->field_flags & MY_I_S_MAYBE_NULL);
|
||||
field_count++;
|
||||
}
|
||||
|
@ -9171,9 +9223,11 @@ static bool show_create_trigger_impl(THD *thd,
|
|||
|
||||
/* Send header. */
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "Trigger", NAME_LEN));
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "sql_mode",
|
||||
trg_sql_mode_str.length));
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "Trigger", NAME_LEN),
|
||||
mem_root);
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "sql_mode", trg_sql_mode_str.length),
|
||||
mem_root);
|
||||
|
||||
{
|
||||
/*
|
||||
|
@ -9183,23 +9237,32 @@ static bool show_create_trigger_impl(THD *thd,
|
|||
|
||||
Item_empty_string *stmt_fld=
|
||||
new (mem_root) Item_empty_string(thd, "SQL Original Statement",
|
||||
MY_MAX(trg_sql_original_stmt.length, 1024));
|
||||
MY_MAX(trg_sql_original_stmt.length,
|
||||
1024));
|
||||
|
||||
stmt_fld->maybe_null= TRUE;
|
||||
|
||||
fields.push_back(stmt_fld);
|
||||
fields.push_back(stmt_fld, mem_root);
|
||||
}
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "character_set_client",
|
||||
MY_CS_NAME_SIZE),
|
||||
mem_root);
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "collation_connection",
|
||||
MY_CS_NAME_SIZE),
|
||||
mem_root);
|
||||
|
||||
fields.push_back(new (mem_root) Item_empty_string(thd, "Database Collation",
|
||||
MY_CS_NAME_SIZE));
|
||||
fields.push_back(new (mem_root)
|
||||
Item_empty_string(thd, "Database Collation",
|
||||
MY_CS_NAME_SIZE),
|
||||
mem_root);
|
||||
|
||||
if (p->send_result_set_metadata(&fields, Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
if (p->send_result_set_metadata(&fields,
|
||||
Protocol::SEND_NUM_ROWS |
|
||||
Protocol::SEND_EOF))
|
||||
return TRUE;
|
||||
|
||||
/* Send data. */
|
||||
|
|
|
@ -5322,7 +5322,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
|
|||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
/* Partition info is not handled by mysql_prepare_alter_table() call. */
|
||||
if (src_table->table->part_info)
|
||||
thd->work_part_info= src_table->table->part_info->get_clone();
|
||||
thd->work_part_info= src_table->table->part_info->get_clone(thd);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -5941,7 +5941,7 @@ remove_key:
|
|||
{
|
||||
// Adding the index into the drop list for replacing
|
||||
alter_info->flags |= Alter_info::ALTER_DROP_INDEX;
|
||||
alter_info->drop_list.push_back(ad);
|
||||
alter_info->drop_list.push_back(ad, thd->mem_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7390,7 +7390,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
Note that columns with AFTER clauses are added to the end
|
||||
of the list for now. Their positions will be corrected later.
|
||||
*/
|
||||
new_create_list.push_back(def);
|
||||
new_create_list.push_back(def, thd->mem_root);
|
||||
if (field->stored_in_db != def->stored_in_db)
|
||||
{
|
||||
my_error(ER_UNSUPPORTED_ACTION_ON_VIRTUAL_COLUMN, MYF(0));
|
||||
|
@ -7414,8 +7414,8 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
This field was not dropped and not changed, add it to the list
|
||||
for the new table.
|
||||
*/
|
||||
def= new Create_field(thd, field, field);
|
||||
new_create_list.push_back(def);
|
||||
def= new (thd->mem_root) Create_field(thd, field, field);
|
||||
new_create_list.push_back(def, thd->mem_root);
|
||||
alter_it.rewind(); // Change default if ALTER
|
||||
Alter_column *alter;
|
||||
while ((alter=alter_it++))
|
||||
|
@ -7466,7 +7466,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
alter_ctx->error_if_not_empty= TRUE;
|
||||
}
|
||||
if (!def->after)
|
||||
new_create_list.push_back(def);
|
||||
new_create_list.push_back(def, thd->mem_root);
|
||||
else
|
||||
{
|
||||
Create_field *find;
|
||||
|
@ -7494,7 +7494,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
}
|
||||
}
|
||||
if (def->after == first_keyword)
|
||||
new_create_list.push_front(def);
|
||||
new_create_list.push_front(def, thd->mem_root);
|
||||
else
|
||||
{
|
||||
find_it.rewind();
|
||||
|
@ -7633,7 +7633,8 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
key_part_length /= key_part->field->charset()->mbmaxlen;
|
||||
key_parts.push_back(new Key_part_spec(cfield->field_name,
|
||||
strlen(cfield->field_name),
|
||||
key_part_length));
|
||||
key_part_length),
|
||||
thd->mem_root);
|
||||
}
|
||||
if (table->s->tmp_table == NO_TMP_TABLE)
|
||||
{
|
||||
|
@ -7683,7 +7684,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
&key_create_info,
|
||||
MY_TEST(key_info->flags & HA_GENERATED_KEY),
|
||||
key_parts, key_info->option_list, DDL_options());
|
||||
new_key_list.push_back(key);
|
||||
new_key_list.push_back(key, thd->mem_root);
|
||||
}
|
||||
}
|
||||
{
|
||||
|
@ -7693,7 +7694,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||
if (key->type == Key::FOREIGN_KEY &&
|
||||
((Foreign_key *)key)->validate(new_create_list))
|
||||
goto err;
|
||||
new_key_list.push_back(key);
|
||||
new_key_list.push_back(key, thd->mem_root);
|
||||
if (key->name.str &&
|
||||
!my_strcasecmp(system_charset_info, key->name.str, primary_key_name))
|
||||
{
|
||||
|
@ -9626,11 +9627,14 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables,
|
|||
*/
|
||||
DBUG_ASSERT(! thd->in_sub_stmt);
|
||||
|
||||
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Table", NAME_LEN*2));
|
||||
field_list.push_back(item= new (thd->mem_root)
|
||||
Item_empty_string(thd, "Table", NAME_LEN*2),
|
||||
thd->mem_root);
|
||||
item->maybe_null= 1;
|
||||
field_list.push_back(item= new (thd->mem_root) Item_int(thd, "Checksum",
|
||||
(longlong) 1,
|
||||
MY_INT64_NUM_DECIMAL_DIGITS));
|
||||
field_list.push_back(item= new (thd->mem_root)
|
||||
Item_int(thd, "Checksum", (longlong) 1,
|
||||
MY_INT64_NUM_DECIMAL_DIGITS),
|
||||
thd->mem_root);
|
||||
item->maybe_null= 1;
|
||||
if (protocol->send_result_set_metadata(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
|
|
|
@ -1755,8 +1755,8 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
|||
{
|
||||
Item *value= value_it++;
|
||||
uint offset= item->field->table->pos_in_table_list->shared;
|
||||
fields_for_table[offset]->push_back(item);
|
||||
values_for_table[offset]->push_back(value);
|
||||
fields_for_table[offset]->push_back(item, thd->mem_root);
|
||||
values_for_table[offset]->push_back(value, thd->mem_root);
|
||||
}
|
||||
if (thd->is_fatal_error)
|
||||
DBUG_RETURN(1);
|
||||
|
@ -1982,7 +1982,7 @@ loop_end:
|
|||
if (!ifield)
|
||||
DBUG_RETURN(1);
|
||||
ifield->maybe_null= 0;
|
||||
if (temp_fields.push_back(ifield))
|
||||
if (temp_fields.push_back(ifield, thd->mem_root))
|
||||
DBUG_RETURN(1);
|
||||
} while ((tbl= tbl_it++));
|
||||
|
||||
|
|
|
@ -1981,7 +1981,7 @@ bool insert_view_fields(THD *thd, List<Item> *list, TABLE_LIST *view)
|
|||
{
|
||||
Item_field *fld;
|
||||
if ((fld= entry->item->field_for_view_update()))
|
||||
list->push_back(fld);
|
||||
list->push_back(fld, thd->mem_root);
|
||||
else
|
||||
{
|
||||
my_error(ER_NON_INSERTABLE_TABLE, MYF(0), view->alias, "INSERT");
|
||||
|
|
275
sql/sql_yacc.yy
275
sql/sql_yacc.yy
|
@ -418,7 +418,7 @@ set_system_variable(THD *thd, struct sys_var_with_base *tmp,
|
|||
set_var(thd, var_type, tmp->var, &tmp->base_name, val)))
|
||||
return TRUE;
|
||||
|
||||
return lex->var_list.push_back(var);
|
||||
return lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
|
||||
|
||||
|
@ -860,11 +860,15 @@ static void add_key_to_list(LEX *lex, LEX_STRING *field_name,
|
|||
enum Key::Keytype type, bool check_exists)
|
||||
{
|
||||
Key *key;
|
||||
key= new Key(type, null_lex_str, HA_KEY_ALG_UNDEF, false,
|
||||
DDL_options(check_exists ? DDL_options::OPT_IF_NOT_EXISTS :
|
||||
DDL_options::OPT_NONE));
|
||||
key->columns.push_back(new Key_part_spec(*field_name, 0));
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
MEM_ROOT *mem_root= lex->thd->mem_root;
|
||||
key= new (mem_root)
|
||||
Key(type, null_lex_str, HA_KEY_ALG_UNDEF, false,
|
||||
DDL_options(check_exists ?
|
||||
DDL_options::OPT_IF_NOT_EXISTS :
|
||||
DDL_options::OPT_NONE));
|
||||
key->columns.push_back(new (mem_root) Key_part_spec(*field_name, 0),
|
||||
mem_root);
|
||||
lex->alter_info.key_list.push_back(key, mem_root);
|
||||
}
|
||||
|
||||
void LEX::init_last_field(Create_field *field, const char *field_name,
|
||||
|
@ -2181,7 +2185,8 @@ execute_var_ident:
|
|||
{
|
||||
LEX *lex=Lex;
|
||||
LEX_STRING *lexstr= (LEX_STRING*)thd->memdup(&$2, sizeof(LEX_STRING));
|
||||
if (!lexstr || lex->prepared_stmt_params.push_back(lexstr))
|
||||
if (!lexstr || lex->prepared_stmt_params.push_back(lexstr,
|
||||
thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -2897,11 +2902,11 @@ opt_sp_cparams:
|
|||
sp_cparams:
|
||||
sp_cparams ',' expr
|
||||
{
|
||||
Lex->value_list.push_back($3);
|
||||
Lex->value_list.push_back($3, thd->mem_root);
|
||||
}
|
||||
| expr
|
||||
{
|
||||
Lex->value_list.push_back($1);
|
||||
Lex->value_list.push_back($1, thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -3520,12 +3525,12 @@ statement_information:
|
|||
statement_information_item
|
||||
{
|
||||
$$= new (thd->mem_root) List<Statement_information_item>;
|
||||
if ($$ == NULL || $$->push_back($1))
|
||||
if ($$ == NULL || $$->push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| statement_information ',' statement_information_item
|
||||
{
|
||||
if ($1->push_back($3))
|
||||
if ($1->push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
$$= $1;
|
||||
}
|
||||
|
@ -3577,12 +3582,12 @@ condition_information:
|
|||
condition_information_item
|
||||
{
|
||||
$$= new (thd->mem_root) List<Condition_information_item>;
|
||||
if ($$ == NULL || $$->push_back($1))
|
||||
if ($$ == NULL || $$->push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| condition_information ',' condition_information_item
|
||||
{
|
||||
if ($1->push_back($3))
|
||||
if ($1->push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
$$= $1;
|
||||
}
|
||||
|
@ -5009,7 +5014,7 @@ part_field_item:
|
|||
{
|
||||
partition_info *part_info= Lex->part_info;
|
||||
part_info->num_columns++;
|
||||
if (part_info->part_field_list.push_back($1.str))
|
||||
if (part_info->part_field_list.push_back($1.str, thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
MYSQL_YYABORT;
|
||||
|
@ -5094,7 +5099,7 @@ sub_part_field_item:
|
|||
ident
|
||||
{
|
||||
partition_info *part_info= Lex->part_info;
|
||||
if (part_info->subpart_field_list.push_back($1.str))
|
||||
if (part_info->subpart_field_list.push_back($1.str, thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
MYSQL_YYABORT;
|
||||
|
@ -5189,7 +5194,8 @@ part_definition:
|
|||
partition_info *part_info= Lex->part_info;
|
||||
partition_element *p_elem= new partition_element();
|
||||
|
||||
if (!p_elem || part_info->partitions.push_back(p_elem))
|
||||
if (!p_elem ||
|
||||
part_info->partitions.push_back(p_elem, thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(sizeof(partition_element));
|
||||
MYSQL_YYABORT;
|
||||
|
@ -5289,11 +5295,11 @@ part_func_max:
|
|||
}
|
||||
else
|
||||
part_info->num_columns= 1U;
|
||||
if (part_info->init_column_part())
|
||||
if (part_info->init_column_part(thd))
|
||||
{
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (part_info->add_max_value())
|
||||
if (part_info->add_max_value(thd))
|
||||
{
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
|
@ -5325,7 +5331,7 @@ part_values_in:
|
|||
we ADD or REORGANIZE partitions. Also can only happen
|
||||
for LIST partitions.
|
||||
*/
|
||||
if (part_info->reorganize_into_single_field_col_val())
|
||||
if (part_info->reorganize_into_single_field_col_val(thd))
|
||||
{
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
|
@ -5355,7 +5361,7 @@ part_value_item:
|
|||
/* Initialisation code needed for each list of value expressions */
|
||||
if (!(part_info->part_type == LIST_PARTITION &&
|
||||
part_info->num_columns == 1U) &&
|
||||
part_info->init_column_part())
|
||||
part_info->init_column_part(thd))
|
||||
{
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
|
@ -5398,7 +5404,7 @@ part_value_expr_item:
|
|||
my_parse_error(ER_THD(thd, ER_MAXVALUE_IN_VALUES_IN));
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (part_info->add_max_value())
|
||||
if (part_info->add_max_value(thd))
|
||||
{
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
|
@ -5491,7 +5497,7 @@ sub_part_definition:
|
|||
MYSQL_YYABORT;
|
||||
}
|
||||
if (!sub_p_elem ||
|
||||
curr_part->subpartitions.push_back(sub_p_elem))
|
||||
curr_part->subpartitions.push_back(sub_p_elem, thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(sizeof(partition_element));
|
||||
MYSQL_YYABORT;
|
||||
|
@ -6074,8 +6080,8 @@ key_def:
|
|||
handle_if_exists_options() expectes the two keys in this order:
|
||||
the Foreign_key, followed by its auto-generated Key.
|
||||
*/
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
lex->alter_info.key_list.push_back(Lex->last_key);
|
||||
lex->alter_info.key_list.push_back(key, thd->mem_root);
|
||||
lex->alter_info.key_list.push_back(Lex->last_key, thd->mem_root);
|
||||
lex->option_list= NULL;
|
||||
|
||||
/* Only used for ALTER TABLE. Ignored otherwise. */
|
||||
|
@ -6129,7 +6135,7 @@ field_spec:
|
|||
if (f->check(thd))
|
||||
MYSQL_YYABORT;
|
||||
|
||||
lex->alter_info.create_list.push_back(f);
|
||||
lex->alter_info.create_list.push_back(f, thd->mem_root);
|
||||
|
||||
if (f->flags & PRI_KEY_FLAG)
|
||||
add_key_to_list(lex, &$1, Key::PRIMARY, Lex->check_exists);
|
||||
|
@ -6837,7 +6843,7 @@ ref_list:
|
|||
Key_part_spec *key= new Key_part_spec($3, 0);
|
||||
if (key == NULL)
|
||||
MYSQL_YYABORT;
|
||||
Lex->ref_list.push_back(key);
|
||||
Lex->ref_list.push_back(key, thd->mem_root);
|
||||
}
|
||||
| ident
|
||||
{
|
||||
|
@ -6846,7 +6852,7 @@ ref_list:
|
|||
MYSQL_YYABORT;
|
||||
LEX *lex= Lex;
|
||||
lex->ref_list.empty();
|
||||
lex->ref_list.push_back(key);
|
||||
lex->ref_list.push_back(key, thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -7056,11 +7062,11 @@ btree_or_rtree:
|
|||
key_list:
|
||||
key_list ',' key_part order_dir
|
||||
{
|
||||
Lex->last_key->columns.push_back($3);
|
||||
Lex->last_key->columns.push_back($3, thd->mem_root);
|
||||
}
|
||||
| key_part order_dir
|
||||
{
|
||||
Lex->last_key->columns.push_back($1);
|
||||
Lex->last_key->columns.push_back($1, thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -7095,8 +7101,10 @@ opt_component:
|
|||
;
|
||||
|
||||
string_list:
|
||||
text_string { Lex->last_field->interval_list.push_back($1); }
|
||||
| string_list ',' text_string { Lex->last_field->interval_list.push_back($3); };
|
||||
text_string
|
||||
{ Lex->last_field->interval_list.push_back($1, thd->mem_root); }
|
||||
| string_list ',' text_string
|
||||
{ Lex->last_field->interval_list.push_back($3, thd->mem_root); };
|
||||
|
||||
/*
|
||||
** Alter table
|
||||
|
@ -7548,7 +7556,8 @@ alt_part_name_list:
|
|||
alt_part_name_item:
|
||||
ident
|
||||
{
|
||||
if (Lex->alter_info.partition_names.push_back($1.str))
|
||||
if (Lex->alter_info.partition_names.push_back($1.str,
|
||||
thd->mem_root))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
MYSQL_YYABORT;
|
||||
|
@ -7608,7 +7617,7 @@ alter_list_item:
|
|||
Alter_drop *ad= new Alter_drop(Alter_drop::COLUMN, $4.str, $3);
|
||||
if (ad == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.drop_list.push_back(ad);
|
||||
lex->alter_info.drop_list.push_back(ad, thd->mem_root);
|
||||
lex->alter_info.flags|= Alter_info::ALTER_DROP_COLUMN;
|
||||
}
|
||||
| DROP FOREIGN KEY_SYM opt_if_exists_table_element field_ident
|
||||
|
@ -7617,7 +7626,7 @@ alter_list_item:
|
|||
Alter_drop *ad= new Alter_drop(Alter_drop::FOREIGN_KEY, $5.str, $4);
|
||||
if (ad == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.drop_list.push_back(ad);
|
||||
lex->alter_info.drop_list.push_back(ad, thd->mem_root);
|
||||
lex->alter_info.flags|= Alter_info::DROP_FOREIGN_KEY;
|
||||
}
|
||||
| DROP PRIMARY_SYM KEY_SYM
|
||||
|
@ -7627,7 +7636,7 @@ alter_list_item:
|
|||
FALSE);
|
||||
if (ad == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.drop_list.push_back(ad);
|
||||
lex->alter_info.drop_list.push_back(ad, thd->mem_root);
|
||||
lex->alter_info.flags|= Alter_info::ALTER_DROP_INDEX;
|
||||
}
|
||||
| DROP key_or_index opt_if_exists_table_element field_ident
|
||||
|
@ -7636,7 +7645,7 @@ alter_list_item:
|
|||
Alter_drop *ad= new Alter_drop(Alter_drop::KEY, $4.str, $3);
|
||||
if (ad == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.drop_list.push_back(ad);
|
||||
lex->alter_info.drop_list.push_back(ad, thd->mem_root);
|
||||
lex->alter_info.flags|= Alter_info::ALTER_DROP_INDEX;
|
||||
}
|
||||
| DISABLE_SYM KEYS
|
||||
|
@ -7657,7 +7666,7 @@ alter_list_item:
|
|||
Alter_column *ac= new Alter_column($3.str,$6);
|
||||
if (ac == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.alter_list.push_back(ac);
|
||||
lex->alter_info.alter_list.push_back(ac, thd->mem_root);
|
||||
lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN_DEFAULT;
|
||||
}
|
||||
| ALTER opt_column field_ident DROP DEFAULT
|
||||
|
@ -7666,7 +7675,7 @@ alter_list_item:
|
|||
Alter_column *ac= new Alter_column($3.str, (Item*) 0);
|
||||
if (ac == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.alter_list.push_back(ac);
|
||||
lex->alter_info.alter_list.push_back(ac, thd->mem_root);
|
||||
lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN_DEFAULT;
|
||||
}
|
||||
| RENAME opt_to table_ident
|
||||
|
@ -8099,12 +8108,12 @@ table_column_list:
|
|||
| ident
|
||||
{
|
||||
Lex->column_list->push_back((LEX_STRING*)
|
||||
thd->memdup(&$1, sizeof(LEX_STRING)));
|
||||
thd->memdup(&$1, sizeof(LEX_STRING)), thd->mem_root);
|
||||
}
|
||||
| table_column_list ',' ident
|
||||
{
|
||||
Lex->column_list->push_back((LEX_STRING*)
|
||||
thd->memdup(&$3, sizeof(LEX_STRING)));
|
||||
thd->memdup(&$3, sizeof(LEX_STRING)), thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -8118,15 +8127,17 @@ table_index_list:
|
|||
table_index_name:
|
||||
ident
|
||||
{
|
||||
Lex->index_list->push_back(
|
||||
(LEX_STRING*) thd->memdup(&$1, sizeof(LEX_STRING)));
|
||||
Lex->index_list->push_back((LEX_STRING*)
|
||||
thd->memdup(&$1, sizeof(LEX_STRING)),
|
||||
thd->mem_root);
|
||||
}
|
||||
|
|
||||
PRIMARY_SYM
|
||||
{
|
||||
LEX_STRING str= {(char*) "PRIMARY", 7};
|
||||
Lex->index_list->push_back(
|
||||
(LEX_STRING*) thd->memdup(&str, sizeof(LEX_STRING)));
|
||||
Lex->index_list->push_back((LEX_STRING*)
|
||||
thd->memdup(&str, sizeof(LEX_STRING)),
|
||||
thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -8235,12 +8246,14 @@ rename:
|
|||
rename_list:
|
||||
user TO_SYM user
|
||||
{
|
||||
if (Lex->users_list.push_back($1) || Lex->users_list.push_back($3))
|
||||
if (Lex->users_list.push_back($1, thd->mem_root) ||
|
||||
Lex->users_list.push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| rename_list ',' user TO_SYM user
|
||||
{
|
||||
if (Lex->users_list.push_back($3) || Lex->users_list.push_back($5))
|
||||
if (Lex->users_list.push_back($3, thd->mem_root) ||
|
||||
Lex->users_list.push_back($5, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -8692,7 +8705,7 @@ expr:
|
|||
/*
|
||||
(X1 OR X2) OR Y ==> OR (X1, X2, Y)
|
||||
*/
|
||||
item1->add($3);
|
||||
item1->add($3, thd->mem_root);
|
||||
$$ = $1;
|
||||
}
|
||||
}
|
||||
|
@ -8702,7 +8715,7 @@ expr:
|
|||
/*
|
||||
X OR (Y1 OR Y2) ==> OR (X, Y1, Y2)
|
||||
*/
|
||||
item3->add_at_head($1);
|
||||
item3->add_at_head($1, thd->mem_root);
|
||||
$$ = $3;
|
||||
}
|
||||
else
|
||||
|
@ -8742,7 +8755,7 @@ expr:
|
|||
/*
|
||||
(X1 AND X2) AND Y ==> AND (X1, X2, Y)
|
||||
*/
|
||||
item1->add($3);
|
||||
item1->add($3, thd->mem_root);
|
||||
$$ = $1;
|
||||
}
|
||||
}
|
||||
|
@ -8752,7 +8765,7 @@ expr:
|
|||
/*
|
||||
X AND (Y1 AND Y2) ==> AND (X, Y1, Y2)
|
||||
*/
|
||||
item3->add_at_head($1);
|
||||
item3->add_at_head($1, thd->mem_root);
|
||||
$$ = $3;
|
||||
}
|
||||
else
|
||||
|
@ -8866,8 +8879,8 @@ predicate:
|
|||
}
|
||||
| bit_expr IN_SYM '(' expr ',' expr_list ')'
|
||||
{
|
||||
$6->push_front($4);
|
||||
$6->push_front($1);
|
||||
$6->push_front($4, thd->mem_root);
|
||||
$6->push_front($1, thd->mem_root);
|
||||
$$= new (thd->mem_root) Item_func_in(thd, *$6);
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
|
@ -8880,8 +8893,8 @@ predicate:
|
|||
}
|
||||
| bit_expr not IN_SYM '(' expr ',' expr_list ')'
|
||||
{
|
||||
$7->push_front($5);
|
||||
$7->push_front($1);
|
||||
$7->push_front($5, thd->mem_root);
|
||||
$7->push_front($1, thd->mem_root);
|
||||
Item_func_in *item= new (thd->mem_root) Item_func_in(thd, *$7);
|
||||
if (item == NULL)
|
||||
MYSQL_YYABORT;
|
||||
|
@ -9190,11 +9203,11 @@ dyncall_create_list:
|
|||
$$= new (thd->mem_root) List<DYNCALL_CREATE_DEF>;
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$$->push_back($1);
|
||||
$$->push_back($1, thd->mem_root);
|
||||
}
|
||||
| dyncall_create_list ',' dyncall_create_element
|
||||
{
|
||||
$1->push_back($3);
|
||||
$1->push_back($3, thd->mem_root);
|
||||
$$= $1;
|
||||
}
|
||||
;
|
||||
|
@ -9258,14 +9271,14 @@ simple_expr:
|
|||
{ $$= $2; }
|
||||
| '(' expr ',' expr_list ')'
|
||||
{
|
||||
$4->push_front($2);
|
||||
$4->push_front($2, thd->mem_root);
|
||||
$$= new (thd->mem_root) Item_row(thd, *$4);
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| ROW_SYM '(' expr ',' expr_list ')'
|
||||
{
|
||||
$5->push_front($3);
|
||||
$5->push_front($3, thd->mem_root);
|
||||
$$= new (thd->mem_root) Item_row(thd, *$5);
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
|
@ -9302,12 +9315,12 @@ simple_expr:
|
|||
}
|
||||
| MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')'
|
||||
{
|
||||
$2->push_front($5);
|
||||
$2->push_front($5, thd->mem_root);
|
||||
Item_func_match *i1= new (thd->mem_root) Item_func_match(thd, *$2,
|
||||
$6);
|
||||
if (i1 == NULL)
|
||||
MYSQL_YYABORT;
|
||||
Select->add_ftfunc_to_list(i1);
|
||||
Select->add_ftfunc_to_list(thd, i1);
|
||||
$$= i1;
|
||||
}
|
||||
| BINARY simple_expr %prec NEG
|
||||
|
@ -9440,8 +9453,8 @@ function_call_keyword:
|
|||
List<Item> *list= new (thd->mem_root) List<Item>;
|
||||
if (list == NULL)
|
||||
MYSQL_YYABORT;
|
||||
list->push_front($5);
|
||||
list->push_front($3);
|
||||
list->push_front($5, thd->mem_root);
|
||||
list->push_front($3, thd->mem_root);
|
||||
Item_row *item= new (thd->mem_root) Item_row(thd, *list);
|
||||
if (item == NULL)
|
||||
MYSQL_YYABORT;
|
||||
|
@ -9451,8 +9464,8 @@ function_call_keyword:
|
|||
}
|
||||
| INTERVAL_SYM '(' expr ',' expr ',' expr_list ')' %prec INTERVAL_SYM
|
||||
{
|
||||
$7->push_front($5);
|
||||
$7->push_front($3);
|
||||
$7->push_front($5, thd->mem_root);
|
||||
$7->push_front($3, thd->mem_root);
|
||||
Item_row *item= new (thd->mem_root) Item_row(thd, *$7);
|
||||
if (item == NULL)
|
||||
MYSQL_YYABORT;
|
||||
|
@ -10180,11 +10193,11 @@ udf_expr_list:
|
|||
$$= new (thd->mem_root) List<Item>;
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$$->push_back($1);
|
||||
$$->push_back($1, thd->mem_root);
|
||||
}
|
||||
| udf_expr_list ',' udf_expr
|
||||
{
|
||||
$1->push_back($3);
|
||||
$1->push_back($3, thd->mem_root);
|
||||
$$= $1;
|
||||
}
|
||||
;
|
||||
|
@ -10379,7 +10392,7 @@ variable_aux:
|
|||
MYSQL_YYABORT;
|
||||
LEX *lex= Lex;
|
||||
lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
|
||||
lex->set_var_list.push_back(item);
|
||||
lex->set_var_list.push_back(item, thd->mem_root);
|
||||
}
|
||||
| ident_or_text
|
||||
{
|
||||
|
@ -10512,11 +10525,11 @@ expr_list:
|
|||
$$= new (thd->mem_root) List<Item>;
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$$->push_back($1);
|
||||
$$->push_back($1, thd->mem_root);
|
||||
}
|
||||
| expr_list ',' expr
|
||||
{
|
||||
$1->push_back($3);
|
||||
$1->push_back($3, thd->mem_root);
|
||||
$$= $1;
|
||||
}
|
||||
;
|
||||
|
@ -10532,11 +10545,11 @@ ident_list:
|
|||
$$= new (thd->mem_root) List<Item>;
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$$->push_back($1);
|
||||
$$->push_back($1, thd->mem_root);
|
||||
}
|
||||
| ident_list ',' simple_ident
|
||||
{
|
||||
$1->push_back($3);
|
||||
$1->push_back($3, thd->mem_root);
|
||||
$$= $1;
|
||||
}
|
||||
;
|
||||
|
@ -10557,13 +10570,13 @@ when_list:
|
|||
$$= new List<Item>;
|
||||
if ($$ == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$$->push_back($2);
|
||||
$$->push_back($4);
|
||||
$$->push_back($2, thd->mem_root);
|
||||
$$->push_back($4, thd->mem_root);
|
||||
}
|
||||
| when_list WHEN_SYM expr THEN_SYM expr
|
||||
{
|
||||
$1->push_back($3);
|
||||
$1->push_back($5);
|
||||
$1->push_back($3, thd->mem_root);
|
||||
$1->push_back($5, thd->mem_root);
|
||||
$$= $1;
|
||||
}
|
||||
;
|
||||
|
@ -11121,7 +11134,7 @@ using_list:
|
|||
system_charset_info);
|
||||
if (s == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$$->push_back(s);
|
||||
$$->push_back(s, thd->mem_root);
|
||||
}
|
||||
| using_list ',' ident
|
||||
{
|
||||
|
@ -11130,7 +11143,7 @@ using_list:
|
|||
system_charset_info);
|
||||
if (s == NULL)
|
||||
MYSQL_YYABORT;
|
||||
$1->push_back(s);
|
||||
$1->push_back(s, thd->mem_root);
|
||||
$$= $1;
|
||||
}
|
||||
;
|
||||
|
@ -11681,7 +11694,7 @@ select_var_ident: select_outvar
|
|||
{
|
||||
if ($1 == NULL)
|
||||
MYSQL_YYABORT;
|
||||
((select_dumpvar *)Lex->result)->var_list.push_back($1);
|
||||
((select_dumpvar *)Lex->result)->var_list.push_back($1, thd->mem_root);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -11798,7 +11811,7 @@ drop:
|
|||
lex->sql_command= SQLCOM_DROP_INDEX;
|
||||
lex->alter_info.reset();
|
||||
lex->alter_info.flags= Alter_info::ALTER_DROP_INDEX;
|
||||
lex->alter_info.drop_list.push_back(ad);
|
||||
lex->alter_info.drop_list.push_back(ad, thd->mem_root);
|
||||
if (!lex->current_select->add_table_to_list(lex->thd, $6, NULL,
|
||||
TL_OPTION_UPDATING,
|
||||
TL_READ_NO_INSERT,
|
||||
|
@ -12074,16 +12087,17 @@ insert_field_spec:
|
|||
| SET
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (!(lex->insert_list= new List_item) ||
|
||||
lex->many_values.push_back(lex->insert_list))
|
||||
if (!(lex->insert_list= new (thd->mem_root) List_item) ||
|
||||
lex->many_values.push_back(lex->insert_list, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
ident_eq_list
|
||||
;
|
||||
|
||||
fields:
|
||||
fields ',' insert_ident { Lex->field_list.push_back($3); }
|
||||
| insert_ident { Lex->field_list.push_back($1); }
|
||||
fields ',' insert_ident
|
||||
{ Lex->field_list.push_back($3, thd->mem_root); }
|
||||
| insert_ident { Lex->field_list.push_back($1, thd->mem_root); }
|
||||
;
|
||||
|
||||
insert_values:
|
||||
|
@ -12111,8 +12125,8 @@ ident_eq_value:
|
|||
simple_ident_nospvar equal expr_or_default
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (lex->field_list.push_back($1) ||
|
||||
lex->insert_list->push_back($3))
|
||||
if (lex->field_list.push_back($1, thd->mem_root) ||
|
||||
lex->insert_list->push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -12130,13 +12144,13 @@ opt_equal:
|
|||
no_braces:
|
||||
'('
|
||||
{
|
||||
if (!(Lex->insert_list= new List_item))
|
||||
if (!(Lex->insert_list= new (thd->mem_root) List_item))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
opt_values ')'
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (lex->many_values.push_back(lex->insert_list))
|
||||
if (lex->many_values.push_back(lex->insert_list, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -12149,12 +12163,12 @@ opt_values:
|
|||
values:
|
||||
values ',' expr_or_default
|
||||
{
|
||||
if (Lex->insert_list->push_back($3))
|
||||
if (Lex->insert_list->push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| expr_or_default
|
||||
{
|
||||
if (Lex->insert_list->push_back($1))
|
||||
if (Lex->insert_list->push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -12230,8 +12244,8 @@ insert_update_elem:
|
|||
simple_ident_nospvar equal expr_or_default
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
if (lex->update_list.push_back($1) ||
|
||||
lex->value_list.push_back($3))
|
||||
if (lex->update_list.push_back($1, thd->mem_root) ||
|
||||
lex->value_list.push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -13037,8 +13051,9 @@ flush_option:
|
|||
my_parse_error(ER_THD(thd, ER_SYNTAX_ERROR), $2);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
Lex->view_list.push_back(
|
||||
(LEX_STRING*)thd->memdup(&$1, sizeof(LEX_STRING)));
|
||||
Lex->view_list.push_back((LEX_STRING*)
|
||||
thd->memdup(&$1, sizeof(LEX_STRING)),
|
||||
thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -13116,7 +13131,7 @@ purge_option:
|
|||
{
|
||||
LEX *lex= Lex;
|
||||
lex->value_list.empty();
|
||||
lex->value_list.push_front($2);
|
||||
lex->value_list.push_front($2, thd->mem_root);
|
||||
lex->sql_command= SQLCOM_PURGE_BEFORE;
|
||||
}
|
||||
;
|
||||
|
@ -13157,11 +13172,11 @@ kill_option:
|
|||
kill_expr:
|
||||
expr
|
||||
{
|
||||
Lex->value_list.push_front($$);
|
||||
Lex->value_list.push_front($$, thd->mem_root);
|
||||
}
|
||||
| USER user
|
||||
{
|
||||
Lex->users_list.push_back($2);
|
||||
Lex->users_list.push_back($2, thd->mem_root);
|
||||
Lex->kill_type= KILL_TYPE_USER;
|
||||
}
|
||||
;
|
||||
|
@ -13338,9 +13353,9 @@ opt_field_or_var_spec:
|
|||
|
||||
fields_or_vars:
|
||||
fields_or_vars ',' field_or_var
|
||||
{ Lex->field_list.push_back($3); }
|
||||
{ Lex->field_list.push_back($3, thd->mem_root); }
|
||||
| field_or_var
|
||||
{ Lex->field_list.push_back($1); }
|
||||
{ Lex->field_list.push_back($1, thd->mem_root); }
|
||||
;
|
||||
|
||||
field_or_var:
|
||||
|
@ -13367,8 +13382,8 @@ load_data_set_elem:
|
|||
simple_ident_nospvar equal remember_name expr_or_default remember_end
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
if (lex->update_list.push_back($1) ||
|
||||
lex->value_list.push_back($4))
|
||||
if (lex->update_list.push_back($1, thd->mem_root) ||
|
||||
lex->value_list.push_back($4, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
$4->set_name_no_truncate($3, (uint) ($5 - $3), thd->charset());
|
||||
}
|
||||
|
@ -13504,7 +13519,7 @@ param_marker:
|
|||
: thd->query();
|
||||
item= new (thd->mem_root) Item_param(thd, lip->get_tok_start() -
|
||||
query_start);
|
||||
if (!($$= item) || lex->param_list.push_back(item))
|
||||
if (!($$= item) || lex->param_list.push_back(item, thd->mem_root))
|
||||
{
|
||||
my_message(ER_OUT_OF_RESOURCES, ER_THD(thd, ER_OUT_OF_RESOURCES), MYF(0));
|
||||
MYSQL_YYABORT;
|
||||
|
@ -14741,7 +14756,7 @@ option_value_no_option_type:
|
|||
set_var_user *var= new set_var_user(item);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
Lex->var_list.push_back(var);
|
||||
Lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
| '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default
|
||||
{
|
||||
|
@ -14766,7 +14781,7 @@ option_value_no_option_type:
|
|||
cs2);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
| NAMES_SYM equal expr
|
||||
{
|
||||
|
@ -14800,7 +14815,7 @@ option_value_no_option_type:
|
|||
var= new set_var_collation_client(cs3, cs3, cs3);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
| DEFAULT ROLE_SYM grant_role
|
||||
{
|
||||
|
@ -14813,7 +14828,7 @@ option_value_no_option_type:
|
|||
$3->user);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
thd->lex->autocommit= TRUE;
|
||||
if (lex->sphead)
|
||||
lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
|
||||
|
@ -14824,7 +14839,7 @@ option_value_no_option_type:
|
|||
set_var_default_role *var= new set_var_default_role($5, $3->user);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
thd->lex->autocommit= TRUE;
|
||||
if (lex->sphead)
|
||||
lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
|
||||
|
@ -14835,7 +14850,7 @@ option_value_no_option_type:
|
|||
set_var_role *var= new set_var_role($2);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
| PASSWORD_SYM opt_for_user text_or_password
|
||||
{
|
||||
|
@ -14843,7 +14858,7 @@ option_value_no_option_type:
|
|||
set_var_password *var= new set_var_password(lex->definer);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
lex->autocommit= TRUE;
|
||||
if (lex->sphead)
|
||||
lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
|
||||
|
@ -14954,7 +14969,7 @@ transaction_access_mode:
|
|||
item);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -14971,7 +14986,7 @@ isolation_level:
|
|||
item);
|
||||
if (var == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->var_list.push_back(var);
|
||||
lex->var_list.push_back(var, thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -15261,7 +15276,7 @@ revoke_command:
|
|||
| admin_option_for_role FROM user_and_role_list
|
||||
{
|
||||
Lex->sql_command= SQLCOM_REVOKE_ROLE;
|
||||
if (Lex->users_list.push_front($1))
|
||||
if (Lex->users_list.push_front($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -15322,7 +15337,7 @@ grant_command:
|
|||
LEX *lex= Lex;
|
||||
lex->sql_command= SQLCOM_GRANT_ROLE;
|
||||
/* The first role is the one that is granted */
|
||||
if (Lex->users_list.push_front($1))
|
||||
if (Lex->users_list.push_front($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
|
||||
|
@ -15339,12 +15354,12 @@ opt_with_admin_option:
|
|||
role_list:
|
||||
grant_role
|
||||
{
|
||||
if (Lex->users_list.push_back($1))
|
||||
if (Lex->users_list.push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| role_list ',' grant_role
|
||||
{
|
||||
if (Lex->users_list.push_back($3))
|
||||
if (Lex->users_list.push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -15549,12 +15564,12 @@ grant_ident:
|
|||
user_list:
|
||||
user
|
||||
{
|
||||
if (Lex->users_list.push_back($1))
|
||||
if (Lex->users_list.push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| user_list ',' user
|
||||
{
|
||||
if (Lex->users_list.push_back($3))
|
||||
if (Lex->users_list.push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -15562,12 +15577,12 @@ user_list:
|
|||
grant_list:
|
||||
grant_user
|
||||
{
|
||||
if (Lex->users_list.push_back($1))
|
||||
if (Lex->users_list.push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| grant_list ',' grant_user
|
||||
{
|
||||
if (Lex->users_list.push_back($3))
|
||||
if (Lex->users_list.push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -15575,12 +15590,12 @@ grant_list:
|
|||
user_and_role_list:
|
||||
user_or_role
|
||||
{
|
||||
if (Lex->users_list.push_back($1))
|
||||
if (Lex->users_list.push_back($1, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| user_and_role_list ',' user_or_role
|
||||
{
|
||||
if (Lex->users_list.push_back($3))
|
||||
if (Lex->users_list.push_back($3, thd->mem_root))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -15653,7 +15668,7 @@ column_list_id:
|
|||
LEX_COLUMN *col= new LEX_COLUMN (*new_str,lex->which_columns);
|
||||
if (col == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->columns.push_back(col);
|
||||
lex->columns.push_back(col, thd->mem_root);
|
||||
}
|
||||
}
|
||||
;
|
||||
|
@ -16128,15 +16143,17 @@ view_list_opt:
|
|||
|
||||
view_list:
|
||||
ident
|
||||
{
|
||||
Lex->view_list.push_back((LEX_STRING*)
|
||||
thd->memdup(&$1, sizeof(LEX_STRING)));
|
||||
}
|
||||
{
|
||||
Lex->view_list.push_back((LEX_STRING*)
|
||||
thd->memdup(&$1, sizeof(LEX_STRING)),
|
||||
thd->mem_root);
|
||||
}
|
||||
| view_list ',' ident
|
||||
{
|
||||
Lex->view_list.push_back((LEX_STRING*)
|
||||
thd->memdup(&$3, sizeof(LEX_STRING)));
|
||||
}
|
||||
{
|
||||
Lex->view_list.push_back((LEX_STRING*)
|
||||
thd->memdup(&$3, sizeof(LEX_STRING)),
|
||||
thd->mem_root);
|
||||
}
|
||||
;
|
||||
|
||||
view_select:
|
||||
|
|
|
@ -5354,9 +5354,10 @@ Item *create_view_field(THD *thd, TABLE_LIST *view, Item **field_ref,
|
|||
{
|
||||
DBUG_RETURN(field);
|
||||
}
|
||||
Item *item= new (thd->mem_root) Item_direct_view_ref(thd, &view->view->select_lex.context,
|
||||
field_ref, view->alias,
|
||||
name, view);
|
||||
Item *item= (new (thd->mem_root)
|
||||
Item_direct_view_ref(thd, &view->view->select_lex.context,
|
||||
field_ref, view->alias,
|
||||
name, view));
|
||||
/*
|
||||
Force creation of nullable item for the result tmp table for outer joined
|
||||
views/derived tables.
|
||||
|
@ -5364,7 +5365,7 @@ Item *create_view_field(THD *thd, TABLE_LIST *view, Item **field_ref,
|
|||
if (view->table && view->table->maybe_null)
|
||||
item->maybe_null= TRUE;
|
||||
/* Save item in case we will need to fall back to materialization. */
|
||||
view->used_items.push_front(item);
|
||||
view->used_items.push_front(item, thd->mem_root);
|
||||
DBUG_RETURN(item);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue