Stage 2 of MDEV-6152:

- Added mem_root to all calls to new Item
- Added private method operator new(size_t size) to Item to ensure that
  we always use a mem_root when creating an item.

This saves use once call to current_thd per Item creation
This commit is contained in:
Monty 2015-08-20 15:24:13 +03:00 committed by Sergey Vojtovich
parent 31e365efae
commit 1bae0d9e56
51 changed files with 1146 additions and 881 deletions

View File

@ -99,20 +99,23 @@ static COND* make_cond(THD *thd, TABLE_LIST *tables, LEX_STRING *filter)
nrc.init();
nrc.resolve_in_table_list_only(tables);
res= new Item_cond_or(thd);
res= new (thd->mem_root) Item_cond_or(thd);
if (!res)
return OOM;
for (; filter->str; filter++)
{
Item_field *fld= new Item_field(thd, &nrc, db, table, field);
Item_string *pattern= new Item_string(thd, filter->str, filter->length, cs);
Item_string *escape= new Item_string(thd, "\\", 1, cs);
Item_field *fld= new (thd->mem_root) Item_field(thd, &nrc, db, table,
field);
Item_string *pattern= new (thd->mem_root) Item_string(thd, filter->str,
filter->length, cs);
Item_string *escape= new (thd->mem_root) Item_string(thd, "\\", 1, cs);
if (!fld || !pattern || !escape)
return OOM;
Item_func_like *like= new Item_func_like(thd, fld, pattern, escape, 0);
Item_func_like *like= new (thd->mem_root) Item_func_like(thd, fld, pattern,
escape, 0);
if (!like)
return OOM;

View File

@ -632,37 +632,43 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol)
List<Item> field_list;
LEX_STRING sql_mode;
const String *tz_name;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("send_show_create_event");
show_str.length(0);
if (et->get_create_event(thd, &show_str))
DBUG_RETURN(TRUE);
field_list.push_back(new Item_empty_string(thd, "Event", NAME_CHAR_LEN));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "Event", NAME_CHAR_LEN));
if (sql_mode_string_representation(thd, et->sql_mode, &sql_mode))
DBUG_RETURN(TRUE);
field_list.push_back(new Item_empty_string(thd, "sql_mode",
(uint) sql_mode.length));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "sql_mode",
(uint) sql_mode.length));
tz_name= et->time_zone->get_name();
field_list.push_back(new Item_empty_string(thd, "time_zone",
tz_name->length()));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "time_zone", tz_name->length()));
field_list.push_back(new Item_empty_string(thd, "Create Event",
show_str.length()));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "Create Event",
show_str.length()));
field_list.push_back(
new Item_empty_string(thd, "character_set_client", MY_CS_NAME_SIZE));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
MY_CS_NAME_SIZE));
field_list.push_back(
new Item_empty_string(thd, "collation_connection", 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 Item_empty_string(thd, "Database Collation", MY_CS_NAME_SIZE));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "Database Collation",
MY_CS_NAME_SIZE));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))

View File

@ -10097,7 +10097,7 @@ Create_field::Create_field(THD *thd, Field *old_field, Field *orig_field)
StringBuffer<MAX_FIELD_WIDTH> tmp(charset);
String *res= orig_field->val_str(&tmp);
char *pos= (char*) sql_strmake(res->ptr(), res->length());
def= new Item_string(thd, pos, res->length(), charset);
def= new (thd->mem_root) Item_string(thd, pos, res->length(), charset);
}
orig_field->move_field_offset(-diff); // Back to record[0]
}

View File

@ -1981,16 +1981,21 @@ bool mysql_xa_recover(THD *thd)
{
List<Item> field_list;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysql_xa_recover");
field_list.push_back(new Item_int(thd, "formatID", 0,
MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new Item_int(thd, "gtrid_length", 0,
MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new Item_int(thd, "bqual_length", 0,
MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new Item_empty_string(thd, "data",
XIDDATASIZE));
field_list.push_back(new (mem_root)
Item_int(thd, "formatID", 0,
MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new (mem_root)
Item_int(thd, "gtrid_length", 0,
MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new (mem_root)
Item_int(thd, "bqual_length", 0,
MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new (mem_root)
Item_empty_string(thd, "data",
XIDDATASIZE));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -5525,11 +5530,12 @@ bool ha_show_status(THD *thd, handlerton *db_type, enum ha_stat_type stat)
{
List<Item> field_list;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
bool result;
field_list.push_back(new Item_empty_string(thd, "Type", 10));
field_list.push_back(new Item_empty_string(thd, "Name", FN_REFLEN));
field_list.push_back(new Item_empty_string(thd, "Status", 10));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))

View File

@ -693,7 +693,7 @@ Item* Item::set_expr_cache(THD *thd)
{
DBUG_ENTER("Item::set_expr_cache");
Item_cache_wrapper *wrapper;
if ((wrapper= new Item_cache_wrapper(thd, this)) &&
if ((wrapper= new (thd->mem_root) Item_cache_wrapper(thd, this)) &&
!wrapper->fix_fields(thd, (Item**)&wrapper))
{
if (wrapper->set_cache(thd))
@ -1046,7 +1046,7 @@ Item *Item::safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
{
if (!needs_charset_converter(tocs))
return this;
Item_func_conv_charset *conv= new Item_func_conv_charset(thd, this, tocs, 1);
Item_func_conv_charset *conv= new (thd->mem_root) Item_func_conv_charset(thd, this, tocs, 1);
return conv->safe ? conv : NULL;
}
@ -1058,7 +1058,7 @@ Item *Item::safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
Example:
Item_singlerow_subselect has "Item_cache **row".
Creating of Item_func_conv_charset followed by THD::change_item_tree()
should not change row[i] from Item_cache directly to Item_func_conv_charset, because Item_singlerow_subselect
should not change row[i] from Item_cache directly to Item_func_conv_charset,
because Item_singlerow_subselect later calls Item_cache-specific methods,
e.g. row[i]->store() and row[i]->cache_value().
@ -1079,7 +1079,7 @@ Item *Item_cache::safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
if (conv == example)
return this;
Item_cache *cache;
if (!conv || !(cache= new Item_cache_str(thd, conv)))
if (!conv || !(cache= new (thd->mem_root) Item_cache_str(thd, conv)))
return NULL; // Safe conversion is not possible, or OEM
cache->setup(thd, conv);
cache->fixed= false; // Make Item::fix_fields() happy
@ -1135,8 +1135,10 @@ Item *Item::const_charset_converter(THD *thd, CHARSET_INFO *tocs,
DBUG_ASSERT(fixed);
StringBuffer<64>tmp;
String *s= val_str(&tmp);
MEM_ROOT *mem_root= thd->mem_root;
if (!s)
return new Item_null(thd, (char *) func_name, tocs);
return new (mem_root) Item_null(thd, (char *) func_name, tocs);
if (!needs_charset_converter(s->length(), tocs))
{
@ -1147,14 +1149,16 @@ Item *Item::const_charset_converter(THD *thd, CHARSET_INFO *tocs,
}
uint conv_errors;
Item_string *conv= func_name ?
new Item_static_string_func(thd, func_name,
s, tocs, &conv_errors,
collation.derivation,
collation.repertoire) :
new Item_string(thd, s, tocs, &conv_errors,
collation.derivation,
collation.repertoire);
Item_string *conv= (func_name ?
new (mem_root)
Item_static_string_func(thd, func_name,
s, tocs, &conv_errors,
collation.derivation,
collation.repertoire) :
new (mem_root)
Item_string(thd, s, tocs, &conv_errors,
collation.derivation,
collation.repertoire));
if (!conv || (conv_errors && lossless))
{
@ -1797,9 +1801,10 @@ void Item::split_sum_func2(THD *thd, Item **ref_pointer_array,
Item *real_itm= real_item();
ref_pointer_array[el]= real_itm;
if (!(item_ref= new Item_aggregate_ref(thd,
&thd->lex->current_select->context,
ref_pointer_array + el, 0, name)))
if (!(item_ref= (new (thd->mem_root)
Item_aggregate_ref(thd,
&thd->lex->current_select->context,
ref_pointer_array + el, 0, name))))
return; // fatal_error is set
if (type() == SUM_FUNC_ITEM)
item_ref->depended_from= ((Item_sum *) this)->depended_from();
@ -2091,7 +2096,7 @@ bool agg_item_set_converter(DTCollation &coll, const char *fname,
if (conv == *arg)
continue;
if (!conv && ((*arg)->collation.repertoire == MY_REPERTOIRE_ASCII))
conv= new Item_func_conv_charset(thd, *arg, coll.collation, 1);
conv= new (thd->mem_root) Item_func_conv_charset(thd, *arg, coll.collation, 1);
if (!conv)
{
@ -2885,6 +2890,13 @@ void Item_decimal::set_decimal_value(my_decimal *value_par)
}
Item *Item_decimal::clone_item(THD *thd)
{
return new (thd->mem_root) Item_decimal(thd, name, &decimal_value, decimals,
max_length);
}
String *Item_float::val_str(String *str)
{
// following assert is redundant, because fixed=1 assigned in constructor
@ -2903,6 +2915,13 @@ my_decimal *Item_float::val_decimal(my_decimal *decimal_value)
}
Item *Item_float::clone_item(THD *thd)
{
return new (thd->mem_root) Item_float(thd, name, value, decimals,
max_length);
}
void Item_string::print(String *str, enum_query_type query_type)
{
const bool print_introducer=
@ -3084,6 +3103,11 @@ Item *Item_null::safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
return this;
}
Item *Item_null::clone_item(THD *thd)
{
return new (thd->mem_root) Item_null(thd, name);
}
/*********************** Item_param related ******************************/
/**
@ -3698,24 +3722,28 @@ bool Item_param::basic_const_item() const
}
/* see comments in the header file */
Item *
Item_param::clone_item(THD *thd)
{
/* see comments in the header file */
MEM_ROOT *mem_root= thd->mem_root;
switch (state) {
case NULL_VALUE:
return new Item_null(thd, name);
return new (mem_root) Item_null(thd, name);
case INT_VALUE:
return (unsigned_flag ?
new Item_uint(thd, name, value.integer, max_length) :
new Item_int(thd, name, value.integer, max_length));
new (mem_root) Item_uint(thd, name, value.integer, max_length) :
new (mem_root) Item_int(thd, name, value.integer, max_length));
case REAL_VALUE:
return new Item_float(thd, name, value.real, decimals, max_length);
return new (mem_root) Item_float(thd, name, value.real, decimals,
max_length);
case STRING_VALUE:
case LONG_DATA_VALUE:
return new Item_string(thd, name, str_value.c_ptr_quick(),
str_value.length(), str_value.charset(),
collation.derivation, collation.repertoire);
return new (mem_root) Item_string(thd, name, str_value.c_ptr_quick(),
str_value.length(), str_value.charset(),
collation.derivation,
collation.repertoire);
case TIME_VALUE:
break;
case NO_VALUE:
@ -3969,18 +3997,19 @@ bool Item_param::append_for_log(THD *thd, String *str)
Item_copy *Item_copy::create(THD *thd, Item *item)
{
MEM_ROOT *mem_root= thd->mem_root;
switch (item->result_type())
{
case STRING_RESULT:
return new Item_copy_string(thd, item);
return new (mem_root) Item_copy_string(thd, item);
case REAL_RESULT:
return new Item_copy_float(thd, item);
return new (mem_root) Item_copy_float(thd, item);
case INT_RESULT:
return item->unsigned_flag ?
new Item_copy_uint(thd, item) :
new Item_copy_int(thd, item);
new (mem_root) Item_copy_uint(thd, item) :
new (mem_root) Item_copy_int(thd, item);
case DECIMAL_RESULT:
return new Item_copy_decimal(thd, item);
return new (mem_root) Item_copy_decimal(thd, item);
case TIME_RESULT:
case ROW_RESULT:
case IMPOSSIBLE_RESULT:
@ -4778,7 +4807,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
fix_inner_refs() function.
*/
;
if (!(rf= new Item_outer_ref(thd, context, this)))
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);
@ -4885,13 +4914,16 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
save= *ref;
*ref= NULL; // Don't call set_properties()
rf= (place == IN_HAVING ?
new Item_ref(thd, context, ref, (char*) table_name,
(char*) field_name, alias_name_used) :
new (thd->mem_root)
Item_ref(thd, context, ref, (char*) table_name,
(char*) field_name, alias_name_used) :
(!select->group_list.elements ?
new Item_direct_ref(thd, context, ref, (char*) table_name,
(char*) field_name, alias_name_used) :
new Item_outer_ref(thd, context, ref, (char*) table_name,
(char*) field_name, alias_name_used)));
new (thd->mem_root)
Item_direct_ref(thd, context, ref, (char*) table_name,
(char*) field_name, alias_name_used) :
new (thd->mem_root)
Item_outer_ref(thd, context, ref, (char*) table_name,
(char*) field_name, alias_name_used)));
*ref= save;
if (!rf)
return -1;
@ -4924,7 +4956,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
if (last_checked_context->select_lex->having_fix_field)
{
Item_ref *rf;
rf= new Item_ref(thd, context, (*from_field)->table->s->db.str,
rf= new (thd->mem_root) Item_ref(thd, context, (*from_field)->table->s->db.str,
(*from_field)->table->alias.c_ptr(),
(char*) field_name);
if (!rf)
@ -5020,7 +5052,8 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
{
uint counter;
enum_resolution_type resolution;
Item** res= find_item_in_list(this, thd->lex->current_select->item_list,
Item** res= find_item_in_list(this,
thd->lex->current_select->item_list,
&counter, REPORT_EXCEPT_NOT_FOUND,
&resolution);
if (!res)
@ -5058,8 +5091,9 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
Item_ref to point to the Item in the select list and replace the
Item_field created by the parser with the new Item_ref.
*/
Item_ref *rf= new Item_ref(thd, context, db_name, table_name,
field_name);
Item_ref *rf= new (thd->mem_root)
Item_ref(thd, context, db_name, table_name,
field_name);
if (!rf)
return 1;
bool err= rf->fix_fields(thd, (Item **) &rf) || rf->check_cols(1);
@ -5350,12 +5384,12 @@ static void convert_zerofill_number_to_string(THD *thd, Item **item, Field_num *
res= (*item)->val_str(&tmp);
if ((*item)->is_null())
*item= new Item_null(thd);
*item= new (thd->mem_root) Item_null(thd);
else
{
field->prepend_zeros(res);
pos= (char *) sql_strmake (res->ptr(), res->length());
*item= new Item_string(thd, pos, res->length(), field->charset());
*item= new (thd->mem_root) Item_string(thd, pos, res->length(), field->charset());
}
}
@ -6043,6 +6077,14 @@ int Item_string::save_in_field(Field *field, bool no_conversions)
}
Item *Item_string::clone_item(THD *thd)
{
return new (thd->mem_root)
Item_string(thd, name, str_value.ptr(),
str_value.length(), collation.collation);
}
static int save_int_value_in_field (Field *field, longlong nr,
bool null_value, bool unsigned_flag)
{
@ -6059,6 +6101,12 @@ int Item_int::save_in_field(Field *field, bool no_conversions)
}
Item *Item_int::clone_item(THD *thd)
{
return new (thd->mem_root) Item_int(thd, name, value, max_length);
}
void Item_datetime::set(longlong packed)
{
unpack_time(packed, &ltime);
@ -6090,18 +6138,25 @@ Item *Item_int_with_ref::clone_item(THD *thd)
parameter markers.
*/
return (ref->unsigned_flag ?
new Item_uint(thd, ref->name, ref->val_int(), ref->max_length) :
new Item_int(thd, ref->name, ref->val_int(), ref->max_length));
new (thd->mem_root)
Item_uint(thd, ref->name, ref->val_int(), ref->max_length) :
new (thd->mem_root)
Item_int(thd, ref->name, ref->val_int(), ref->max_length));
}
Item_num *Item_uint::neg(THD *thd)
{
Item_decimal *item= new Item_decimal(thd, value, 1);
Item_decimal *item= new (thd->mem_root) Item_decimal(thd, value, 1);
return item->neg(thd);
}
Item *Item_uint::clone_item(THD *thd)
{
return new (thd->mem_root) Item_uint(thd, name, value, max_length);
}
static uint nr_of_decimals(const char *str, const char *end)
{
const char *decimal_point;
@ -6665,7 +6720,7 @@ Item *Item_field::update_value_transformer(THD *thd, uchar *select_arg)
ref_pointer_array[el]= (Item*)this;
all_fields->push_front((Item*)this);
ref= new Item_ref(thd, &select->context, ref_pointer_array + el,
ref= new (thd->mem_root) Item_ref(thd, &select->context, ref_pointer_array + el,
table_name, field_name);
return ref;
}
@ -6959,7 +7014,7 @@ bool Item_ref::fix_fields(THD *thd, Item **reference)
if (from_field != not_found_field)
{
Item_field* fld;
if (!(fld= new Item_field(thd, from_field)))
if (!(fld= new (thd->mem_root) Item_field(thd, from_field)))
goto error;
thd->change_item_tree(reference, fld);
mark_as_dependent(thd, last_checked_context->select_lex,
@ -7406,7 +7461,7 @@ Item *Item_ref::get_tmp_table_item(THD *thd)
if (!result_field)
return (*ref)->get_tmp_table_item(thd);
Item_field *item= new Item_field(thd, result_field);
Item_field *item= new (thd->mem_root) Item_field(thd, result_field);
if (item)
{
item->table_name= table_name;
@ -7884,11 +7939,11 @@ int Item_cache_wrapper::save_in_field(Field *to, bool no_conversions)
}
Item* Item_cache_wrapper::get_tmp_table_item(THD *thd_arg)
Item* Item_cache_wrapper::get_tmp_table_item(THD *thd)
{
if (!orig_item->with_sum_func && !orig_item->const_item())
return new Item_field(thd_arg, result_field);
return copy_or_same(thd_arg);
return new (thd->mem_root) Item_field(thd, result_field);
return copy_or_same(thd);
}
@ -8575,11 +8630,13 @@ Item_result item_cmp_type(Item_result a,Item_result b)
void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
{
Item *item= *ref;
Item *new_item= NULL;
if (item->basic_const_item())
return; // Can't be better
Item *new_item= NULL;
Item_result res_type=item_cmp_type(comp_item->cmp_type(), item->cmp_type());
char *name=item->name; // Alloced by sql_alloc
MEM_ROOT *mem_root= thd->mem_root;
switch (res_type) {
case TIME_RESULT:
@ -8589,7 +8646,7 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
/* the following call creates a constant and puts it in new_item */
get_datetime_value(thd, &ref_copy, &new_item, comp_item, &is_null);
if (is_null)
new_item= new Item_null(thd, name);
new_item= new (mem_root) Item_null(thd, name);
break;
}
case STRING_RESULT:
@ -8598,12 +8655,12 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
String tmp(buff,sizeof(buff),&my_charset_bin),*result;
result=item->val_str(&tmp);
if (item->null_value)
new_item= new Item_null(thd, name);
new_item= new (mem_root) Item_null(thd, name);
else
{
uint length= result->length();
char *tmp_str= sql_strmake(result->ptr(), length);
new_item= new Item_string(thd, name, tmp_str, length, result->charset());
new_item= new (mem_root) Item_string(thd, name, tmp_str, length, result->charset());
}
break;
}
@ -8612,8 +8669,8 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
longlong result=item->val_int();
uint length=item->max_length;
bool null_value=item->null_value;
new_item= (null_value ? (Item*) new Item_null(thd, name) :
(Item*) new Item_int(thd, name, result, length));
new_item= (null_value ? (Item*) new (mem_root) Item_null(thd, name) :
(Item*) new (mem_root) Item_int(thd, name, result, length));
break;
}
case ROW_RESULT:
@ -8651,8 +8708,8 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
double result= item->val_real();
uint length=item->max_length,decimals=item->decimals;
bool null_value=item->null_value;
new_item= (null_value ? (Item*) new Item_null(thd, name) : (Item*)
new Item_float(thd, name, result, decimals, length));
new_item= (null_value ? (Item*) new (mem_root) Item_null(thd, name) : (Item*)
new (mem_root) Item_float(thd, name, result, decimals, length));
break;
}
case DECIMAL_RESULT:
@ -8662,8 +8719,8 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
uint length= item->max_length, decimals= item->decimals;
bool null_value= item->null_value;
new_item= (null_value ?
(Item*) new Item_null(thd, name) :
(Item*) new Item_decimal(thd, name, result, length, decimals));
(Item*) new (mem_root) Item_null(thd, name) :
(Item*) new (mem_root) Item_decimal(thd, name, result, length, decimals));
break;
}
case IMPOSSIBLE_RESULT:
@ -8803,21 +8860,23 @@ Item_cache* Item_cache::get_cache(THD *thd, const Item *item)
@return cache item
*/
Item_cache* Item_cache::get_cache(THD *thd, const Item *item, const Item_result type)
Item_cache* Item_cache::get_cache(THD *thd, const Item *item,
const Item_result type)
{
MEM_ROOT *mem_root= thd->mem_root;
switch (type) {
case INT_RESULT:
return new Item_cache_int(thd, item->field_type());
return new (mem_root) Item_cache_int(thd, item->field_type());
case REAL_RESULT:
return new Item_cache_real(thd);
return new (mem_root) Item_cache_real(thd);
case DECIMAL_RESULT:
return new Item_cache_decimal(thd);
return new (mem_root) Item_cache_decimal(thd);
case STRING_RESULT:
return new Item_cache_str(thd, item);
return new (mem_root) Item_cache_str(thd, item);
case ROW_RESULT:
return new Item_cache_row(thd);
return new (mem_root) Item_cache_row(thd);
case TIME_RESULT:
return new Item_cache_temporal(thd, item->field_type());
return new (mem_root) Item_cache_temporal(thd, item->field_type());
case IMPOSSIBLE_RESULT:
DBUG_ASSERT(0);
break;
@ -8922,7 +8981,8 @@ int Item_cache_int::save_in_field(Field *field, bool no_conversions)
}
Item_cache_temporal::Item_cache_temporal(THD *thd, enum_field_types field_type_arg):
Item_cache_temporal::Item_cache_temporal(THD *thd,
enum_field_types field_type_arg):
Item_cache_int(thd, field_type_arg)
{
if (mysql_type_to_time_type(cached_field_type) == MYSQL_TIMESTAMP_ERROR)
@ -9050,6 +9110,15 @@ void Item_cache_temporal::store_packed(longlong val_arg, Item *example_arg)
}
Item *Item_cache_temporal::clone_item(THD *thd)
{
Item_cache_temporal *item= new (thd->mem_root)
Item_cache_temporal(thd, cached_field_type);
item->store_packed(value, example);
return item;
}
bool Item_cache_real::cache_value()
{
if (!example)

View File

@ -610,9 +610,9 @@ class Item: public Type_std_attributes
*/
uint join_tab_idx;
static void *operator new(size_t size);
public:
static void *operator new(size_t size) throw ()
{ return sql_alloc(size); }
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
{ return alloc_root(mem_root, size); }
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
@ -2454,7 +2454,7 @@ public:
enum Item_result result_type () const { return STRING_RESULT; }
enum_field_types field_type() const { return MYSQL_TYPE_NULL; }
bool basic_const_item() const { return 1; }
Item *clone_item(THD *thd) { return new Item_null(thd, name); }
Item *clone_item(THD *thd);
bool is_null() { return 1; }
virtual inline void print(String *str, enum_query_type query_type)
@ -2663,7 +2663,7 @@ public:
String *val_str(String*);
int save_in_field(Field *field, bool no_conversions);
bool basic_const_item() const { return 1; }
Item *clone_item(THD *thd) { return new Item_int(thd, name, value, max_length); }
Item *clone_item(THD *thd);
virtual void print(String *str, enum_query_type query_type);
Item_num *neg(THD *thd) { value= -value; return this; }
uint decimal_precision() const
@ -2684,8 +2684,7 @@ public:
double val_real()
{ DBUG_ASSERT(fixed == 1); return ulonglong2double((ulonglong)value); }
String *val_str(String*);
Item *clone_item(THD *thd)
{ return new Item_uint(thd, name, value, max_length); }
Item *clone_item(THD *thd);
virtual void print(String *str, enum_query_type query_type);
Item_num *neg(THD *thd);
uint decimal_precision() const { return max_length; }
@ -2729,10 +2728,7 @@ public:
my_decimal *val_decimal(my_decimal *val) { return &decimal_value; }
int save_in_field(Field *field, bool no_conversions);
bool basic_const_item() const { return 1; }
Item *clone_item(THD *thd)
{
return new Item_decimal(thd, name, &decimal_value, decimals, max_length);
}
Item *clone_item(THD *thd);
virtual void print(String *str, enum_query_type query_type);
Item_num *neg(THD *thd)
{
@ -2788,8 +2784,7 @@ public:
String *val_str(String*);
my_decimal *val_decimal(my_decimal *);
bool basic_const_item() const { return 1; }
Item *clone_item(THD *thd)
{ return new Item_float(thd, name, value, decimals, max_length); }
Item *clone_item(THD *thd);
Item_num *neg(THD *thd) { value= -value; return this; }
virtual void print(String *str, enum_query_type query_type);
bool eq(const Item *item, bool binary_cmp) const
@ -2914,11 +2909,7 @@ public:
{
return str_eq(&str_value, item, binary_cmp);
}
Item *clone_item(THD *thd)
{
return new Item_string(thd, name, str_value.ptr(),
str_value.length(), collation.collation);
}
Item *clone_item(THD *thd);
Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
{
return const_charset_converter(thd, tocs, true);
@ -4849,12 +4840,7 @@ public:
is a constant and need not be optimized further.
Important when storing packed datetime values.
*/
Item *clone_item(THD *thd)
{
Item_cache_temporal *item= new Item_cache_temporal(thd, cached_field_type);
item->store_packed(value, example);
return item;
}
Item *clone_item(THD *thd);
};

View File

@ -442,7 +442,7 @@ static bool convert_const_to_int(THD *thd, Item_field *field_item,
if (0 == field_cmp)
{
Item *tmp= new Item_int_with_ref(thd, field->val_int(), *item,
Item *tmp= new (thd->mem_root) Item_int_with_ref(thd, field->val_int(), *item,
MY_TEST(field->flags & UNSIGNED_FLAG));
if (tmp)
thd->change_item_tree(item, tmp);
@ -878,7 +878,7 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
{
Query_arena backup;
Query_arena *save_arena= thd->switch_to_arena_for_cached_items(&backup);
Item_cache_temporal *cache= new Item_cache_temporal(thd, f_type);
Item_cache_temporal *cache= new (thd->mem_root) Item_cache_temporal(thd, f_type);
if (save_arena)
thd->set_query_arena(save_arena);
@ -3475,6 +3475,12 @@ uchar *in_string::get_value(Item *item)
return (uchar*) item->val_str(&tmp);
}
Item *in_string::create_item(THD *thd)
{
return new (thd->mem_root) Item_string_for_in_vector(thd, collation);
}
in_row::in_row(uint elements, Item * item)
{
base= (char*) new cmp_item_row[count= elements];
@ -3531,6 +3537,16 @@ uchar *in_longlong::get_value(Item *item)
return (uchar*) &tmp;
}
Item *in_longlong::create_item(THD *thd)
{
/*
We're created a signed INT, this may not be correct in
general case (see BUG#19342).
*/
return new (thd->mem_root) Item_int(thd, (longlong)0);
}
void in_datetime::set(uint pos,Item *item)
{
Item **tmp_item= &item;
@ -3552,6 +3568,12 @@ uchar *in_datetime::get_value(Item *item)
return (uchar*) &tmp;
}
Item *in_datetime::create_item(THD *thd)
{
return new (thd->mem_root) Item_datetime(thd);
}
in_double::in_double(uint elements)
:in_vector(elements,sizeof(double),(qsort2_cmp) cmp_double, 0)
{}
@ -3569,6 +3591,11 @@ uchar *in_double::get_value(Item *item)
return (uchar*) &tmp;
}
Item *in_double::create_item(THD *thd)
{
return new (thd->mem_root) Item_float(thd, 0.0, 0);
}
in_decimal::in_decimal(uint elements)
:in_vector(elements, sizeof(my_decimal),(qsort2_cmp) cmp_decimal, 0)
@ -3596,6 +3623,11 @@ uchar *in_decimal::get_value(Item *item)
return (uchar *)result;
}
Item *in_decimal::create_item(THD *thd)
{
return new (thd->mem_root) Item_decimal(thd, 0, FALSE);
}
cmp_item* cmp_item::get_comparator(Item_result type, Item *warn_item,
CHARSET_INFO *cs)
@ -4220,6 +4252,15 @@ Item_cond::Item_cond(THD *thd, Item_cond *item)
}
Item *Item_cond_and::copy_andor_structure(THD *thd)
{
Item_cond_and *item;
if ((item= new (thd->mem_root) Item_cond_and(thd, this)))
item->copy_andor_arguments(thd, this);
return item;
}
void Item_cond::copy_andor_arguments(THD *thd, Item_cond *item)
{
List_iterator_fast<Item> li(item->list);
@ -4284,7 +4325,7 @@ Item_cond::fix_fields(THD *thd, Item **ref)
Query_arena backup, *arena;
Item *new_item;
arena= thd->activate_stmt_arena_if_needed(&backup);
if ((new_item= new Item_func_ne(thd, item, new Item_int(thd, 0, 1))))
if ((new_item= new (thd->mem_root) Item_func_ne(thd, item, new (thd->mem_root) Item_int(thd, 0, 1))))
li.replace(item= new_item);
if (arena)
thd->restore_active_arena(arena, &backup);
@ -4606,7 +4647,7 @@ void Item_cond::neg_arguments(THD *thd)
Item *new_item= item->neg_transformer(thd);
if (!new_item)
{
if (!(new_item= new Item_func_not(thd, item)))
if (!(new_item= new (thd->mem_root) Item_func_not(thd, item)))
return; // Fatal OEM error
}
(void) li.replace(new_item);
@ -4624,7 +4665,6 @@ void Item_cond_and::mark_as_condition_AND_part(TABLE_LIST *embedding)
}
}
/**
Evaluation of AND(expr, expr, expr ...).
@ -4682,6 +4722,15 @@ longlong Item_cond_or::val_int()
return 0;
}
Item *Item_cond_or::copy_andor_structure(THD *thd)
{
Item_cond_or *item;
if ((item= new (thd->mem_root) Item_cond_or(thd, this)))
item->copy_andor_arguments(thd, this);
return item;
}
/**
Create an AND expression from two expressions.
@ -4709,7 +4758,7 @@ Item *and_expressions(THD *thd, Item *a, Item *b, Item **org_item)
if (a == *org_item)
{
Item_cond *res;
if ((res= new Item_cond_and(thd, a, (Item*) b)))
if ((res= new (thd->mem_root) Item_cond_and(thd, a, (Item*) b)))
{
res->used_tables_cache= a->used_tables() | b->used_tables();
res->not_null_tables_cache= a->not_null_tables() | b->not_null_tables();
@ -5527,7 +5576,7 @@ bool Item_func_not::fix_fields(THD *thd, Item **ref)
Item *new_item;
bool rc= TRUE;
arena= thd->activate_stmt_arena_if_needed(&backup);
if ((new_item= new Item_func_eq(thd, args[0], new Item_int(thd, 0, 1))))
if ((new_item= new (thd->mem_root) Item_func_eq(thd, args[0], new (thd->mem_root) Item_int(thd, 0, 1))))
{
new_item->name= name;
rc= (*ref= new_item)->fix_fields(thd, ref);
@ -5579,7 +5628,7 @@ Item *Item_func_xor::neg_transformer(THD *thd)
*/
Item *Item_func_isnull::neg_transformer(THD *thd)
{
Item *item= new Item_func_isnotnull(thd, args[0]);
Item *item= new (thd->mem_root) Item_func_isnotnull(thd, args[0]);
return item;
}
@ -5589,7 +5638,7 @@ Item *Item_func_isnull::neg_transformer(THD *thd)
*/
Item *Item_func_isnotnull::neg_transformer(THD *thd)
{
Item *item= new Item_func_isnull(thd, args[0]);
Item *item= new (thd->mem_root) Item_func_isnull(thd, args[0]);
return item;
}
@ -5598,7 +5647,7 @@ Item *Item_cond_and::neg_transformer(THD *thd) /* NOT(a AND b AND ...) -> */
/* NOT a OR NOT b OR ... */
{
neg_arguments(thd);
Item *item= new Item_cond_or(thd, list);
Item *item= new (thd->mem_root) Item_cond_or(thd, list);
return item;
}
@ -5607,7 +5656,7 @@ Item *Item_cond_or::neg_transformer(THD *thd) /* NOT(a OR b OR ...) -> */
/* NOT a AND NOT b AND ... */
{
neg_arguments(thd);
Item *item= new Item_cond_and(thd, list);
Item *item= new (thd->mem_root) Item_cond_and(thd, list);
return item;
}
@ -5615,7 +5664,7 @@ Item *Item_cond_or::neg_transformer(THD *thd) /* NOT(a OR b OR ...) -> */
Item *Item_func_nop_all::neg_transformer(THD *thd)
{
/* "NOT (e $cmp$ ANY (SELECT ...)) -> e $rev_cmp$" ALL (SELECT ...) */
Item_func_not_all *new_item= new Item_func_not_all(thd, args[0]);
Item_func_not_all *new_item= new (thd->mem_root) Item_func_not_all(thd, args[0]);
Item_allany_subselect *allany= (Item_allany_subselect*)args[0];
allany->create_comp_func(FALSE);
allany->all= !allany->all;
@ -5626,7 +5675,7 @@ Item *Item_func_nop_all::neg_transformer(THD *thd)
Item *Item_func_not_all::neg_transformer(THD *thd)
{
/* "NOT (e $cmp$ ALL (SELECT ...)) -> e $rev_cmp$" ANY (SELECT ...) */
Item_func_nop_all *new_item= new Item_func_nop_all(thd, args[0]);
Item_func_nop_all *new_item= new (thd->mem_root) Item_func_nop_all(thd, args[0]);
Item_allany_subselect *allany= (Item_allany_subselect*)args[0];
allany->all= !allany->all;
allany->create_comp_func(TRUE);
@ -5636,37 +5685,37 @@ Item *Item_func_not_all::neg_transformer(THD *thd)
Item *Item_func_eq::negated_item(THD *thd) /* a = b -> a != b */
{
return new Item_func_ne(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_ne(thd, args[0], args[1]);
}
Item *Item_func_ne::negated_item(THD *thd) /* a != b -> a = b */
{
return new Item_func_eq(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_eq(thd, args[0], args[1]);
}
Item *Item_func_lt::negated_item(THD *thd) /* a < b -> a >= b */
{
return new Item_func_ge(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_ge(thd, args[0], args[1]);
}
Item *Item_func_ge::negated_item(THD *thd) /* a >= b -> a < b */
{
return new Item_func_lt(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_lt(thd, args[0], args[1]);
}
Item *Item_func_gt::negated_item(THD *thd) /* a > b -> a <= b */
{
return new Item_func_le(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_le(thd, args[0], args[1]);
}
Item *Item_func_le::negated_item(THD *thd) /* a <= b -> a > b */
{
return new Item_func_gt(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_gt(thd, args[0], args[1]);
}
/**

View File

@ -971,10 +971,7 @@ public:
~in_string();
void set(uint pos,Item *item);
uchar *get_value(Item *item);
Item* create_item(THD *thd)
{
return new Item_string_for_in_vector(thd, collation);
}
Item* create_item(THD *thd);
void value_to_item(uint pos, Item *item)
{
String *str=((String*) base)+pos;
@ -1001,15 +998,7 @@ public:
in_longlong(uint elements);
void set(uint pos,Item *item);
uchar *get_value(Item *item);
Item* create_item(THD *thd)
{
/*
We're created a signed INT, this may not be correct in
general case (see BUG#19342).
*/
return new Item_int(thd, (longlong)0);
}
Item* create_item(THD *thd);
void value_to_item(uint pos, Item *item)
{
((Item_int*) item)->value= ((packed_longlong*) base)[pos].val;
@ -1042,10 +1031,7 @@ public:
lval_cache(0) {};
void set(uint pos,Item *item);
uchar *get_value(Item *item);
Item* create_item(THD *thd)
{
return new Item_datetime(thd);
}
Item *create_item(THD *thd);
void value_to_item(uint pos, Item *item)
{
packed_longlong *val= reinterpret_cast<packed_longlong*>(base)+pos;
@ -1063,10 +1049,7 @@ public:
in_double(uint elements);
void set(uint pos,Item *item);
uchar *get_value(Item *item);
Item *create_item(THD *thd)
{
return new Item_float(thd, 0.0, 0);
}
Item *create_item(THD *thd);
void value_to_item(uint pos, Item *item)
{
((Item_float*)item)->value= ((double*) base)[pos];
@ -1082,10 +1065,7 @@ public:
in_decimal(uint elements);
void set(uint pos, Item *item);
uchar *get_value(Item *item);
Item *create_item(THD *thd)
{
return new Item_decimal(thd, 0, FALSE);
}
Item *create_item(THD *thd);
void value_to_item(uint pos, Item *item)
{
my_decimal *dec= ((my_decimal *)base) + pos;
@ -2178,13 +2158,7 @@ public:
const char *func_name() const { return "and"; }
table_map not_null_tables() const
{ return abort_on_null ? not_null_tables_cache: and_tables_cache; }
Item* copy_andor_structure(THD *thd)
{
Item_cond_and *item;
if ((item= new Item_cond_and(thd, this)))
item->copy_andor_arguments(thd, this);
return item;
}
Item *copy_andor_structure(THD *thd);
Item *neg_transformer(THD *thd);
void mark_as_condition_AND_part(TABLE_LIST *embedding);
virtual uint exists2in_reserved_items() { return list.elements; };
@ -2217,13 +2191,7 @@ public:
longlong val_int();
const char *func_name() const { return "or"; }
table_map not_null_tables() const { return and_tables_cache; }
Item* copy_andor_structure(THD *thd)
{
Item_cond_or *item;
if ((item= new Item_cond_or(thd, this)))
item->copy_andor_arguments(thd, this);
return item;
}
Item *copy_andor_structure(THD *thd);
Item *neg_transformer(THD *thd);
};
@ -2253,16 +2221,6 @@ inline bool is_cond_or(Item *item)
return (cond_item->functype() == Item_func::COND_OR_FUNC);
}
/* Some useful inline functions */
inline Item *and_conds(THD *thd, Item *a, Item *b)
{
if (!b) return a;
if (!a) return b;
return new Item_cond_and(thd, a, b);
}
Item *and_expressions(Item *a, Item *b, Item **org_item);
longlong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,

View File

@ -5234,7 +5234,7 @@ Create_func_round::create_native(THD *thd, LEX_STRING name,
case 1:
{
Item *param_1= item_list->pop();
Item *i0 = new (thd->mem_root) Item_int(thd, (char*)"0", 0, 1);
Item *i0= new (thd->mem_root) Item_int(thd, (char*)"0", 0, 1);
func= new (thd->mem_root) Item_func_round(thd, param_1, i0, 0);
break;
}
@ -6397,7 +6397,7 @@ Item *create_func_dyncol_delete(THD *thd, Item *str, List<Item> &nums)
for (uint i= 0; (key= it++); i++)
{
dfs[i].key= key;
dfs[i].value= new Item_null(thd);
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);

View File

@ -727,7 +727,7 @@ void Item_func::signal_divide_by_null()
Item *Item_func::get_tmp_table_item(THD *thd)
{
if (!with_sum_func && !const_item())
return new Item_field(thd, result_field);
return new (thd->mem_root) Item_field(thd, result_field);
return copy_or_same(thd);
}
@ -5534,8 +5534,10 @@ get_var_with_binlog(THD *thd, enum_sql_command sql_command,
LEX *sav_lex= thd->lex, lex_tmp;
thd->lex= &lex_tmp;
lex_start(thd);
tmp_var_list.push_back(new set_var_user(new Item_func_set_user_var(thd, name,
new Item_null(thd))));
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))));
/* Create the variable */
if (sql_set_variables(thd, &tmp_var_list, false))
{
@ -5699,7 +5701,7 @@ bool Item_func_get_user_var::eq(const Item *item, bool binary_cmp) const
bool Item_func_get_user_var::set_value(THD *thd,
sp_rcontext * /*ctx*/, Item **it)
{
Item_func_set_user_var *suv= new Item_func_set_user_var(thd, get_name(), *it);
Item_func_set_user_var *suv= new (thd->mem_root) Item_func_set_user_var(thd, get_name(), *it);
/*
Item_func_set_user_var is not fixed after construction, call
fix_fields().
@ -6114,10 +6116,10 @@ void Item_func_match::init_search(THD *thd, bool no_order)
if (key == NO_SUCH_KEY)
{
List<Item> fields;
fields.push_back(new Item_string(thd, " ", 1, cmp_collation.collation));
fields.push_back(new (thd->mem_root) Item_string(thd, " ", 1, cmp_collation.collation));
for (uint i= 1; i < arg_count; i++)
fields.push_back(args[i]);
concat_ws= new Item_func_concat_ws(thd, fields);
concat_ws= new (thd->mem_root) Item_func_concat_ws(thd, fields);
/*
Above function used only to get value and do not need fix_fields for it:
Item_string - basic constant
@ -6465,7 +6467,7 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
set_if_smaller(component_name->length, MAX_SYS_VAR_LENGTH);
return new Item_func_get_system_var(thd, var, var_type, component_name,
return new (thd->mem_root) Item_func_get_system_var(thd, var, var_type, component_name,
NULL, 0);
}

View File

@ -875,7 +875,7 @@ bool Item_subselect::const_item() const
Item *Item_subselect::get_tmp_table_item(THD *thd_arg)
{
if (!with_sum_func && !const_item())
return new Item_field(thd_arg, result_field);
return new (thd->mem_root) Item_field(thd_arg, result_field);
return copy_or_same(thd_arg);
}
@ -1013,7 +1013,7 @@ void Item_maxmin_subselect::no_rows_in_result()
*/
if (parsing_place != SELECT_LIST || const_item())
return;
value= Item_cache::get_cache(thd, new Item_null(thd));
value= Item_cache::get_cache(thd, new (thd->mem_root) Item_null(thd));
null_value= 0;
was_values= 0;
make_const();
@ -1031,7 +1031,7 @@ void Item_singlerow_subselect::no_rows_in_result()
*/
if (parsing_place != SELECT_LIST || const_item())
return;
value= Item_cache::get_cache(thd, new Item_null(thd));
value= Item_cache::get_cache(thd, new (thd->mem_root) Item_null(thd));
reset();
make_const();
}
@ -1448,7 +1448,7 @@ void Item_exists_subselect::fix_length_and_dec()
an IN always requires LIMIT 1)
*/
thd->change_item_tree(&unit->global_parameters()->select_limit,
new Item_int(thd, (int32) 1));
new (thd->mem_root) Item_int(thd, (int32) 1));
DBUG_PRINT("info", ("Set limit to 1"));
DBUG_VOID_RETURN;
}
@ -1819,7 +1819,7 @@ Item_in_subselect::single_value_transformer(JOIN *join)
As far as Item_in_optimizer does not substitute itself on fix_fields
we can use same item for all selects.
*/
expr= new Item_direct_ref(thd, &select_lex->context,
expr= new (thd->mem_root) Item_direct_ref(thd, &select_lex->context,
(Item**)optimizer->get_cache(),
(char *)"<no matter>",
(char *)in_left_expr_name);
@ -1887,7 +1887,7 @@ bool Item_allany_subselect::transform_into_max_min(JOIN *join)
(ALL && (> || =>)) || (ANY && (< || =<))
for ALL condition is inverted
*/
item= new Item_sum_max(thd, *select_lex->ref_pointer_array);
item= new (thd->mem_root) Item_sum_max(thd, *select_lex->ref_pointer_array);
}
else
{
@ -1895,7 +1895,7 @@ bool Item_allany_subselect::transform_into_max_min(JOIN *join)
(ALL && (< || =<)) || (ANY && (> || =>))
for ALL condition is inverted
*/
item= new Item_sum_min(thd, *select_lex->ref_pointer_array);
item= new (thd->mem_root) Item_sum_min(thd, *select_lex->ref_pointer_array);
}
if (upper_item)
upper_item->set_sum_test(item);
@ -1936,7 +1936,7 @@ bool Item_allany_subselect::transform_into_max_min(JOIN *join)
else
{
Item_maxmin_subselect *item;
subs= item= new Item_maxmin_subselect(thd, this, select_lex, func->l_op());
subs= item= new (thd->mem_root) Item_maxmin_subselect(thd, this, select_lex, func->l_op());
if (upper_item)
upper_item->set_sub_test(item);
/*
@ -2056,7 +2056,7 @@ Item_in_subselect::create_single_in_to_exists_cond(JOIN * join,
We can encounter "NULL IN (SELECT ...)". Wrap the added condition
within a trig_cond.
*/
item= new Item_func_trig_cond(thd, item, get_cond_guard(0));
item= new (thd->mem_root) Item_func_trig_cond(thd, item, get_cond_guard(0));
}
if (!join_having)
@ -2300,42 +2300,50 @@ Item_in_subselect::create_row_in_to_exists_cond(JOIN * join,
check_cols(left_expr->element_index(i)->cols()))
DBUG_RETURN(true);
Item *item_eq=
new Item_func_eq(thd, new
Item_direct_ref(thd, &select_lex->context,
(*optimizer->get_cache())->
addr(i),
(char *)"<no matter>",
(char *)in_left_expr_name),
new
new (thd->mem_root)
Item_func_eq(thd, new (thd->mem_root)
Item_direct_ref(thd, &select_lex->context,
(*optimizer->get_cache())->
addr(i),
(char *)"<no matter>",
(char *)in_left_expr_name),
new (thd->mem_root)
Item_ref(thd, &select_lex->context,
select_lex->ref_pointer_array + i,
(char *)"<no matter>",
(char *)"<list ref>"));
Item *item_isnull=
new (thd->mem_root)
Item_func_isnull(thd,
new (thd->mem_root)
Item_ref(thd, &select_lex->context,
select_lex->ref_pointer_array + i,
select_lex->ref_pointer_array+i,
(char *)"<no matter>",
(char *)"<list ref>"));
Item *item_isnull=
new Item_func_isnull(thd, new
Item_ref(thd, &select_lex->context,
select_lex->ref_pointer_array+i,
(char *)"<no matter>",
(char *)"<list ref>"));
Item *col_item= new Item_cond_or(thd, item_eq, item_isnull);
Item *col_item= new (thd->mem_root)
Item_cond_or(thd, item_eq, item_isnull);
if (!abort_on_null && left_expr->element_index(i)->maybe_null)
{
if (!(col_item= new Item_func_trig_cond(thd, col_item, get_cond_guard(i))))
if (!(col_item= new (thd->mem_root)
Item_func_trig_cond(thd, col_item, get_cond_guard(i))))
DBUG_RETURN(true);
}
*having_item= and_items(thd, *having_item, col_item);
Item *item_nnull_test=
new Item_is_not_null_test(thd, this,
new Item_ref(thd, &select_lex->context,
select_lex->
ref_pointer_array + i,
(char *)"<no matter>",
(char *)"<list ref>"));
new (thd->mem_root)
Item_is_not_null_test(thd, this,
new (thd->mem_root)
Item_ref(thd, &select_lex->context,
select_lex->
ref_pointer_array + i,
(char *)"<no matter>",
(char *)"<list ref>"));
if (!abort_on_null && left_expr->element_index(i)->maybe_null)
{
if (!(item_nnull_test=
new Item_func_trig_cond(thd, item_nnull_test, get_cond_guard(i))))
new (thd->mem_root)
Item_func_trig_cond(thd, item_nnull_test, get_cond_guard(i))))
DBUG_RETURN(true);
}
item_having_part2= and_items(thd, item_having_part2, item_nnull_test);
@ -2356,51 +2364,56 @@ Item_in_subselect::create_row_in_to_exists_cond(JOIN * join,
if (select_lex->ref_pointer_array[i]->
check_cols(left_expr->element_index(i)->cols()))
DBUG_RETURN(true);
item=
new Item_func_eq(thd, new
Item_direct_ref(thd, &select_lex->context,
(*optimizer->get_cache())->
addr(i),
(char *)"<no matter>",
(char *)in_left_expr_name),
new
Item_direct_ref(thd, &select_lex->context,
select_lex->
ref_pointer_array+i,
(char *)"<no matter>",
(char *)"<list ref>"));
item= new (thd->mem_root)
Item_func_eq(thd,
new (thd->mem_root)
Item_direct_ref(thd, &select_lex->context,
(*optimizer->get_cache())->
addr(i),
(char *)"<no matter>",
(char *)in_left_expr_name),
new (thd->mem_root)
Item_direct_ref(thd, &select_lex->context,
select_lex->
ref_pointer_array+i,
(char *)"<no matter>",
(char *)"<list ref>"));
if (!abort_on_null && select_lex->ref_pointer_array[i]->maybe_null)
{
Item *having_col_item=
new Item_is_not_null_test(thd, this,
new
Item_ref(thd, &select_lex->context,
select_lex->ref_pointer_array + i,
(char *)"<no matter>",
(char *)"<list ref>"));
new (thd->mem_root)
Item_is_not_null_test(thd, this,
new (thd->mem_root)
Item_ref(thd, &select_lex->context,
select_lex->ref_pointer_array + i,
(char *)"<no matter>",
(char *)"<list ref>"));
item_isnull= new
Item_func_isnull(thd, new
item_isnull= new (thd->mem_root)
Item_func_isnull(thd,
new (thd->mem_root)
Item_direct_ref(thd, &select_lex->context,
select_lex->
ref_pointer_array+i,
(char *)"<no matter>",
(char *)"<list ref>"));
item= new Item_cond_or(thd, item, item_isnull);
item= new (thd->mem_root) Item_cond_or(thd, item, item_isnull);
if (left_expr->element_index(i)->maybe_null)
{
if (!(item= new Item_func_trig_cond(thd, item, get_cond_guard(i))))
if (!(item= new (thd->mem_root)
Item_func_trig_cond(thd, item, get_cond_guard(i))))
DBUG_RETURN(true);
if (!(having_col_item=
new Item_func_trig_cond(thd, having_col_item, get_cond_guard(i))))
if (!(having_col_item= new (thd->mem_root)
Item_func_trig_cond(thd, having_col_item, get_cond_guard(i))))
DBUG_RETURN(true);
}
*having_item= and_items(thd, *having_item, having_col_item);
}
if (!abort_on_null && left_expr->element_index(i)->maybe_null)
{
if (!(item= new Item_func_trig_cond(thd, item, get_cond_guard(i))))
if (!(item= new (thd->mem_root)
Item_func_trig_cond(thd, item, get_cond_guard(i))))
DBUG_RETURN(true);
}
*where_item= and_items(thd, *where_item, item);
@ -2567,7 +2580,7 @@ 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 Item_int(thd, (int32) 1));
new (thd->mem_root) Item_int(thd, (int32) 1));
unit->select_limit_cnt= 1;
DBUG_RETURN(false);
@ -2594,7 +2607,7 @@ bool Item_exists_subselect::select_prepare_to_be_in()
Query_arena *arena, backup;
bool result;
arena= thd->activate_stmt_arena_if_needed(&backup);
result= (!(optimizer= new Item_in_optimizer(thd, new Item_int(thd, 1), this)));
result= (!(optimizer= new (thd->mem_root) Item_in_optimizer(thd, new (thd->mem_root) Item_int(thd, 1), this)));
if (arena)
thd->restore_active_arena(arena, &backup);
if (result)
@ -2814,13 +2827,17 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
/* remove the parts from condition */
if (!upper_not || !local_field->maybe_null)
*eq_ref= new Item_int(thd, 1);
*eq_ref= new (thd->mem_root) Item_int(thd, 1);
else
{
*eq_ref= new Item_func_isnotnull(thd,
new Item_field(thd,
((Item_field*)(local_field->real_item()))->context,
((Item_field*)(local_field->real_item()))->field));
*eq_ref= new (thd->mem_root)
Item_func_isnotnull(thd,
new (thd->mem_root)
Item_field(thd,
((Item_field*)(local_field->
real_item()))->context,
((Item_field*)(local_field->
real_item()))->field));
if((*eq_ref)->fix_fields(thd, (Item **)eq_ref))
{
res= TRUE;
@ -2840,7 +2857,7 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
left_exp= outer_exp;
else
{
if (!(left_exp= new Item_row(thd, outer)))
if (!(left_exp= new (thd->mem_root) Item_row(thd, outer)))
{
res= TRUE;
goto out;
@ -2882,10 +2899,11 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
As far as Item_ref_in_optimizer do not substitute itself on fix_fields
we can use same item for all selects.
*/
in_subs->expr= new Item_direct_ref(thd, &first_select->context,
(Item**)optimizer->get_cache(),
(char *)"<no matter>",
(char *)in_left_expr_name);
in_subs->expr= new (thd->mem_root)
Item_direct_ref(thd, &first_select->context,
(Item**)optimizer->get_cache(),
(char *)"<no matter>",
(char *)in_left_expr_name);
if (in_subs->fix_fields(thd, optimizer->arguments() + 1))
{
res= TRUE;
@ -2947,14 +2965,17 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
if (eqs.elements() == 1)
{
exp= (optimizer->arguments()[0]->maybe_null ?
(Item*)
new Item_cond_and(thd,
new Item_func_isnotnull(thd,
new Item_direct_ref(thd, &unit->outer_select()->context,
optimizer->arguments(),
(char *)"<no matter>",
(char *)exists_outer_expr_name)),
optimizer) :
(Item*) new (thd->mem_root)
Item_cond_and(thd,
new (thd->mem_root)
Item_func_isnotnull(thd,
new (thd->mem_root)
Item_direct_ref(thd,
&unit->outer_select()->context,
optimizer->arguments(),
(char *)"<no matter>",
(char *)exists_outer_expr_name)),
optimizer) :
(Item *)optimizer);
}
else
@ -2970,18 +2991,20 @@ bool Item_exists_subselect::exists2in_processor(uchar *opt_arg)
if (optimizer->arguments()[0]->maybe_null)
{
and_list->
push_front(
new Item_func_isnotnull(thd,
new Item_direct_ref(thd, &unit->outer_select()->context,
optimizer->arguments()[0]->addr(i),
(char *)"<no matter>",
(char *)exists_outer_expr_name)));
push_front(new (thd->mem_root)
Item_func_isnotnull(thd,
new (thd->mem_root)
Item_direct_ref(thd,
&unit->outer_select()->context,
optimizer->arguments()[0]->addr(i),
(char *)"<no matter>",
(char *)exists_outer_expr_name)));
}
}
if (and_list->elements > 0)
{
and_list->push_front(optimizer);
exp= new Item_cond_and(thd, *and_list);
exp= new (thd->mem_root) Item_cond_and(thd, *and_list);
}
else
exp= optimizer;
@ -3056,7 +3079,7 @@ Item_in_subselect::select_in_like_transformer(JOIN *join)
arena= thd->activate_stmt_arena_if_needed(&backup);
if (!optimizer)
{
result= (!(optimizer= new Item_in_optimizer(thd, left_expr, this)));
result= (!(optimizer= new (thd->mem_root) Item_in_optimizer(thd, left_expr, this)));
if (result)
goto out;
}
@ -3122,7 +3145,7 @@ bool Item_exists_subselect::fix_fields(THD *thd, Item **ref)
{
DBUG_ENTER("Item_exists_subselect::fix_fields");
if (exists_transformed)
DBUG_RETURN( !( (*ref)= new Item_int(thd, 1)));
DBUG_RETURN( !( (*ref)= new (thd->mem_root) Item_int(thd, 1)));
DBUG_RETURN(Item_subselect::fix_fields(thd, ref));
}
@ -3134,7 +3157,7 @@ bool Item_in_subselect::fix_fields(THD *thd_arg, Item **ref)
DBUG_ENTER("Item_in_subselect::fix_fields");
if (test_strategy(SUBS_SEMI_JOIN))
DBUG_RETURN( !( (*ref)= new Item_int(thd, 1)) );
DBUG_RETURN( !( (*ref)= new (thd->mem_root) Item_int(thd, 1)) );
/*
Check if the outer and inner IN operands match in those cases when we
@ -4888,7 +4911,7 @@ bool subselect_hash_sj_engine::make_semi_join_conds()
DBUG_ENTER("subselect_hash_sj_engine::make_semi_join_conds");
DBUG_ASSERT(semi_join_conds == NULL);
if (!(semi_join_conds= new Item_cond_and(thd)))
if (!(semi_join_conds= new (thd->mem_root) Item_cond_and(thd)))
DBUG_RETURN(TRUE);
if (!(tmp_table_ref= (TABLE_LIST*) thd->alloc(sizeof(TABLE_LIST))))
@ -4912,8 +4935,8 @@ bool subselect_hash_sj_engine::make_semi_join_conds()
/* Item for the corresponding field from the materialized temp table. */
Item_field *right_col_item;
if (!(right_col_item= new Item_field(thd, context, tmp_table->field[i])) ||
!(eq_cond= new Item_func_eq(thd, item_in->left_expr->element_index(i),
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)))
{
@ -5520,9 +5543,9 @@ bool Ordered_key::init(MY_BITMAP *columns_to_index)
{
if (!bitmap_is_set(columns_to_index, i))
continue;
cur_tmp_field= new Item_field(thd, tbl->field[i]);
cur_tmp_field= new (thd->mem_root) Item_field(thd, tbl->field[i]);
/* Create the predicate (tmp_column[i] < outer_ref[i]). */
fn_less_than= new Item_func_lt(thd, cur_tmp_field,
fn_less_than= new (thd->mem_root) Item_func_lt(thd, cur_tmp_field,
search_key->element_index(i));
fn_less_than->fix_fields(thd, (Item**) &fn_less_than);
key_columns[cur_key_col]= cur_tmp_field;
@ -5554,9 +5577,9 @@ bool Ordered_key::init(int col_idx)
key_columns= (Item_field**) thd->alloc(sizeof(Item_field*));
compare_pred= (Item_func_lt**) thd->alloc(sizeof(Item_func_lt*));
key_columns[0]= new Item_field(thd, tbl->field[col_idx]);
key_columns[0]= new (thd->mem_root) Item_field(thd, tbl->field[col_idx]);
/* Create the predicate (tmp_column[i] < outer_ref[i]). */
compare_pred[0]= new Item_func_lt(thd, key_columns[0],
compare_pred[0]= new (thd->mem_root) Item_func_lt(thd, key_columns[0],
search_key->element_index(col_idx));
compare_pred[0]->fix_fields(thd, (Item**)&compare_pred[0]);

View File

@ -490,7 +490,7 @@ Item *Item_sum::get_tmp_table_item(THD *thd)
if (arg->type() == Item::FIELD_ITEM)
((Item_field*) arg)->field= result_field_tmp++;
else
sum_item->args[i]= new Item_field(thd, result_field_tmp++);
sum_item->args[i]= new (thd->mem_root) Item_field(thd, result_field_tmp++);
}
}
}
@ -610,6 +610,10 @@ void Item_sum::cleanup()
forced_const= FALSE;
}
Item *Item_sum::result_item(THD *thd, Field *field)
{
return new (thd->mem_root) Item_field(thd, field);
}
/**
Compare keys consisting of single field that cannot be compared as binary.
@ -1759,6 +1763,12 @@ Item *Item_sum_std::copy_or_same(THD* thd)
}
Item *Item_sum_std::result_item(THD *thd, Field *field)
{
return new (thd->mem_root) Item_std_field(thd, this);
}
/*
Variance
*/
@ -1989,6 +1999,11 @@ void Item_sum_variance::update_field()
}
Item *Item_sum_variance::result_item(THD *thd, Field *field)
{
return new (thd->mem_root) Item_variance_field(thd, this);
}
/* min & max */
void Item_sum_hybrid::clear()
@ -2477,6 +2492,12 @@ void Item_sum_avg::update_field()
}
Item *Item_sum_avg::result_item(THD *thd, Field *field)
{
return new (thd->mem_root) Item_avg_field(thd, hybrid_type, this);
}
void Item_sum_hybrid::update_field()
{
switch (hybrid_type) {

View File

@ -431,8 +431,8 @@ public:
virtual void update_field()=0;
virtual bool keep_field_type(void) const { return 0; }
virtual void fix_length_and_dec() { maybe_null=1; null_value=1; }
virtual Item *result_item(THD *thd, Field *field)
{ return new Item_field(thd, field); }
virtual Item *result_item(THD *thd, Field *field);
/*
Return bitmap of tables that are needed to evaluate the item.
@ -879,8 +879,7 @@ public:
String *val_str(String *str);
void reset_field();
void update_field();
Item *result_item(THD *thd, Field *field)
{ return new Item_avg_field(thd, hybrid_type, this); }
Item *result_item(THD *thd, Field *field);
void no_rows_in_result() {}
const char *func_name() const
{
@ -977,8 +976,7 @@ public:
my_decimal *val_decimal(my_decimal *);
void reset_field();
void update_field();
Item *result_item(THD *thd, Field *field)
{ return new Item_variance_field(thd, this); }
Item *result_item(THD *thd, Field *field);
void no_rows_in_result() {}
const char *func_name() const
{ return sample ? "var_samp(" : "variance("; }
@ -1019,8 +1017,7 @@ class Item_sum_std :public Item_sum_variance
{}
enum Sumfunctype sum_func () const { return STD_FUNC; }
double val_real();
Item *result_item(THD *thd, Field *field)
{ return new Item_std_field(thd, this); }
Item *result_item(THD *thd, Field *field);
const char *func_name() const { return "std("; }
Item *copy_or_same(THD* thd);
enum Item_result result_type () const { return REAL_RESULT; }

View File

@ -840,7 +840,8 @@ String *Item_nodeset_func_elementbyindex::val_nodeset(String *nodeset)
static Item* nodeset2bool(MY_XPATH *xpath, Item *item)
{
if (item->type() == Item::XPATH_NODESET)
return new Item_xpath_cast_bool(xpath->thd, item, xpath->pxml);
return new (xpath->thd->mem_root)
Item_xpath_cast_bool(xpath->thd, item, xpath->pxml);
return item;
}
@ -912,14 +913,15 @@ static Item* nodeset2bool(MY_XPATH *xpath, Item *item)
*/
static Item *eq_func(THD *thd, int oper, Item *a, Item *b)
{
MEM_ROOT *mem_root= thd->mem_root;
switch (oper)
{
case '=': return new Item_func_eq(thd, a, b);
case '!': return new Item_func_ne(thd, a, b);
case MY_XPATH_LEX_GE: return new Item_func_ge(thd, a, b);
case MY_XPATH_LEX_LE: return new Item_func_le(thd, a, b);
case MY_XPATH_LEX_GREATER: return new Item_func_gt(thd, a, b);
case MY_XPATH_LEX_LESS: return new Item_func_lt(thd, a, b);
case '=': return new (mem_root) Item_func_eq(thd, a, b);
case '!': return new (mem_root) Item_func_ne(thd, a, b);
case MY_XPATH_LEX_GE: return new (mem_root) Item_func_ge(thd, a, b);
case MY_XPATH_LEX_LE: return new (mem_root) Item_func_le(thd, a, b);
case MY_XPATH_LEX_GREATER: return new (mem_root) Item_func_gt(thd, a, b);
case MY_XPATH_LEX_LESS: return new (mem_root) Item_func_lt(thd, a, b);
}
return 0;
}
@ -939,14 +941,15 @@ static Item *eq_func(THD *thd, int oper, Item *a, Item *b)
*/
static Item *eq_func_reverse(THD *thd, int oper, Item *a, Item *b)
{
MEM_ROOT *mem_root= thd->mem_root;
switch (oper)
{
case '=': return new Item_func_eq(thd, a, b);
case '!': return new Item_func_ne(thd, a, b);
case MY_XPATH_LEX_GE: return new Item_func_le(thd, a, b);
case MY_XPATH_LEX_LE: return new Item_func_ge(thd, a, b);
case MY_XPATH_LEX_GREATER: return new Item_func_lt(thd, a, b);
case MY_XPATH_LEX_LESS: return new Item_func_gt(thd, a, b);
case '=': return new (mem_root) Item_func_eq(thd, a, b);
case '!': return new (mem_root) Item_func_ne(thd, a, b);
case MY_XPATH_LEX_GE: return new (mem_root) Item_func_le(thd, a, b);
case MY_XPATH_LEX_LE: return new (mem_root) Item_func_ge(thd, a, b);
case MY_XPATH_LEX_GREATER: return new (mem_root) Item_func_lt(thd, a, b);
case MY_XPATH_LEX_LESS: return new (mem_root) Item_func_gt(thd, a, b);
}
return 0;
}
@ -992,24 +995,25 @@ static Item *create_comparator(MY_XPATH *xpath,
in a loop through all of the nodes in the node set.
*/
Item_string *fake= new Item_string_xml_non_const(xpath->thd, "", 0,
xpath->cs);
THD *thd= xpath->thd;
Item_string *fake= (new (thd->mem_root)
Item_string_xml_non_const(thd, "", 0, xpath->cs));
Item_nodeset_func *nodeset;
Item *scalar, *comp;
if (a->type() == Item::XPATH_NODESET)
{
nodeset= (Item_nodeset_func*) a;
scalar= b;
comp= eq_func(xpath->thd, oper, (Item*)fake, scalar);
comp= eq_func(thd, oper, (Item*)fake, scalar);
}
else
{
nodeset= (Item_nodeset_func*) b;
scalar= a;
comp= eq_func_reverse(xpath->thd, oper, fake, scalar);
comp= eq_func_reverse(thd, oper, fake, scalar);
}
return new Item_nodeset_to_const_comparator(xpath->thd, nodeset, comp,
xpath->pxml);
return (new (thd->mem_root)
Item_nodeset_to_const_comparator(thd, nodeset, comp, xpath->pxml));
}
}
@ -1026,6 +1030,9 @@ static Item *create_comparator(MY_XPATH *xpath,
static Item* nametestfunc(MY_XPATH *xpath,
int type, Item *arg, const char *beg, uint len)
{
THD *thd= xpath->thd;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ASSERT(arg != 0);
DBUG_ASSERT(arg->type() == Item::XPATH_NODESET);
DBUG_ASSERT(beg != 0);
@ -1035,35 +1042,35 @@ static Item* nametestfunc(MY_XPATH *xpath,
switch (type)
{
case MY_XPATH_AXIS_ANCESTOR:
res= new Item_nodeset_func_ancestorbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_ancestorbyname(thd, arg, beg, len,
xpath->pxml, 0);
break;
case MY_XPATH_AXIS_ANCESTOR_OR_SELF:
res= new Item_nodeset_func_ancestorbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_ancestorbyname(thd, arg, beg, len,
xpath->pxml, 1);
break;
case MY_XPATH_AXIS_PARENT:
res= new Item_nodeset_func_parentbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_parentbyname(thd, arg, beg, len,
xpath->pxml);
break;
case MY_XPATH_AXIS_DESCENDANT:
res= new Item_nodeset_func_descendantbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_descendantbyname(thd, arg, beg, len,
xpath->pxml, 0);
break;
case MY_XPATH_AXIS_DESCENDANT_OR_SELF:
res= new Item_nodeset_func_descendantbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_descendantbyname(thd, arg, beg, len,
xpath->pxml, 1);
break;
case MY_XPATH_AXIS_ATTRIBUTE:
res= new Item_nodeset_func_attributebyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_attributebyname(thd, arg, beg, len,
xpath->pxml);
break;
case MY_XPATH_AXIS_SELF:
res= new Item_nodeset_func_selfbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_selfbyname(thd, arg, beg, len,
xpath->pxml);
break;
default:
res= new Item_nodeset_func_childbyname(xpath->thd, arg, beg, len,
res= new (mem_root) Item_nodeset_func_childbyname(thd, arg, beg, len,
xpath->pxml);
}
return res;
@ -1173,43 +1180,46 @@ my_xpath_keyword(MY_XPATH *x,
static Item *create_func_true(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_bool(xpath->thd, 1);
return new (xpath->thd->mem_root) Item_bool(xpath->thd, 1);
}
static Item *create_func_false(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_bool(xpath->thd, 0);
return new (xpath->thd->mem_root) Item_bool(xpath->thd, 0);
}
static Item *create_func_not(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_func_not(xpath->thd, nodeset2bool(xpath, args[0]));
return new (xpath->thd->mem_root)
Item_func_not(xpath->thd, nodeset2bool(xpath, args[0]));
}
static Item *create_func_ceiling(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_func_ceiling(xpath->thd, args[0]);
return new (xpath->thd->mem_root) Item_func_ceiling(xpath->thd, args[0]);
}
static Item *create_func_floor(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_func_floor(xpath->thd, args[0]);
return new (xpath->thd->mem_root) Item_func_floor(xpath->thd, args[0]);
}
static Item *create_func_bool(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_xpath_cast_bool(xpath->thd, args[0], xpath->pxml);
return new (xpath->thd->mem_root)
Item_xpath_cast_bool(xpath->thd, args[0], xpath->pxml);
}
static Item *create_func_number(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_xpath_cast_number(xpath->thd, args[0]);
return new (xpath->thd->mem_root)
Item_xpath_cast_number(xpath->thd, args[0]);
}
@ -1217,53 +1227,61 @@ static Item *create_func_string_length(MY_XPATH *xpath, Item **args,
uint nargs)
{
Item *arg= nargs ? args[0] : xpath->context;
return arg ? new Item_func_char_length(xpath->thd, arg) : 0;
return arg ? new (xpath->thd->mem_root)
Item_func_char_length(xpath->thd, arg) : 0;
}
static Item *create_func_round(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_func_round(xpath->thd, args[0],
new Item_int(xpath->thd, (char *) "0", 0, 1), 0);
return new (xpath->thd->mem_root)
Item_func_round(xpath->thd, args[0],
new (xpath->thd->mem_root)
Item_int(xpath->thd, (char *) "0", 0, 1), 0);
}
static Item *create_func_last(MY_XPATH *xpath, Item **args, uint nargs)
{
return xpath->context ?
new Item_func_xpath_count(xpath->thd, xpath->context, xpath->pxml) :
NULL;
return (xpath->context ?
new (xpath->thd->mem_root)
Item_func_xpath_count(xpath->thd, xpath->context, xpath->pxml) :
NULL);
}
static Item *create_func_position(MY_XPATH *xpath, Item **args, uint nargs)
{
return xpath->context ?
new Item_func_xpath_position(xpath->thd, xpath->context,
xpath->pxml) : NULL;
return (xpath->context ?
new (xpath->thd->mem_root)
Item_func_xpath_position(xpath->thd, xpath->context, xpath->pxml) :
NULL);
}
static Item *create_func_contains(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_xpath_cast_bool(xpath->thd,
new Item_func_locate(xpath->thd, args[0],
args[1]), xpath->pxml);
return (new (xpath->thd->mem_root)
Item_xpath_cast_bool(xpath->thd,
new (xpath->thd->mem_root)
Item_func_locate(xpath->thd, args[0], args[1]),
xpath->pxml));
}
static Item *create_func_concat(MY_XPATH *xpath, Item **args, uint nargs)
{
return new Item_func_concat(xpath->thd, args[0], args[1]);
return new (xpath->thd->mem_root)
Item_func_concat(xpath->thd, args[0], args[1]);
}
static Item *create_func_substr(MY_XPATH *xpath, Item **args, uint nargs)
{
THD *thd= xpath->thd;
if (nargs == 2)
return new Item_func_substr(xpath->thd, args[0], args[1]);
else
return new Item_func_substr(xpath->thd, args[0], args[1], args[2]);
return new (thd->mem_root) Item_func_substr(thd, args[0], args[1]);
return new (thd->mem_root) Item_func_substr(thd, args[0], args[1], args[2]);
}
@ -1271,7 +1289,7 @@ static Item *create_func_count(MY_XPATH *xpath, Item **args, uint nargs)
{
if (args[0]->type() != Item::XPATH_NODESET)
return 0;
return new Item_func_xpath_count(xpath->thd, args[0], xpath->pxml);
return new (xpath->thd->mem_root) Item_func_xpath_count(xpath->thd, args[0], xpath->pxml);
}
@ -1279,7 +1297,8 @@ static Item *create_func_sum(MY_XPATH *xpath, Item **args, uint nargs)
{
if (args[0]->type() != Item::XPATH_NODESET)
return 0;
return new Item_func_xpath_sum(xpath->thd, args[0], xpath->pxml);
return new (xpath->thd->mem_root)
Item_func_xpath_sum(xpath->thd, args[0], xpath->pxml);
}
@ -1652,10 +1671,11 @@ static int my_xpath_parse_AbsoluteLocationPath(MY_XPATH *xpath)
if (my_xpath_parse_term(xpath, MY_XPATH_LEX_SLASH))
{
xpath->context= new Item_nodeset_func_descendantbyname(xpath->thd,
xpath->context,
"*", 1,
xpath->pxml, 1);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_func_descendantbyname(xpath->thd,
xpath->context,
"*", 1,
xpath->pxml, 1);
return my_xpath_parse_RelativeLocationPath(xpath);
}
@ -1694,10 +1714,11 @@ static int my_xpath_parse_RelativeLocationPath(MY_XPATH *xpath)
while (my_xpath_parse_term(xpath, MY_XPATH_LEX_SLASH))
{
if (my_xpath_parse_term(xpath, MY_XPATH_LEX_SLASH))
xpath->context= new Item_nodeset_func_descendantbyname(xpath->thd,
xpath->context,
"*", 1,
xpath->pxml, 1);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_func_descendantbyname(xpath->thd,
xpath->context,
"*", 1,
xpath->pxml, 1);
if (!my_xpath_parse_Step(xpath))
{
xpath->error= 1;
@ -1735,8 +1756,8 @@ my_xpath_parse_AxisSpecifier_NodeTest_opt_Predicate_list(MY_XPATH *xpath)
Item *prev_context= xpath->context;
String *context_cache;
context_cache= &((Item_nodeset_func*)xpath->context)->context_cache;
xpath->context= new Item_nodeset_context_cache(xpath->thd, context_cache,
xpath->pxml);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_context_cache(xpath->thd, context_cache, xpath->pxml);
xpath->context_cache= context_cache;
if(!my_xpath_parse_PredicateExpr(xpath))
@ -1755,16 +1776,18 @@ my_xpath_parse_AxisSpecifier_NodeTest_opt_Predicate_list(MY_XPATH *xpath)
if (xpath->item->is_bool_type())
{
xpath->context= new Item_nodeset_func_predicate(xpath->thd, prev_context,
xpath->item,
xpath->pxml);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_func_predicate(xpath->thd, prev_context,
xpath->item,
xpath->pxml);
}
else
{
xpath->context= new Item_nodeset_func_elementbyindex(xpath->thd,
prev_context,
xpath->item,
xpath->pxml);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_func_elementbyindex(xpath->thd,
prev_context,
xpath->item,
xpath->pxml);
}
}
return 1;
@ -1886,9 +1909,10 @@ static int my_xpath_parse_AbbreviatedStep(MY_XPATH *xpath)
if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_DOT))
return 0;
if (my_xpath_parse_term(xpath, MY_XPATH_LEX_DOT))
xpath->context= new Item_nodeset_func_parentbyname(xpath->thd,
xpath->context, "*",
1, xpath->pxml);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_func_parentbyname(xpath->thd,
xpath->context, "*",
1, xpath->pxml);
return 1;
}
@ -1917,9 +1941,10 @@ static int my_xpath_parse_PrimaryExpr_literal(MY_XPATH *xpath)
{
if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_STRING))
return 0;
xpath->item= new Item_string(xpath->thd, xpath->prevtok.beg + 1,
xpath->prevtok.end - xpath->prevtok.beg - 2,
xpath->cs);
xpath->item= new (xpath->thd->mem_root)
Item_string(xpath->thd, xpath->prevtok.beg + 1,
xpath->prevtok.end - xpath->prevtok.beg - 2,
xpath->cs);
return 1;
}
static int my_xpath_parse_PrimaryExpr(MY_XPATH *xpath)
@ -2012,8 +2037,9 @@ static int my_xpath_parse_UnionExpr(MY_XPATH *xpath)
xpath->error= 1;
return 0;
}
xpath->item= new Item_nodeset_func_union(xpath->thd, prev, xpath->item,
xpath->pxml);
xpath->item= new (xpath->thd->mem_root)
Item_nodeset_func_union(xpath->thd, prev, xpath->item,
xpath->pxml);
}
return 1;
}
@ -2059,10 +2085,11 @@ my_xpath_parse_FilterExpr_opt_slashes_RelativeLocationPath(MY_XPATH *xpath)
/* treat double slash (//) as /descendant-or-self::node()/ */
if (my_xpath_parse_term(xpath, MY_XPATH_LEX_SLASH))
xpath->context= new Item_nodeset_func_descendantbyname(xpath->thd,
xpath->context,
"*", 1,
xpath->pxml, 1);
xpath->context= new (xpath->thd->mem_root)
Item_nodeset_func_descendantbyname(xpath->thd,
xpath->context,
"*", 1,
xpath->pxml, 1);
rc= my_xpath_parse_RelativeLocationPath(xpath);
/* push back the context and restore the item */
@ -2124,8 +2151,9 @@ static int my_xpath_parse_OrExpr(MY_XPATH *xpath)
xpath->error= 1;
return 0;
}
xpath->item= new Item_cond_or(xpath->thd, nodeset2bool(xpath, prev),
nodeset2bool(xpath, xpath->item));
xpath->item= new (xpath->thd->mem_root)
Item_cond_or(xpath->thd, nodeset2bool(xpath, prev),
nodeset2bool(xpath, xpath->item));
}
return 1;
}
@ -2156,8 +2184,9 @@ static int my_xpath_parse_AndExpr(MY_XPATH *xpath)
return 0;
}
xpath->item= new Item_cond_and(xpath->thd, nodeset2bool(xpath, prev),
nodeset2bool(xpath, xpath->item));
xpath->item= new (xpath->thd->mem_root)
Item_cond_and(xpath->thd, nodeset2bool(xpath, prev),
nodeset2bool(xpath, xpath->item));
}
return 1;
}
@ -2319,6 +2348,8 @@ static int my_xpath_parse_AdditiveExpr(MY_XPATH *xpath)
{
int oper= xpath->prevtok.term;
Item *prev= xpath->item;
THD *thd= xpath->thd;
if (!my_xpath_parse_MultiplicativeExpr(xpath))
{
xpath->error= 1;
@ -2326,9 +2357,11 @@ static int my_xpath_parse_AdditiveExpr(MY_XPATH *xpath)
}
if (oper == MY_XPATH_LEX_PLUS)
xpath->item= new Item_func_plus(xpath->thd, prev, xpath->item);
xpath->item= new (thd->mem_root)
Item_func_plus(thd, prev, xpath->item);
else
xpath->item= new Item_func_minus(xpath->thd, prev, xpath->item);
xpath->item= new (thd->mem_root)
Item_func_minus(thd, prev, xpath->item);
};
return 1;
}
@ -2363,6 +2396,7 @@ static int my_xpath_parse_MultiplicativeExpr(MY_XPATH *xpath)
if (!my_xpath_parse_UnaryExpr(xpath))
return 0;
THD *thd= xpath->thd;
while (my_xpath_parse_MultiplicativeOperator(xpath))
{
int oper= xpath->prevtok.term;
@ -2375,13 +2409,13 @@ static int my_xpath_parse_MultiplicativeExpr(MY_XPATH *xpath)
switch (oper)
{
case MY_XPATH_LEX_ASTERISK:
xpath->item= new Item_func_mul(xpath->thd, prev, xpath->item);
xpath->item= new (thd->mem_root) Item_func_mul(thd, prev, xpath->item);
break;
case MY_XPATH_LEX_DIV:
xpath->item= new Item_func_int_div(xpath->thd, prev, xpath->item);
xpath->item= new (thd->mem_root) Item_func_int_div(thd, prev, xpath->item);
break;
case MY_XPATH_LEX_MOD:
xpath->item= new Item_func_mod(xpath->thd, prev, xpath->item);
xpath->item= new (thd->mem_root) Item_func_mod(thd, prev, xpath->item);
break;
}
}
@ -2406,7 +2440,8 @@ static int my_xpath_parse_UnaryExpr(MY_XPATH *xpath)
return my_xpath_parse_UnionExpr(xpath);
if (!my_xpath_parse_UnaryExpr(xpath))
return 0;
xpath->item= new Item_func_neg(xpath->thd, xpath->item);
xpath->item= new (xpath->thd->mem_root)
Item_func_neg(xpath->thd, xpath->item);
return 1;
}
@ -2438,18 +2473,21 @@ static int my_xpath_parse_UnaryExpr(MY_XPATH *xpath)
static int my_xpath_parse_Number(MY_XPATH *xpath)
{
const char *beg;
THD *thd;
if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_DIGITS))
return 0;
beg= xpath->prevtok.beg;
thd= xpath->thd;
if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_DOT))
{
xpath->item= new Item_int(xpath->thd, xpath->prevtok.beg,
xpath->item= new (thd->mem_root) Item_int(thd, xpath->prevtok.beg,
xpath->prevtok.end - xpath->prevtok.beg);
return 1;
}
my_xpath_parse_term(xpath, MY_XPATH_LEX_DIGITS);
xpath->item= new Item_float(xpath->thd, beg, xpath->prevtok.end - beg);
xpath->item= new (thd->mem_root) Item_float(thd, beg,
xpath->prevtok.end - beg);
return 1;
}
@ -2542,6 +2580,7 @@ my_xpath_parse_VariableReference(MY_XPATH *xpath)
LEX_STRING name;
int user_var;
const char *dollar_pos;
THD *thd= xpath->thd;
if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_DOLLAR) ||
(!(dollar_pos= xpath->prevtok.beg)) ||
(!((user_var= my_xpath_parse_term(xpath, MY_XPATH_LEX_AT) &&
@ -2553,18 +2592,19 @@ my_xpath_parse_VariableReference(MY_XPATH *xpath)
name.str= (char*) xpath->prevtok.beg;
if (user_var)
xpath->item= new Item_func_get_user_var(xpath->thd, name);
xpath->item= new (thd->mem_root) Item_func_get_user_var(thd, name);
else
{
sp_variable *spv;
sp_pcontext *spc;
LEX *lex;
if ((lex= current_thd->lex) &&
if ((lex= thd->lex) &&
(spc= lex->spcont) &&
(spv= spc->find_variable(name, false)))
{
Item_splocal *splocal= new Item_splocal(xpath->thd, name, spv->offset,
spv->type, 0);
Item_splocal *splocal= new (thd->mem_root)
Item_splocal(thd, name, spv->offset,
spv->type, 0);
#ifndef DBUG_OFF
if (splocal)
splocal->m_sp= lex->sphead;
@ -2643,12 +2683,12 @@ my_xpath_parse(MY_XPATH *xpath, const char *str, const char *strend)
my_xpath_lex_init(&xpath->prevtok, str, strend);
my_xpath_lex_scan(xpath, &xpath->lasttok, str, strend);
xpath->rootelement= new Item_nodeset_func_rootelement(xpath->thd,
xpath->pxml);
xpath->rootelement= new (xpath->thd->mem_root)
Item_nodeset_func_rootelement(xpath->thd,
xpath->pxml);
return
my_xpath_parse_Expr(xpath) &&
my_xpath_parse_term(xpath, MY_XPATH_LEX_EOF);
return (my_xpath_parse_Expr(xpath) &&
my_xpath_parse_term(xpath, MY_XPATH_LEX_EOF));
}

View File

@ -1036,17 +1036,18 @@ 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)
{
field_list->push_back(new Item_empty_string(thd, "Log_name", 20));
field_list->push_back(new Item_return_int(thd, "Pos",
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 Item_empty_string(thd, "Event_type", 20));
field_list->push_back(new Item_return_int(thd, "Server_id", 10,
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 Item_return_int(thd, "End_log_pos",
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 Item_empty_string(thd, "Info", 20));
field_list->push_back(new (mem_root) Item_empty_string(thd, "Info", 20));
}
/**
@ -5725,7 +5726,7 @@ 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 Item_field(thd, context,
field_list.push_back(new (thd->mem_root) Item_field(thd, context,
affected_db, table_name, field));
field+= field_lens[i] + 1;
}
@ -7854,33 +7855,33 @@ int User_var_log_event::do_apply_event(rpl_group_info *rgi)
if (is_null)
{
it= new Item_null(thd);
it= new (thd->mem_root) Item_null(thd);
}
else
{
switch (type) {
case REAL_RESULT:
float8get(real_val, val);
it= new Item_float(thd, real_val, 0);
it= new (thd->mem_root) Item_float(thd, real_val, 0);
val= (char*) &real_val; // Pointer to value in native format
val_len= 8;
break;
case INT_RESULT:
int_val= (longlong) uint8korr(val);
it= new Item_int(thd, int_val);
it= new (thd->mem_root) Item_int(thd, int_val);
val= (char*) &int_val; // Pointer to value in native format
val_len= 8;
break;
case DECIMAL_RESULT:
{
Item_decimal *dec= new Item_decimal(thd, (uchar*) val+2, val[0], val[1]);
Item_decimal *dec= new (thd->mem_root) Item_decimal(thd, (uchar*) val+2, val[0], val[1]);
it= dec;
val= (char *)dec->val_decimal(NULL);
val_len= sizeof(my_decimal);
break;
}
case STRING_RESULT:
it= new Item_string(thd, val, val_len, charset);
it= new (thd->mem_root) Item_string(thd, val, val_len, charset);
break;
case ROW_RESULT:
default:
@ -7889,7 +7890,7 @@ int User_var_log_event::do_apply_event(rpl_group_info *rgi)
}
}
Item_func_set_user_var *e= new Item_func_set_user_var(thd, user_var_name, it);
Item_func_set_user_var *e= new (thd->mem_root) Item_func_set_user_var(thd, user_var_name, it);
/*
Item_func_set_user_var can't substitute something else on its place =>
0 can be passed as last argument (reference on item)

View File

@ -192,7 +192,7 @@ static Item *make_cond_for_index(THD *thd, Item *cond, TABLE *table, uint keyno,
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
{
table_map used_tables= 0;
Item_cond_and *new_cond= new Item_cond_and(thd);
Item_cond_and *new_cond= new (thd->mem_root) Item_cond_and(thd);
if (!new_cond)
return (COND*) 0;
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -227,7 +227,7 @@ static Item *make_cond_for_index(THD *thd, Item *cond, TABLE *table, uint keyno,
}
else /* It's OR */
{
Item_cond_or *new_cond= new Item_cond_or(thd);
Item_cond_or *new_cond= new (thd->mem_root) Item_cond_or(thd);
if (!new_cond)
return (COND*) 0;
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -269,7 +269,7 @@ static Item *make_cond_remainder(THD *thd, Item *cond, TABLE *table, uint keyno,
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
{
/* Create new top level AND item */
Item_cond_and *new_cond= new Item_cond_and(thd);
Item_cond_and *new_cond= new (thd->mem_root) Item_cond_and(thd);
if (!new_cond)
return (COND*) 0;
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -297,7 +297,7 @@ static Item *make_cond_remainder(THD *thd, Item *cond, TABLE *table, uint keyno,
}
else /* It's OR */
{
Item_cond_or *new_cond= new Item_cond_or(thd);
Item_cond_or *new_cond= new (thd->mem_root) Item_cond_or(thd);
if (!new_cond)
return (COND*) 0;
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -420,8 +420,8 @@ void push_index_cond(JOIN_TAB *tab, uint keyno)
tab->select_cond= row_cond;
else
{
COND *new_cond= new Item_cond_and(tab->join->thd, row_cond,
idx_remainder_cond);
COND *new_cond= new (tab->join->thd->mem_root)
Item_cond_and(tab->join->thd, row_cond, idx_remainder_cond);
tab->select_cond= new_cond;
tab->select_cond->quick_fix_field();
((Item_cond_and*)tab->select_cond)->used_tables_cache=

View File

@ -1136,7 +1136,7 @@ bool convert_join_subqueries_to_semijoins(JOIN *join)
&join->conds : &(in_subq->emb_on_expr_nest->on_expr);
Item *replace_me= in_subq->original_item();
if (replace_where_subcondition(join, tree, replace_me,
new Item_int(thd, 1),
new (thd->mem_root) Item_int(thd, 1),
FALSE))
goto restore_arena_and_fail;
}
@ -1595,7 +1595,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
{
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr);
Item_func_eq *item_eq=
new Item_func_eq(thd, subq_pred->left_expr,
new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr,
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);
@ -1607,7 +1607,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr->
element_index(i));
Item_func_eq *item_eq=
new Item_func_eq(thd, subq_pred->left_expr->element_index(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);
@ -3797,8 +3797,8 @@ static Item *create_subq_in_equalities(THD *thd, SJ_MATERIALIZATION_INFO *sjm,
Item *res= NULL;
if (subq_pred->left_expr->cols() == 1)
{
if (!(res= new Item_func_eq(thd, subq_pred->left_expr,
new Item_field(thd, sjm->table->field[0]))))
if (!(res= new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr,
new (thd->mem_root) Item_field(thd, sjm->table->field[0]))))
return NULL; /* purecov: inspected */
}
else
@ -3806,8 +3806,8 @@ static Item *create_subq_in_equalities(THD *thd, SJ_MATERIALIZATION_INFO *sjm,
Item *conj;
for (uint i= 0; i < subq_pred->left_expr->cols(); i++)
{
if (!(conj= new Item_func_eq(thd, subq_pred->left_expr->element_index(i),
new Item_field(thd, sjm->table->field[i]))) ||
if (!(conj= new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr->element_index(i),
new (thd->mem_root) Item_field(thd, sjm->table->field[i]))) ||
!(res= and_items(thd, res, conj)))
return NULL; /* purecov: inspected */
}
@ -3836,7 +3836,7 @@ static void remove_sj_conds(THD *thd, Item **tree)
while ((item= li++))
{
if (is_cond_sj_in_equality(item))
li.replace(new Item_int(thd, 1));
li.replace(new (thd->mem_root) Item_int(thd, 1));
}
}
}
@ -5102,7 +5102,7 @@ TABLE *create_dummy_tmp_table(THD *thd)
sjm_table_param.init();
sjm_table_param.field_count= 1;
List<Item> sjm_table_cols;
Item *column_item= new Item_int(thd, 1);
Item *column_item= new (thd->mem_root) Item_int(thd, 1);
sjm_table_cols.push_back(column_item);
if (!(table= create_tmp_table(thd, &sjm_table_param,
sjm_table_cols, (ORDER*) 0,
@ -5194,6 +5194,7 @@ bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
TABLE_LIST *table;
NESTED_JOIN *nested_join;
List_iterator<TABLE_LIST> li(*join_list);
THD *thd= join->thd;
DBUG_ENTER("setup_jtbm_semi_joins");
while ((table= li++))
@ -5242,7 +5243,7 @@ bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
(subselect_single_select_engine*)subq_pred->engine;
select_value_catcher *new_sink;
if (!(new_sink=
new (join->thd->mem_root) select_value_catcher(join->thd, subq_pred)))
new (thd->mem_root) select_value_catcher(thd, subq_pred)))
DBUG_RETURN(TRUE);
if (new_sink->setup(&engine->select_lex->join->fields_list) ||
engine->select_lex->join->change_result(new_sink, NULL) ||
@ -5262,14 +5263,14 @@ bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
Item *eq_cond;
for (uint i= 0; i < subq_pred->left_expr->cols(); i++)
{
eq_cond= new Item_func_eq(join->thd,
subq_pred->left_expr->element_index(i),
new_sink->row[i]);
eq_cond= new (thd->mem_root)
Item_func_eq(thd, subq_pred->left_expr->element_index(i),
new_sink->row[i]);
if (!eq_cond)
DBUG_RETURN(1);
if (!((*join_where)= and_items(join->thd, *join_where, eq_cond)) ||
(*join_where)->fix_fields(join->thd, join_where))
if (!((*join_where)= and_items(thd, *join_where, eq_cond)) ||
(*join_where)->fix_fields(thd, join_where))
DBUG_RETURN(1);
}
}
@ -5281,7 +5282,7 @@ bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
/* Set up a dummy TABLE*, optimizer code needs JOIN_TABs to have TABLE */
TABLE *dummy_table;
if (!(dummy_table= create_dummy_tmp_table(join->thd)))
if (!(dummy_table= create_dummy_tmp_table(thd)))
DBUG_RETURN(1);
table->table= dummy_table;
table->table->pos_in_table_list= table;
@ -5307,9 +5308,9 @@ bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
Item *sj_conds= hash_sj_engine->semi_join_conds;
(*join_where)= and_items(join->thd, *join_where, sj_conds);
(*join_where)= and_items(thd, *join_where, sj_conds);
if (!(*join_where)->fixed)
(*join_where)->fix_fields(join->thd, join_where);
(*join_where)->fix_fields(thd, join_where);
}
table->table->maybe_null= MY_TEST(join->mixed_implicit_grouping);
}

View File

@ -1217,7 +1217,7 @@ void build_eq_mods_for_cond(THD *thd, Dep_analysis_context *ctx,
}
case Item_func::ISNULL_FUNC:
{
Item *tmp=new Item_null(thd);
Item *tmp=new (thd->mem_root) Item_null(thd);
if (tmp)
check_equality(ctx, eq_mod, *and_level, cond_func, args[0], tmp);
break;

View File

@ -1248,7 +1248,7 @@ bool Protocol_text::send_out_parameters(List<Item_param> *sp_params)
continue; // It's an IN-parameter.
Item_func_set_user_var *suv=
new Item_func_set_user_var(thd, *user_var_name, item_param);
new (thd->mem_root) Item_func_set_user_var(thd, *user_var_name, item_param);
/*
Item_func_set_user_var is not fixed after construction, call
fix_fields().

View File

@ -230,18 +230,19 @@ bool show_slave_hosts(THD* thd)
{
List<Item> field_list;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("show_slave_hosts");
field_list.push_back(new Item_return_int(thd, "Server_id", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Server_id", 10,
MYSQL_TYPE_LONG));
field_list.push_back(new Item_empty_string(thd, "Host", 20));
field_list.push_back(new (mem_root) Item_empty_string(thd, "Host", 20));
if (opt_show_slave_auth_info)
{
field_list.push_back(new Item_empty_string(thd, "User", 20));
field_list.push_back(new Item_empty_string(thd, "Password", 20));
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 Item_return_int(thd, "Port", 7, MYSQL_TYPE_LONG));
field_list.push_back(new Item_return_int(thd, "Master_id", 10,
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));
if (protocol->send_result_set_metadata(&field_list,

View File

@ -788,12 +788,33 @@ int set_var::light_check(THD *thd)
Consider set_var::check() method if there is a need to return
an error due to logics.
*/
int set_var::update(THD *thd)
{
return value ? var->update(thd, this) : var->set_default(thd, this);
}
set_var::set_var(THD *thd, enum_var_type type_arg, sys_var *var_arg,
const LEX_STRING *base_name_arg, Item *value_arg)
:var(var_arg), type(type_arg), base(*base_name_arg)
{
/*
If the set value is a field, change it to a string to allow things like
SET table_type=MYISAM;
*/
if (value_arg && value_arg->type() == Item::FIELD_ITEM)
{
Item_field *item= (Item_field*) value_arg;
// names are utf8
if (!(value= new (thd->mem_root) Item_string_sys(thd, item->field_name)))
value=value_arg; /* Give error message later */
}
else
value=value_arg;
}
/*****************************************************************************
Functions to handle SET @user_variable=const_expr
*****************************************************************************/

View File

@ -286,23 +286,7 @@ public:
LEX_STRING base; /**< for structured variables, like keycache_name.variable_name */
set_var(THD *thd, enum_var_type type_arg, sys_var *var_arg,
const LEX_STRING *base_name_arg, Item *value_arg)
:var(var_arg), type(type_arg), base(*base_name_arg)
{
/*
If the set value is a field, change it to a string to allow things like
SET table_type=MYISAM;
*/
if (value_arg && value_arg->type() == Item::FIELD_ITEM)
{
Item_field *item= (Item_field*) value_arg;
// names are utf8
if (!(value=new Item_string_sys(thd, item->field_name)))
value=value_arg; /* Give error message later */
}
else
value=value_arg;
}
const LEX_STRING *base_name_arg, Item *value_arg);
virtual bool is_system() { return 1; }
int check(THD *thd);
int update(THD *thd);

View File

@ -2515,113 +2515,114 @@ static bool send_show_master_info_header(THD *thd, bool full,
List<Item> field_list;
Protocol *protocol= thd->protocol;
Master_info *mi;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("show_master_info_header");
if (full)
{
field_list.push_back(new Item_empty_string(thd, "Connection_name",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Connection_name",
MAX_CONNECTION_NAME));
field_list.push_back(new Item_empty_string(thd, "Slave_SQL_State",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Slave_SQL_State",
30));
}
field_list.push_back(new Item_empty_string(thd, "Slave_IO_State",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Slave_IO_State",
30));
field_list.push_back(new Item_empty_string(thd, "Master_Host",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_Host",
sizeof(mi->host)));
field_list.push_back(new Item_empty_string(thd, "Master_User",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_User",
sizeof(mi->user)));
field_list.push_back(new Item_return_int(thd, "Master_Port", 7,
field_list.push_back(new (mem_root) Item_return_int(thd, "Master_Port", 7,
MYSQL_TYPE_LONG));
field_list.push_back(new Item_return_int(thd, "Connect_Retry", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Connect_Retry", 10,
MYSQL_TYPE_LONG));
field_list.push_back(new Item_empty_string(thd, "Master_Log_File",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_Log_File",
FN_REFLEN));
field_list.push_back(new Item_return_int(thd, "Read_Master_Log_Pos", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Read_Master_Log_Pos", 10,
MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_empty_string(thd, "Relay_Log_File",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Relay_Log_File",
FN_REFLEN));
field_list.push_back(new Item_return_int(thd, "Relay_Log_Pos", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Relay_Log_Pos", 10,
MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_empty_string(thd, "Relay_Master_Log_File",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Relay_Master_Log_File",
FN_REFLEN));
field_list.push_back(new Item_empty_string(thd, "Slave_IO_Running", 3));
field_list.push_back(new Item_empty_string(thd, "Slave_SQL_Running", 3));
field_list.push_back(new Item_empty_string(thd, "Replicate_Do_DB", 20));
field_list.push_back(new Item_empty_string(thd, "Replicate_Ignore_DB", 20));
field_list.push_back(new Item_empty_string(thd, "Replicate_Do_Table", 20));
field_list.push_back(new Item_empty_string(thd, "Replicate_Ignore_Table",
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 Item_empty_string(thd, "Replicate_Wild_Do_Table",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Wild_Do_Table",
24));
field_list.push_back(new Item_empty_string(thd, "Replicate_Wild_Ignore_Table",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Wild_Ignore_Table",
28));
field_list.push_back(new Item_return_int(thd, "Last_Errno", 4,
field_list.push_back(new (mem_root) Item_return_int(thd, "Last_Errno", 4,
MYSQL_TYPE_LONG));
field_list.push_back(new Item_empty_string(thd, "Last_Error", 20));
field_list.push_back(new Item_return_int(thd, "Skip_Counter", 10,
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 Item_return_int(thd, "Exec_Master_Log_Pos", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Exec_Master_Log_Pos", 10,
MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_return_int(thd, "Relay_Log_Space", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Relay_Log_Space", 10,
MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_empty_string(thd, "Until_Condition", 6));
field_list.push_back(new Item_empty_string(thd, "Until_Log_File", FN_REFLEN));
field_list.push_back(new Item_return_int(thd, "Until_Log_Pos", 10,
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 Item_empty_string(thd, "Master_SSL_Allowed", 7));
field_list.push_back(new Item_empty_string(thd, "Master_SSL_CA_File",
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 Item_empty_string(thd, "Master_SSL_CA_Path",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_CA_Path",
sizeof(mi->ssl_capath)));
field_list.push_back(new Item_empty_string(thd, "Master_SSL_Cert",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Cert",
sizeof(mi->ssl_cert)));
field_list.push_back(new Item_empty_string(thd, "Master_SSL_Cipher",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Cipher",
sizeof(mi->ssl_cipher)));
field_list.push_back(new Item_empty_string(thd, "Master_SSL_Key",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Key",
sizeof(mi->ssl_key)));
field_list.push_back(new Item_return_int(thd, "Seconds_Behind_Master", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Seconds_Behind_Master", 10,
MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_empty_string(thd,
field_list.push_back(new (mem_root) Item_empty_string(thd,
"Master_SSL_Verify_Server_Cert",
3));
field_list.push_back(new Item_return_int(thd, "Last_IO_Errno", 4,
field_list.push_back(new (mem_root) Item_return_int(thd, "Last_IO_Errno", 4,
MYSQL_TYPE_LONG));
field_list.push_back(new Item_empty_string(thd, "Last_IO_Error", 20));
field_list.push_back(new Item_return_int(thd, "Last_SQL_Errno", 4,
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 Item_empty_string(thd, "Last_SQL_Error", 20));
field_list.push_back(new Item_empty_string(thd, "Replicate_Ignore_Server_Ids",
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 Item_return_int(thd, "Master_Server_Id",
field_list.push_back(new (mem_root) Item_return_int(thd, "Master_Server_Id",
sizeof(ulong),
MYSQL_TYPE_LONG));
field_list.push_back(new Item_empty_string(thd, "Master_SSL_Crl",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Crl",
sizeof(mi->ssl_crl)));
field_list.push_back(new Item_empty_string(thd, "Master_SSL_Crlpath",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Master_SSL_Crlpath",
sizeof(mi->ssl_crlpath)));
field_list.push_back(new Item_empty_string(thd, "Using_Gtid",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Using_Gtid",
sizeof("Current_Pos")-1));
field_list.push_back(new Item_empty_string(thd, "Gtid_IO_Pos", 30));
field_list.push_back(new Item_empty_string(thd, "Replicate_Do_Domain_Ids",
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 Item_empty_string(thd, "Replicate_Ignore_Domain_Ids",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Replicate_Ignore_Domain_Ids",
FN_REFLEN));
field_list.push_back(new Item_empty_string(thd, "Parallel_Mode",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Parallel_Mode",
sizeof("conservative")-1));
if (full)
{
field_list.push_back(new Item_return_int(thd, "Retried_transactions",
field_list.push_back(new (mem_root) Item_return_int(thd, "Retried_transactions",
10, MYSQL_TYPE_LONG));
field_list.push_back(new Item_return_int(thd, "Max_relay_log_size",
field_list.push_back(new (mem_root) Item_return_int(thd, "Max_relay_log_size",
10, MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_return_int(thd, "Executed_log_entries",
field_list.push_back(new (mem_root) Item_return_int(thd, "Executed_log_entries",
10, MYSQL_TYPE_LONG));
field_list.push_back(new Item_return_int(thd, "Slave_received_heartbeats",
field_list.push_back(new (mem_root) Item_return_int(thd, "Slave_received_heartbeats",
10, MYSQL_TYPE_LONG));
field_list.push_back(new Item_float(thd, "Slave_heartbeat_period",
field_list.push_back(new (mem_root) Item_float(thd, "Slave_heartbeat_period",
0.0, 3, 10));
field_list.push_back(new Item_empty_string(thd, "Gtid_Slave_Pos",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Gtid_Slave_Pos",
gtid_pos_length));
}

View File

@ -2021,7 +2021,7 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
if (spvar->mode == sp_variable::MODE_OUT)
{
Item_null *null_item= new Item_null(thd);
Item_null *null_item= new (thd->mem_root) Item_null(thd);
Item *tmp_item= null_item;
if (!null_item ||
@ -2561,6 +2561,7 @@ sp_head::show_create_routine(THD *thd, int type)
LEX_STRING sql_mode;
bool full_access;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("sp_head::show_create_routine");
DBUG_PRINT("info", ("routine %s", m_name.str));
@ -2575,8 +2576,8 @@ sp_head::show_create_routine(THD *thd, int type)
/* Send header. */
fields.push_back(new Item_empty_string(thd, col1_caption, NAME_CHAR_LEN));
fields.push_back(new Item_empty_string(thd, "sql_mode", sql_mode.length));
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));
{
/*
@ -2585,7 +2586,7 @@ sp_head::show_create_routine(THD *thd, int type)
*/
Item_empty_string *stmt_fld=
new Item_empty_string(thd, col3_caption,
new (mem_root) Item_empty_string(thd, col3_caption,
MY_MAX(m_defstr.length, 1024));
stmt_fld->maybe_null= TRUE;
@ -2593,13 +2594,13 @@ sp_head::show_create_routine(THD *thd, int type)
fields.push_back(stmt_fld);
}
fields.push_back(new Item_empty_string(thd, "character_set_client",
fields.push_back(new (mem_root) Item_empty_string(thd, "character_set_client",
MY_CS_NAME_SIZE));
fields.push_back(new Item_empty_string(thd, "collation_connection",
fields.push_back(new (mem_root) Item_empty_string(thd, "collation_connection",
MY_CS_NAME_SIZE));
fields.push_back(new Item_empty_string(thd, "Database Collation",
fields.push_back(new (mem_root) Item_empty_string(thd, "Database Collation",
MY_CS_NAME_SIZE));
if (protocol->send_result_set_metadata(&fields,
@ -2783,10 +2784,11 @@ 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 Item_uint(thd, "Pos", 9));
field_list.push_back(new (thd->mem_root) Item_uint(thd, "Pos", 9));
// 1024 is for not to confuse old clients
field_list.push_back(new Item_empty_string(thd, "Instruction",
MY_MAX(buffer.length(), 1024)));
field_list.push_back(new (thd->mem_root)
Item_empty_string(thd, "Instruction",
MY_MAX(buffer.length(), 1024)));
if (protocol->send_result_set_metadata(&field_list, Protocol::SEND_NUM_ROWS |
Protocol::SEND_EOF))
DBUG_RETURN(1);
@ -3895,7 +3897,7 @@ sp_instr_set_case_expr::exec_core(THD *thd, uint *nextp)
initialized. Set to NULL so we can continue.
*/
Item *null_item= new Item_null(thd);
Item *null_item= new (thd->mem_root) Item_null(thd);
if (!null_item ||
thd->spcont->set_case_expr(thd, m_case_expr_id, &null_item))

View File

@ -137,7 +137,7 @@ bool sp_rcontext::init_var_items(THD *thd)
for (uint idx = 0; idx < num_vars; ++idx)
{
if (!(m_var_items[idx]= new Item_field(thd, m_var_table->field[idx])))
if (!(m_var_items[idx]= new (thd->mem_root) Item_field(thd, m_var_table->field[idx])))
return true;
}

View File

@ -7788,7 +7788,7 @@ bool mysql_show_grants(THD *thd, LEX_USER *lex_user)
}
DBUG_ASSERT(rolename || username);
Item_string *field=new Item_string_ascii(thd, "", 0);
Item_string *field=new (thd->mem_root) Item_string_ascii(thd, "", 0);
List<Item> field_list;
field->name=buff;
field->max_length=1024;

View File

@ -326,14 +326,14 @@ 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 Item_empty_string(thd, "Table",
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Table",
NAME_CHAR_LEN * 2));
item->maybe_null = 1;
field_list.push_back(item = new Item_empty_string(thd, "Op", 10));
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Op", 10));
item->maybe_null = 1;
field_list.push_back(item = new Item_empty_string(thd, "Msg_type", 10));
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Msg_type", 10));
item->maybe_null = 1;
field_list.push_back(item = new Item_empty_string(thd, "Msg_text",
field_list.push_back(item= new (thd->mem_root) Item_empty_string(thd, "Msg_text",
SQL_ADMIN_MSG_TEXT_SIZE));
item->maybe_null = 1;
if (protocol->send_result_set_metadata(&field_list,

View File

@ -1168,22 +1168,24 @@ int collect_ulonglong(ulonglong *element,
bool analyse::change_columns(THD *thd, List<Item> &field_list)
{
MEM_ROOT *mem_root= thd->mem_root;
field_list.empty();
func_items[0] = new Item_proc_string(thd, "Field_name", 255);
func_items[1] = new Item_proc_string(thd, "Min_value", 255);
func_items[0]= new (mem_root) Item_proc_string(thd, "Field_name", 255);
func_items[1]= new (mem_root) Item_proc_string(thd, "Min_value", 255);
func_items[1]->maybe_null = 1;
func_items[2] = new Item_proc_string(thd, "Max_value", 255);
func_items[2]= new (mem_root) Item_proc_string(thd, "Max_value", 255);
func_items[2]->maybe_null = 1;
func_items[3] = new Item_proc_int(thd, "Min_length");
func_items[4] = new Item_proc_int(thd, "Max_length");
func_items[5] = new Item_proc_int(thd, "Empties_or_zeros");
func_items[6] = new Item_proc_int(thd, "Nulls");
func_items[7] = new Item_proc_string(thd, "Avg_value_or_avg_length", 255);
func_items[8] = new Item_proc_string(thd, "Std", 255);
func_items[3]= new (mem_root) Item_proc_int(thd, "Min_length");
func_items[4]= new (mem_root) Item_proc_int(thd, "Max_length");
func_items[5]= new (mem_root) Item_proc_int(thd, "Empties_or_zeros");
func_items[6]= new (mem_root) Item_proc_int(thd, "Nulls");
func_items[7]= new (mem_root) Item_proc_string(thd, "Avg_value_or_avg_length", 255);
func_items[8]= new (mem_root) Item_proc_string(thd, "Std", 255);
func_items[8]->maybe_null = 1;
func_items[9] = new Item_proc_string(thd, "Optimal_fieldtype",
MY_MAX(64, output_str_length));
func_items[9]= new (mem_root) Item_proc_string(thd, "Optimal_fieldtype",
MY_MAX(64,
output_str_length));
for (uint i = 0; i < array_elements(func_items); i++)
field_list.push_back(func_items[i]);

View File

@ -7304,7 +7304,7 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
set_new_item_local_context(thd, item_ident_2, nj_col_2->table_ref))
goto err;
if (!(eq_cond= new Item_func_eq(thd, item_ident_1, item_ident_2)))
if (!(eq_cond= new (thd->mem_root) Item_func_eq(thd, item_ident_1, item_ident_2)))
goto err; /* Out of memory. */
if (field_1 && field_1->vcol_info)
@ -7651,7 +7651,7 @@ store_top_level_join_columns(THD *thd, TABLE_LIST *table_ref,
/* Add a TRUE condition to outer joins that have no common columns. */
if (table_ref_2->outer_join &&
!table_ref_1->on_expr && !table_ref_2->on_expr)
table_ref_2->on_expr= new Item_int(thd, (longlong) 1, 1); // Always true.
table_ref_2->on_expr= new (thd->mem_root) Item_int(thd, (longlong) 1, 1); // Always true.
/* Change this table reference to become a leaf for name resolution. */
if (left_neighbor)
@ -7816,7 +7816,7 @@ int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields,
Item_int do not need fix_fields() because it is basic constant.
*/
it.replace(new Item_int(thd, "Not_used", (longlong) 1,
it.replace(new (thd->mem_root) Item_int(thd, "Not_used", (longlong) 1,
MY_INT64_NUM_DECIMAL_DIGITS));
}
else if (insert_fields(thd, ((Item_field*) item)->context,
@ -8510,7 +8510,7 @@ void wrap_ident(THD *thd, Item **conds)
DBUG_ASSERT((*conds)->type() == Item::FIELD_ITEM || (*conds)->type() == Item::REF_ITEM);
Query_arena *arena, backup;
arena= thd->activate_stmt_arena_if_needed(&backup);
if ((wrapper= new Item_direct_ref_to_ident(thd, (Item_ident *) (*conds))))
if ((wrapper= new (thd->mem_root) Item_direct_ref_to_ident(thd, (Item_ident *) (*conds))))
(*conds)= (Item*) wrapper;
if (arena)
thd->restore_active_arena(arena, &backup);

View File

@ -2456,10 +2456,10 @@ int THD::send_explain_fields(select_result *result, uint8 explain_flags, bool is
void THD::make_explain_json_field_list(List<Item> &field_list, bool is_analyze)
{
Item *item= new Item_empty_string(this, (is_analyze ?
"ANALYZE" :
"EXPLAIN"),
78, system_charset_info);
Item *item= new (mem_root) Item_empty_string(this, (is_analyze ?
"ANALYZE" :
"EXPLAIN"),
78, system_charset_info);
field_list.push_back(item);
}
@ -2477,59 +2477,70 @@ void THD::make_explain_field_list(List<Item> &field_list, uint8 explain_flags,
{
Item *item;
CHARSET_INFO *cs= system_charset_info;
field_list.push_back(item= new Item_return_int(this, "id", 3,
MYSQL_TYPE_LONGLONG));
field_list.push_back(item= new (mem_root)
Item_return_int(this, "id", 3,
MYSQL_TYPE_LONGLONG));
item->maybe_null= 1;
field_list.push_back(new Item_empty_string(this, "select_type", 19, cs));
field_list.push_back(item= new Item_empty_string(this, "table", NAME_CHAR_LEN,
cs));
field_list.push_back(new (mem_root)
Item_empty_string(this, "select_type", 19, cs));
field_list.push_back(item= new (mem_root)
Item_empty_string(this, "table", NAME_CHAR_LEN, cs));
item->maybe_null= 1;
if (explain_flags & DESCRIBE_PARTITIONS)
{
/* Maximum length of string that make_used_partitions_str() can produce */
item= new Item_empty_string(this, "partitions",
MAX_PARTITIONS * (1 + FN_LEN), cs);
item= new (mem_root) Item_empty_string(this, "partitions",
MAX_PARTITIONS * (1 + FN_LEN), cs);
field_list.push_back(item);
item->maybe_null= 1;
}
field_list.push_back(item= new Item_empty_string(this, "type", 10, cs));
field_list.push_back(item= new (mem_root)
Item_empty_string(this, "type", 10, cs));
item->maybe_null= 1;
field_list.push_back(item=new Item_empty_string(this, "possible_keys",
NAME_CHAR_LEN*MAX_KEY, cs));
field_list.push_back(item= new (mem_root)
Item_empty_string(this, "possible_keys",
NAME_CHAR_LEN*MAX_KEY, cs));
item->maybe_null=1;
field_list.push_back(item=new Item_empty_string(this, "key", NAME_CHAR_LEN,
cs));
field_list.push_back(item=new (mem_root)
Item_empty_string(this, "key", NAME_CHAR_LEN, cs));
item->maybe_null=1;
field_list.push_back(item=new Item_empty_string(this, "key_len",
NAME_CHAR_LEN*MAX_KEY));
field_list.push_back(item=new (mem_root)
Item_empty_string(this, "key_len",
NAME_CHAR_LEN*MAX_KEY));
item->maybe_null=1;
field_list.push_back(item=new Item_empty_string(this, "ref",
NAME_CHAR_LEN*MAX_REF_PARTS,
cs));
field_list.push_back(item=new (mem_root)
Item_empty_string(this, "ref",
NAME_CHAR_LEN*MAX_REF_PARTS,
cs));
item->maybe_null=1;
field_list.push_back(item= new Item_return_int(this, "rows", 10,
MYSQL_TYPE_LONGLONG));
field_list.push_back(item= new (mem_root)
Item_return_int(this, "rows", 10,
MYSQL_TYPE_LONGLONG));
if (is_analyze)
{
field_list.push_back(item= new Item_float(this, "r_rows", 0.1234, 10, 4));
field_list.push_back(item= new (mem_root)
Item_float(this, "r_rows", 0.1234, 10, 4));
item->maybe_null=1;
}
if (is_analyze || (explain_flags & DESCRIBE_EXTENDED))
{
field_list.push_back(item= new Item_float(this, "filtered", 0.1234, 2, 4));
field_list.push_back(item= new (mem_root)
Item_float(this, "filtered", 0.1234, 2, 4));
item->maybe_null=1;
}
if (is_analyze)
{
field_list.push_back(item= new Item_float(this, "r_filtered", 0.1234, 2,
4));
field_list.push_back(item= new (mem_root)
Item_float(this, "r_filtered", 0.1234, 2,
4));
item->maybe_null=1;
}
item->maybe_null= 1;
field_list.push_back(new Item_empty_string(this, "Extra", 255, cs));
field_list.push_back(new (mem_root)
Item_empty_string(this, "Extra", 255, cs));
}
@ -3807,7 +3818,7 @@ Statement_map::~Statement_map()
bool my_var_user::set(THD *thd, Item *item)
{
Item_func_set_user_var *suv= new Item_func_set_user_var(thd, name, item);
Item_func_set_user_var *suv= new (thd->mem_root) Item_func_set_user_var(thd, name, item);
suv->save_item_result(item);
return suv->fix_fields(thd, 0) || suv->update();
}

View File

@ -5334,6 +5334,13 @@ inline bool add_group_to_list(THD *thd, Item *item, bool asc)
return thd->lex->current_select->add_group_to_list(thd, item, asc);
}
inline Item *and_conds(THD *thd, Item *a, Item *b)
{
if (!b) return a;
if (!a) return b;
return new (thd->mem_root) Item_cond_and(thd, a, b);
}
/* inline handler methods that need to know TABLE and THD structures */
inline void handler::increment_statistics(ulong SSV::*offset) const
{

View File

@ -814,13 +814,15 @@ const LEX_STRING warning_level_names[]=
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 Item_empty_string(thd, "Level", 7));
field_list.push_back(new Item_return_int(thd, "Code", 4, MYSQL_TYPE_LONG));
field_list.push_back(new Item_empty_string(thd, "Message",
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,

View File

@ -227,8 +227,8 @@ void Explain_query::print_explain_json(select_result_sink *output, bool is_analy
CHARSET_INFO *cs= system_charset_info;
List<Item> item_list;
String *buf= &writer.output;
item_list.push_back(new Item_string(output->thd, buf->ptr(), buf->length(),
cs));
item_list.push_back(new (thd->mem_root)
Item_string(thd, buf->ptr(), buf->length(), cs));
output->send_data(item_list);
}
@ -260,13 +260,13 @@ 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 Item_string_sys(thd, str));
item_list->push_back(new (thd->mem_root) Item_string_sys(thd, str));
}
static void push_string(THD *thd, List<Item> *item_list, String *str)
{
item_list->push_back(new Item_string_sys(thd, str->ptr(), str->length()));
item_list->push_back(new (thd->mem_root) Item_string_sys(thd, str->ptr(), str->length()));
}
static void push_string_list(THD *thd, List<Item> *item_list,
@ -318,25 +318,26 @@ int print_explain_row(select_result_sink *result,
const char *extra)
{
THD *thd= result->thd;
Item *item_null= new Item_null(thd);
Item *item_null= new (thd->mem_root) Item_null(thd);
List<Item> item_list;
Item *item;
MEM_ROOT *mem_root= thd->mem_root;
item_list.push_back(new Item_int(thd, (int32) select_number));
item_list.push_back(new Item_string_sys(thd, select_type));
item_list.push_back(new Item_string_sys(thd, table_name));
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));
if (options & DESCRIBE_PARTITIONS)
{
if (partitions)
{
item_list.push_back(new Item_string_sys(thd, partitions));
item_list.push_back(new (mem_root) Item_string_sys(thd, partitions));
}
else
item_list.push_back(item_null);
}
const char *jtype_str= join_type_str[jtype];
item_list.push_back(new Item_string_sys(thd, jtype_str));
item_list.push_back(new (mem_root) Item_string_sys(thd, jtype_str));
/* 'possible_keys' */
if (possible_keys && !possible_keys->is_empty())
@ -348,21 +349,21 @@ int print_explain_row(select_result_sink *result,
item_list.push_back(item_null);
/* 'index */
item= index ? new Item_string_sys(thd, index) : item_null;
item= index ? new (mem_root) Item_string_sys(thd, index) : item_null;
item_list.push_back(item);
/* 'key_len */
item= key_len ? new Item_string_sys(thd, key_len) : item_null;
item= key_len ? new (mem_root) Item_string_sys(thd, key_len) : item_null;
item_list.push_back(item);
/* 'ref' */
item= ref ? new Item_string_sys(thd, ref) : item_null;
item= ref ? new (mem_root) Item_string_sys(thd, ref) : item_null;
item_list.push_back(item);
/* 'rows' */
if (rows)
{
item_list.push_back(new Item_int(thd, *rows,
item_list.push_back(new (mem_root) Item_int(thd, *rows,
MY_INT64_NUM_DECIMAL_DIGITS));
}
else
@ -372,7 +373,7 @@ int print_explain_row(select_result_sink *result,
if (is_analyze)
{
if (r_rows)
item_list.push_back(new Item_float(thd, *r_rows, 2));
item_list.push_back(new (mem_root) Item_float(thd, *r_rows, 2));
else
item_list.push_back(item_null);
}
@ -380,15 +381,15 @@ int print_explain_row(select_result_sink *result,
/* 'filtered' */
const double filtered=100.0;
if (options & DESCRIBE_EXTENDED || is_analyze)
item_list.push_back(new Item_float(thd, filtered, 2));
item_list.push_back(new (mem_root) Item_float(thd, filtered, 2));
/* 'r_filtered' */
if (is_analyze)
item_list.push_back(new Item_float(thd, r_filtered, 2));
item_list.push_back(new (mem_root) Item_float(thd, r_filtered, 2));
/* 'Extra' */
if (extra)
item_list.push_back(new Item_string_sys(thd, extra));
item_list.push_back(new (mem_root) Item_string_sys(thd, extra));
else
item_list.push_back(item_null);
@ -436,6 +437,7 @@ int Explain_union::print_explain(Explain_query *query,
THD *thd= output->thd;
//CHARSET_INFO *cs= system_charset_info;
char table_name_buffer[SAFE_NAME_LEN];
MEM_ROOT *mem_root= thd->mem_root;
/* print all UNION children, in order */
for (int i= 0; i < (int) union_members.elements(); i++)
@ -449,7 +451,7 @@ int Explain_union::print_explain(Explain_query *query,
/* Print a line with "UNION RESULT" */
List<Item> item_list;
Item *item_null= new Item_null(thd);
Item *item_null= new (mem_root) Item_null(thd);
/* `id` column */
item_list.push_back(item_null);
@ -459,7 +461,7 @@ int Explain_union::print_explain(Explain_query *query,
/* `table` column: something like "<union1,2>" */
uint len= make_union_table_name(table_name_buffer);
item_list.push_back(new Item_string_sys(thd, table_name_buffer, len));
item_list.push_back(new (mem_root) Item_string_sys(thd, table_name_buffer, len));
/* `partitions` column */
if (explain_flags & DESCRIBE_PARTITIONS)
@ -487,7 +489,7 @@ int Explain_union::print_explain(Explain_query *query,
if (is_analyze)
{
double avg_rows= fake_select_lex_tracker.get_avg_rows();
item_list.push_back(new Item_float(thd, avg_rows, 2));
item_list.push_back(new (mem_root) Item_float(thd, avg_rows, 2));
}
/* `filtered` */
@ -504,7 +506,7 @@ int Explain_union::print_explain(Explain_query *query,
{
extra_buf.append(STRING_WITH_LEN("Using filesort"));
}
item_list.push_back(new Item_string_sys(thd, extra_buf.ptr(),
item_list.push_back(new (mem_root) Item_string_sys(thd, extra_buf.ptr(),
extra_buf.length()));
//output->unit.offset_limit_cnt= 0;
@ -701,13 +703,15 @@ int Explain_select::print_explain(Explain_query *query,
uint8 explain_flags, bool is_analyze)
{
THD *thd= output->thd;
MEM_ROOT *mem_root= thd->mem_root;
if (message)
{
List<Item> item_list;
Item *item_null= new Item_null(thd);
Item *item_null= new (mem_root) Item_null(thd);
item_list.push_back(new Item_int(thd, (int32) select_id));
item_list.push_back(new Item_string_sys(thd, select_type));
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));
for (uint i=0 ; i < 7; i++)
item_list.push_back(item_null);
if (explain_flags & DESCRIBE_PARTITIONS)
@ -724,7 +728,7 @@ int Explain_select::print_explain(Explain_query *query,
item_list.push_back(item_null);
}
item_list.push_back(new Item_string_sys(thd, message));
item_list.push_back(new (mem_root) Item_string_sys(thd, message));
if (output->send_data(item_list))
return 1;
@ -1112,13 +1116,13 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
bool using_temporary, bool using_filesort)
{
THD *thd= output->thd;
//CHARSET_INFO *cs= system_charset_info;
MEM_ROOT *mem_root= thd->mem_root;
List<Item> item_list;
Item *item_null= new Item_null(thd);
Item *item_null= new (mem_root) Item_null(thd);
/* `id` column */
item_list.push_back(new Item_int(thd, (int32) select_id));
item_list.push_back(new (mem_root) Item_int(thd, (int32) select_id));
/* `select_type` column */
push_str(thd, &item_list, select_type);
@ -1183,7 +1187,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
/* `rows` */
if (rows_set)
{
item_list.push_back(new Item_int(thd, (longlong) (ulonglong) rows,
item_list.push_back(new (mem_root) Item_int(thd, (longlong) (ulonglong) rows,
MY_INT64_NUM_DECIMAL_DIGITS));
}
else
@ -1199,7 +1203,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
else
{
double avg_rows= tracker.get_avg_rows();
item_list.push_back(new Item_float(thd, avg_rows, 2));
item_list.push_back(new (mem_root) Item_float(thd, avg_rows, 2));
}
}
@ -1208,7 +1212,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
{
if (filtered_set)
{
item_list.push_back(new Item_float(thd, filtered, 2));
item_list.push_back(new (mem_root) Item_float(thd, filtered, 2));
}
else
item_list.push_back(item_null);
@ -1226,7 +1230,7 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
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 Item_float(thd, r_filtered * 100.0, 2));
item_list.push_back(new (mem_root) Item_float(thd, r_filtered * 100.0, 2));
}
}
@ -1260,7 +1264,7 @@ 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 Item_string_sys(thd, extra_buf.ptr(),
item_list.push_back(new (mem_root) Item_string_sys(thd, extra_buf.ptr(),
extra_buf.length()));
if (output->send_data(item_list))

View File

@ -161,7 +161,8 @@ void Expression_cache_tmptable::init()
goto error;
}
if (!(cached_result= new Item_field(table_thd, cache_table->field[0])))
if (!(cached_result= new (table_thd->mem_root)
Item_field(table_thd, cache_table->field[0])))
{
DBUG_PRINT("error", ("Creating Item_field failed"));
goto error;

View File

@ -270,7 +270,7 @@ Condition_information_item::make_utf8_string_item(THD *thd, const String *str)
String tmp(str->ptr(), str->length(), from_cs);
/* If necessary, convert the string (ignoring errors), then copy it over. */
uint conv_errors;
return new Item_string(thd, &tmp, to_cs, &conv_errors,
return new (thd->mem_root) Item_string(thd, &tmp, to_cs, &conv_errors,
DERIVATION_COERCIBLE, MY_REPERTOIRE_UNICODE30);
}

View File

@ -93,7 +93,7 @@ static bool init_fields(THD *thd, TABLE_LIST *tables,
for (; count-- ; find_fields++)
{
/* We have to use 'new' here as field will be re_linked on free */
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
"mysql", find_fields->table_name,
find_fields->field_name);
if (!(find_fields->field= find_field_in_tables(thd, field, tables, NULL,
@ -450,11 +450,13 @@ void get_all_items_for_category(THD *thd, TABLE *items, Field *pfname,
int send_answer_1(Protocol *protocol, String *s1, String *s2, String *s3)
{
THD *thd= protocol->thd;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("send_answer_1");
List<Item> field_list;
field_list.push_back(new Item_empty_string(thd, "name", 64));
field_list.push_back(new Item_empty_string(thd, "description", 1000));
field_list.push_back(new Item_empty_string(thd, "example", 1000));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -494,13 +496,14 @@ int send_answer_1(Protocol *protocol, String *s1, String *s2, String *s3)
int send_header_2(Protocol *protocol, bool for_category)
{
THD *thd= protocol->thd;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("send_header_2");
List<Item> field_list;
if (for_category)
field_list.push_back(new Item_empty_string(thd, "source_category_name",
field_list.push_back(new (mem_root) Item_empty_string(thd, "source_category_name",
64));
field_list.push_back(new Item_empty_string(thd, "name", 64));
field_list.push_back(new Item_empty_string(thd, "is_it_category", 1));
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 |
Protocol::SEND_EOF));
}
@ -628,11 +631,15 @@ SQL_SELECT *prepare_select_for_name(THD *thd, const char *mask, uint mlen,
TABLE_LIST *tables, TABLE *table,
Field *pfname, int *error)
{
Item *cond= new Item_func_like(thd, new Item_field(thd, pfname),
new Item_string(thd, mask, mlen,
pfname->charset()),
new Item_string_ascii(thd, "\\"),
FALSE);
MEM_ROOT *mem_root= thd->mem_root;
Item *cond= new (mem_root)
Item_func_like(thd,
new (mem_root)
Item_field(thd, pfname),
new (mem_root) Item_string(thd, mask, mlen,
pfname->charset()),
new (mem_root) Item_string_ascii(thd, "\\"),
FALSE);
if (thd->is_fatal_error)
return 0; // OOM
return prepare_simple_select(thd, cond, table, error);
@ -767,11 +774,17 @@ bool mysqld_help(THD *thd, const char *mask)
{
Field *topic_cat_id= used_fields[help_topic_help_category_id].field;
Item *cond_topic_by_cat=
new Item_func_equal(thd, new Item_field(thd, topic_cat_id),
new Item_int(thd, (int32) category_id));
new (mem_root)
Item_func_equal(thd,
new (mem_root)
Item_field(thd, topic_cat_id),
new (mem_root)
Item_int(thd, (int32) category_id));
Item *cond_cat_by_cat=
new Item_func_equal(thd, new Item_field(thd, cat_cat_id),
new Item_int(thd, (int32) category_id));
new (mem_root)
Item_func_equal(thd,
new (mem_root) Item_field(thd, cat_cat_id),
new (mem_root) Item_int(thd, (int32) category_id));
if (!(select= prepare_simple_select(thd, cond_topic_by_cat,
tables[0].table, &error)))
goto error;

View File

@ -318,7 +318,7 @@ void JOIN_CACHE::collect_info_on_key_args()
The allocated arrays are adjacent.
NOTES
The memory is allocated in join->thd->memroot
The memory is allocated in join->thd->mem_root
RETURN VALUE
pointer to the first array

View File

@ -2672,6 +2672,7 @@ mysql_execute_command(THD *thd)
if (lex->set_arena_for_set_stmt(&backup))
goto error;
MEM_ROOT *mem_root= thd->mem_root;
while ((var= it++))
{
DBUG_ASSERT(var->is_system());
@ -2699,8 +2700,8 @@ mysql_execute_command(THD *thd)
longlong val= v->var->val_int(&null_value, thd, v->type, &v->base);
o= new set_var(thd, v->type, v->var, &v->base,
(null_value ?
(Item *) new Item_null(thd) :
(Item *) new Item_int(thd, val)));
(Item *) new (mem_root) Item_null(thd) :
(Item *) new (mem_root) Item_int(thd, val)));
}
break;
case GET_UINT:
@ -2711,8 +2712,8 @@ mysql_execute_command(THD *thd)
ulonglong val= v->var->val_int(&null_value, thd, v->type, &v->base);
o= new set_var(thd, v->type, v->var, &v->base,
(null_value ?
(Item *) new Item_null(thd) :
(Item *) new Item_uint(thd, val)));
(Item *) new (mem_root) Item_null(thd) :
(Item *) new (mem_root) Item_uint(thd, val)));
}
break;
case GET_DOUBLE:
@ -2721,8 +2722,8 @@ mysql_execute_command(THD *thd)
double val= v->var->val_real(&null_value, thd, v->type, &v->base);
o= new set_var(thd, v->type, v->var, &v->base,
(null_value ?
(Item *) new Item_null(thd) :
(Item *) new Item_float(thd, val, 1)));
(Item *) new (mem_root) Item_null(thd) :
(Item *) new (mem_root) Item_float(thd, val, 1)));
}
break;
default:
@ -2741,13 +2742,13 @@ mysql_execute_command(THD *thd)
val= v->var->val_str(&tmp, thd, v->type, &v->base);
if (val)
{
Item_string *str= new Item_string(thd, v->var->charset(thd),
Item_string *str= new (mem_root) Item_string(thd, v->var->charset(thd),
val->ptr(), val->length());
o= new set_var(thd, v->type, v->var, &v->base, str);
}
else
o= new set_var(thd, v->type, v->var, &v->base,
new Item_null(thd));
new (mem_root) Item_null(thd));
}
break;
}
@ -3003,7 +3004,7 @@ mysql_execute_command(THD *thd)
my_error(ER_WRONG_ARGUMENTS, MYF(0), "PURGE LOGS BEFORE");
goto error;
}
it= new Item_func_unix_timestamp(thd, it);
it= new (thd->mem_root) Item_func_unix_timestamp(thd, it);
it->fix_fields(thd, &it);
res = purge_master_logs_before_date(thd, (ulong)it->val_int());
break;
@ -4088,7 +4089,7 @@ end_with_restore_list:
/* condition will be TRUE on SP re-excuting */
if (select_lex->item_list.elements != 0)
select_lex->item_list.empty();
if (add_item_to_list(thd, new Item_null(thd)))
if (add_item_to_list(thd, new (thd->mem_root) Item_null(thd)))
goto error;
THD_STAGE_INFO(thd, stage_init);
@ -7876,7 +7877,7 @@ Item *normalize_cond(THD *thd, Item *cond)
Item::Type type= cond->type();
if (type == Item::FIELD_ITEM || type == Item::REF_ITEM)
{
cond= new Item_func_ne(thd, cond, new Item_int(thd, 0));
cond= new (thd->mem_root) Item_func_ne(thd, cond, new (thd->mem_root) Item_int(thd, 0));
}
}
return cond;
@ -7911,7 +7912,7 @@ void add_join_on(THD *thd, TABLE_LIST *b, Item *expr)
right and left join. If called later, it happens if we add more
than one condition to the ON clause.
*/
b->on_expr= new Item_cond_and(thd, b->on_expr,expr);
b->on_expr= new (thd->mem_root) Item_cond_and(thd, b->on_expr,expr);
}
b->on_expr->top_level_item();
}
@ -8819,12 +8820,12 @@ Item *negate_expression(THD *thd, Item *expr)
if it is not boolean function then we have to emulate value of
not(not(a)), it will be a != 0
*/
return new Item_func_ne(thd, arg, new Item_int(thd, (char*) "0", 0, 1));
return new (thd->mem_root) Item_func_ne(thd, arg, new (thd->mem_root) Item_int(thd, (char*) "0", 0, 1));
}
if ((negated= expr->neg_transformer(thd)) != 0)
return negated;
return new Item_func_not(thd, expr);
return new (thd->mem_root) Item_func_not(thd, expr);
}
/**

View File

@ -1897,14 +1897,17 @@ static bool mysql_test_multiupdate(Prepared_statement *stmt,
static bool mysql_test_multidelete(Prepared_statement *stmt,
TABLE_LIST *tables)
{
stmt->thd->lex->current_select= &stmt->thd->lex->select_lex;
if (add_item_to_list(stmt->thd, new Item_null(stmt->thd)))
THD *thd= stmt->thd;
thd->lex->current_select= &thd->lex->select_lex;
if (add_item_to_list(thd, new (thd->mem_root)
Item_null(thd)))
{
my_error(ER_OUTOFMEMORY, MYF(ME_FATALERROR), 0);
goto error;
}
if (multi_delete_precheck(stmt->thd, tables) ||
if (multi_delete_precheck(thd, tables) ||
select_like_stmt_test_with_open(stmt, tables,
&mysql_multi_delete_prepare,
OPTION_SETUP_TABLES_DONE))
@ -3369,7 +3372,7 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
DBUG_RETURN(TRUE);
/*
alloc_query() uses thd->memroot && thd->query, so we should call
alloc_query() uses thd->mem_root && thd->query, so we should call
both of backup_statement() and backup_query_arena() here.
*/
thd->set_n_backup_statement(this, &stmt_backup);

View File

@ -121,7 +121,7 @@ int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table)
continue;
field_info= &schema_table->fields_info[i];
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
NullS, NullS, field_info->field_name);
if (field)
{
@ -389,13 +389,14 @@ 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 Item_return_int(thd, "Query_ID", 10,
field_list.push_back(new (mem_root) Item_return_int(thd, "Query_ID", 10,
MYSQL_TYPE_LONG));
field_list.push_back(new Item_return_int(thd, "Duration",
field_list.push_back(new (mem_root) Item_return_int(thd, "Duration",
TIME_FLOAT_DIGITS - 1,
MYSQL_TYPE_DOUBLE));
field_list.push_back(new Item_empty_string(thd, "Query", 40));
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))

View File

@ -4000,13 +4000,15 @@ err:
bool show_binlog_info(THD* thd)
{
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("show_binlog_info");
List<Item> field_list;
field_list.push_back(new Item_empty_string(thd, "File", FN_REFLEN));
field_list.push_back(new Item_return_int(thd, "Position", 20,
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 Item_empty_string(thd, "Binlog_Do_DB", 255));
field_list.push_back(new Item_empty_string(thd, "Binlog_Ignore_DB", 255));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -4049,6 +4051,7 @@ bool show_binlogs(THD* thd)
uint length;
int cur_dir_len;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("show_binlogs");
if (!mysql_bin_log.is_open())
@ -4057,9 +4060,9 @@ bool show_binlogs(THD* thd)
DBUG_RETURN(TRUE);
}
field_list.push_back(new Item_empty_string(thd, "Log_name", 255));
field_list.push_back(new Item_return_int(thd, "File_size", 20,
MYSQL_TYPE_LONGLONG));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE);

View File

@ -512,9 +512,9 @@ fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select,
direct_ref= TRUE;
new_ref= direct_ref ?
new Item_direct_ref(thd, ref->context, item_ref, ref->table_name,
new (thd->mem_root) Item_direct_ref(thd, ref->context, item_ref, ref->table_name,
ref->field_name, ref->alias_name_used) :
new Item_ref(thd, ref->context, item_ref, ref->table_name,
new (thd->mem_root) Item_ref(thd, ref->context, item_ref, ref->table_name,
ref->field_name, ref->alias_name_used);
if (!new_ref)
return TRUE;
@ -892,7 +892,7 @@ JOIN::prepare(Item ***rref_pointer_array,
if ((*ord->item)->type() == Item::FIELD_ITEM &&
(*ord->item)->field_type() == MYSQL_TYPE_BIT)
{
Item_field *field= new Item_field(thd, *(Item_field**)ord->item);
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);
@ -1150,7 +1150,7 @@ TODO: make view to decide if it is possible to write to WHERE directly or make S
conds= having;
having= 0;
}
else if ((conds=new Item_cond_and(conds,having)))
else if ((conds=new (thd->mem_root) Item_cond_and(conds,having)))
{
/*
Item_cond_and can't be fixed after creation, so we do not check
@ -1408,7 +1408,7 @@ TODO: make view to decide if it is possible to write to WHERE directly or make S
if (!conds && outer_join)
{
/* Handle the case where we have an OUTER JOIN without a WHERE */
conds= new Item_int(thd, (longlong) 1,1); // Always true
conds= new (thd->mem_root) Item_int(thd, (longlong) 1,1); // Always true
}
if (impossible_where)
@ -1544,7 +1544,7 @@ TODO: make view to decide if it is possible to write to WHERE directly or make S
if (conds && const_table_map != found_const_table_map &&
(select_options & SELECT_DESCRIBE))
{
conds=new Item_int(thd, (longlong) 0, 1); // Always false
conds=new (thd->mem_root) Item_int(thd, (longlong) 0, 1); // Always false
}
/* Cache constant expressions in WHERE, HAVING, ON clauses. */
@ -2976,7 +2976,7 @@ void JOIN::exec_inner()
else
{
if (!(curr_table->select->cond=
new Item_cond_and(thd, curr_table->select->cond,
new (thd->mem_root) Item_cond_and(thd, curr_table->select->cond,
sort_table_cond)))
DBUG_VOID_RETURN;
}
@ -2985,7 +2985,7 @@ void JOIN::exec_inner()
if (sort_table_cond->type() == Item::COND_ITEM)
sort_table_cond= sort_table_cond->copy_andor_structure(thd);
if (!(curr_table->pre_idx_push_select_cond=
new Item_cond_and(thd, curr_table->pre_idx_push_select_cond,
new (thd->mem_root) Item_cond_and(thd, curr_table->pre_idx_push_select_cond,
sort_table_cond)))
DBUG_VOID_RETURN;
}
@ -3888,7 +3888,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
if (join->cond_value == Item::COND_FALSE)
{
join->impossible_where= true;
conds= new Item_int(join->thd, (longlong) 0, 1);
conds= new (join->thd->mem_root) Item_int(join->thd, (longlong) 0, 1);
}
join->cond_equal= NULL;
@ -4838,7 +4838,7 @@ Item_func_null_predicate::add_key_fields(JOIN *join, KEY_FIELD **key_fields,
/* column_name IS [NOT] NULL */
if (is_local_field(args[0]) && !(used_tables() & OUTER_REF_TABLE_BIT))
{
Item *tmp= new Item_null(join->thd);
Item *tmp= new (join->thd->mem_root) Item_null(join->thd);
if (unlikely(!tmp)) // Should never be true
return;
add_key_equal_fields(join, key_fields, *and_level, this,
@ -9156,7 +9156,7 @@ inline void add_cond_and_fix(THD *thd, Item **e1, Item *e2)
if (!e2)
return;
Item *res;
if ((res= new Item_cond_and(thd, *e1, e2)))
if ((res= new (thd->mem_root) Item_cond_and(thd, *e1, e2)))
{
res->fix_fields(thd, 0);
res->update_used_tables();
@ -9257,7 +9257,8 @@ static void add_not_null_conds(JOIN *join)
*/
if (!referred_tab)
continue;
if (!(notnull= new Item_func_isnotnull(join->thd, not_null_item)))
if (!(notnull= new (join->thd->mem_root)
Item_func_isnotnull(join->thd, not_null_item)))
DBUG_VOID_RETURN;
/*
We need to do full fix_fields() call here in order to have correct
@ -9321,7 +9322,7 @@ add_found_match_trig_cond(THD *thd, JOIN_TAB *tab, COND *cond,
if (tab == root_tab)
return cond;
if ((tmp= add_found_match_trig_cond(thd, tab->first_upper, cond, root_tab)))
tmp= new Item_func_trig_cond(thd, tmp, &tab->found);
tmp= new (thd->mem_root) Item_func_trig_cond(thd, tmp, &tab->found);
if (tmp)
{
tmp->quick_fix_field();
@ -9673,7 +9674,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
below to check if we should use 'quick' instead.
*/
DBUG_PRINT("info", ("Item_int"));
tmp= new Item_int(thd, (longlong) 1, 1); // Always true
tmp= new (thd->mem_root) Item_int(thd, (longlong) 1, 1); // Always true
}
}
@ -9906,13 +9907,13 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
(table_map) 0, -1, FALSE, FALSE);
if (!tmp_cond)
continue;
tmp_cond= new Item_func_trig_cond(thd, tmp_cond,
tmp_cond= new (thd->mem_root) Item_func_trig_cond(thd, tmp_cond,
&cond_tab->not_null_compl);
if (!tmp_cond)
DBUG_RETURN(1);
tmp_cond->quick_fix_field();
cond_tab->select_cond= !cond_tab->select_cond ? tmp_cond :
new Item_cond_and(thd, cond_tab->select_cond,
new (thd->mem_root) Item_cond_and(thd, cond_tab->select_cond,
tmp_cond);
if (!cond_tab->select_cond)
DBUG_RETURN(1);
@ -10013,7 +10014,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
the null complemented row.
*/
DBUG_PRINT("info", ("Item_func_trig_cond"));
tmp_cond= new Item_func_trig_cond(thd, tmp_cond,
tmp_cond= new (thd->mem_root) Item_func_trig_cond(thd, tmp_cond,
&first_inner_tab->
not_null_compl);
DBUG_PRINT("info", ("Item_func_trig_cond 0x%lx",
@ -10024,7 +10025,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
DBUG_PRINT("info", ("Item_cond_and"));
*sel_cond_ref= !(*sel_cond_ref) ?
tmp_cond :
new Item_cond_and(thd, *sel_cond_ref, tmp_cond);
new (thd->mem_root) Item_cond_and(thd, *sel_cond_ref, tmp_cond);
DBUG_PRINT("info", ("Item_cond_and 0x%lx",
(ulong)(*sel_cond_ref)));
if (!(*sel_cond_ref))
@ -11012,7 +11013,8 @@ void JOIN_TAB::remove_redundant_bnl_scan_conds()
{
List_iterator<Item> pushed_cond_li(*((Item_cond*) select_cond)->argument_list());
Item *pushed_item;
Item_cond_and *reduced_select_cond= new Item_cond_and(join->thd);
Item_cond_and *reduced_select_cond= new (join->thd->mem_root)
Item_cond_and(join->thd);
if (is_cond_and(cache_select->cond))
{
@ -12739,7 +12741,7 @@ static bool check_row_equality(THD *thd, Item *left_row, Item_row *right_row,
if (!is_converted)
{
Item_func_eq *eq_item;
if (!(eq_item= new Item_func_eq(thd, left_item, right_item)) ||
if (!(eq_item= new (thd->mem_root) Item_func_eq(thd, left_item, right_item)) ||
eq_item->set_cmp_func_and_arg_cmp_context())
return FALSE;
eq_item->quick_fix_field();
@ -13039,7 +13041,7 @@ COND *Item_func_eq::build_equal_items(THD *thd,
Here a new AND level must be created. It can happen only
when a row equality is processed as a standalone predicate.
*/
Item_cond_and *and_cond= new Item_cond_and(thd, eq_list);
Item_cond_and *and_cond= new (thd->mem_root) Item_cond_and(thd, eq_list);
and_cond->quick_fix_field();
List<Item> *cond_args= and_cond->argument_list();
List_iterator_fast<Item_equal> it(cond_equal.current_level);
@ -13398,7 +13400,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
List<Item> eq_list;
Item_func_eq *eq_item= 0;
if (((Item *) item_equal)->const_item() && !item_equal->val_int())
return new Item_int(thd, (longlong) 0, 1);
return new (thd->mem_root) Item_int(thd, (longlong) 0, 1);
Item *item_const= item_equal->get_const();
Item_equal_fields_iterator it(*item_equal);
Item *head;
@ -13463,7 +13465,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
Upper item also has "field_item=const".
Don't produce equality if const is equal to item_const.
*/
Item_func_eq *func= new Item_func_eq(thd, item_const, upper_const);
Item_func_eq *func= new (thd->mem_root) Item_func_eq(thd, item_const, upper_const);
func->set_cmp_func();
func->quick_fix_field();
if (func->val_int())
@ -13512,7 +13514,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
if (head_real_item->type() == Item::FIELD_ITEM)
head_item= head_real_item;
eq_item= new Item_func_eq(thd, field_item->real_item(), head_item);
eq_item= new (thd->mem_root) Item_func_eq(thd, field_item->real_item(), head_item);
if (!eq_item || eq_item->set_cmp_func())
return 0;
@ -13545,7 +13547,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
switch (eq_list.elements)
{
case 0:
res= cond ? cond : new Item_int(thd, (longlong) 1, 1);
res= cond ? cond : new (thd->mem_root) Item_int(thd, (longlong) 1, 1);
break;
case 1:
if (!cond || cond->type() == Item::INT_ITEM)
@ -13568,7 +13570,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels,
}
}
if (!res)
res= new Item_cond_and(thd, eq_list);
res= new (thd->mem_root) Item_cond_and(thd, eq_list);
if (res)
{
res->quick_fix_field();
@ -15405,8 +15407,8 @@ Item_func_isnull::remove_eq_conds(THD *thd, Item::cond_result *cond_value,
query_cache_abort(&thd->query_cache_tls);
#endif
COND *new_cond, *cond= this;
if ((new_cond= new Item_func_eq(thd, args[0],
new Item_int(thd, "last_insert_id()",
if ((new_cond= new (thd->mem_root) Item_func_eq(thd, args[0],
new (thd->mem_root) Item_int(thd, "last_insert_id()",
thd->read_first_successful_insert_id_in_prev_stmt(),
MY_INT64_NUM_DECIMAL_DIGITS))))
{
@ -16265,7 +16267,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
string_total_length+= new_field->pack_length();
}
thd->mem_root= mem_root_save;
arg= sum_item->set_arg(i, thd, new Item_field(thd, new_field));
arg= sum_item->set_arg(i, thd, new (thd->mem_root) Item_field(thd, new_field));
thd->mem_root= &table->mem_root;
if (param->force_not_null_cols)
{
@ -19849,7 +19851,7 @@ make_cond_for_table_from_pred(THD *thd, Item *root_cond, Item *cond,
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
{
/* Create new top level AND item */
Item_cond_and *new_cond=new Item_cond_and(thd);
Item_cond_and *new_cond=new (thd->mem_root) Item_cond_and(thd);
if (!new_cond)
return (COND*) 0; // OOM /* purecov: inspected */
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -19884,7 +19886,7 @@ make_cond_for_table_from_pred(THD *thd, Item *root_cond, Item *cond,
}
else
{ // Or list
Item_cond_or *new_cond=new Item_cond_or(thd);
Item_cond_or *new_cond=new (thd->mem_root) Item_cond_or(thd);
if (!new_cond)
return (COND*) 0; // OOM /* purecov: inspected */
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -19979,7 +19981,7 @@ make_cond_after_sjm(THD *thd, Item *root_cond, Item *cond, table_map tables,
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
{
/* Create new top level AND item */
Item_cond_and *new_cond= new Item_cond_and(thd);
Item_cond_and *new_cond= new (thd->mem_root) Item_cond_and(thd);
if (!new_cond)
return (COND*) 0; // OOM /* purecov: inspected */
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -20010,7 +20012,7 @@ make_cond_after_sjm(THD *thd, Item *root_cond, Item *cond, table_map tables,
}
else
{ // Or list
Item_cond_or *new_cond= new Item_cond_or(thd);
Item_cond_or *new_cond= new (thd->mem_root) Item_cond_or(thd);
if (!new_cond)
return (COND*) 0; // OOM /* purecov: inspected */
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -22035,7 +22037,7 @@ create_distinct_group(THD *thd, Item **ref_pointer_array,
converted to a LONG field. Original field will remain of the
BIT type and will be returned to a client.
*/
Item_field *new_item= new Item_field(thd, (Item_field*)item);
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);
@ -22445,7 +22447,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
((Item_ref *)pos)->ref_type() == Item_ref::AGGREGATE_REF))
{
Item_field *item;
if (!(item= new Item_field(thd, ((Item_field*) real_pos))))
if (!(item= new (thd->mem_root) Item_field(thd, ((Item_field*) real_pos))))
goto err;
if (pos->type() == Item::REF_ITEM)
{
@ -22458,7 +22460,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
pos= item;
if (item->field->flags & BLOB_FLAG)
{
if (!(pos= new Item_copy_string(thd, pos)))
if (!(pos= new (thd->mem_root) Item_copy_string(thd, pos)))
goto err;
/*
Item_copy_string::copy for function can call
@ -22513,7 +22515,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
on how the value is to be used: In some cases this may be an
argument in a group function, like: IF(ISNULL(col),0,COUNT(*))
*/
if (!(pos=new Item_copy_string(thd, pos)))
if (!(pos=new (thd->mem_root) Item_copy_string(thd, pos)))
goto err;
if (i < border) // HAVING, ORDER and GROUP BY
{
@ -22726,8 +22728,8 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
would access already-unlocked tables.
*/
Item_func_set_user_var* suv=
new Item_func_set_user_var(thd, (Item_func_set_user_var*) item);
Item_field *new_field= new Item_field(thd, field);
new (thd->mem_root) Item_func_set_user_var(thd, (Item_func_set_user_var*) item);
Item_field *new_field= new (thd->mem_root) Item_field(thd, field);
if (!suv || !new_field)
DBUG_RETURN(true); // Fatal error
/*
@ -22750,7 +22752,7 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
if (item->type() == Item::SUM_FUNC_ITEM && field->table->group)
item_field= ((Item_sum*) item)->result_item(thd, field);
else
item_field= (Item *) new Item_field(thd, field);
item_field= (Item *) new (thd->mem_root) Item_field(thd, field);
if (!item_field)
DBUG_RETURN(true); // Fatal error
@ -22990,7 +22992,7 @@ static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab)
if (!join_tab->ref.key_parts)
DBUG_RETURN(FALSE);
Item_cond_and *cond= new Item_cond_and(thd);
Item_cond_and *cond= new (thd->mem_root) Item_cond_and(thd);
TABLE *table=join_tab->table;
int error= 0;
if (!cond)
@ -23001,7 +23003,7 @@ 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 Item_func_equal(thd, new Item_field(thd, field), value));
cond->add(new (thd->mem_root) Item_func_equal(thd, new (thd->mem_root) Item_field(thd, field), value));
}
if (thd->is_fatal_error)
DBUG_RETURN(TRUE);
@ -23118,7 +23120,7 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list,
if (item->eq(*group_tmp->item,0))
{
Item *new_item;
if (!(new_item= new Item_ref(thd, context, group_tmp->item, 0,
if (!(new_item= new (thd->mem_root) Item_ref(thd, context, group_tmp->item, 0,
item->name)))
return 1; // fatal_error is set
thd->change_item_tree(arg, new_item);
@ -23256,7 +23258,7 @@ bool JOIN::rollup_process_const_fields()
{
if (*group_tmp->item == item)
{
Item* new_item= new Item_func_rollup_const(thd, item);
Item* new_item= new (thd->mem_root) Item_func_rollup_const(thd, item);
if (!new_item)
return 1;
new_item->fix_fields(thd, (Item **) 0);
@ -23535,11 +23537,12 @@ int print_explain_message_line(select_result_sink *result,
const char *message)
{
THD *thd= result->thd;
Item *item_null= new Item_null(thd);
MEM_ROOT *mem_root= thd->mem_root;
Item *item_null= new (mem_root) Item_null(thd);
List<Item> item_list;
item_list.push_back(new Item_int(thd, (int32) select_number));
item_list.push_back(new Item_string_sys(thd, select_type));
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));
/* `table` */
item_list.push_back(item_null);
@ -23554,7 +23557,7 @@ int print_explain_message_line(select_result_sink *result,
/* `rows` */
if (rows)
{
item_list.push_back(new Item_int(thd, *rows,
item_list.push_back(new (mem_root) Item_int(thd, *rows,
MY_INT64_NUM_DECIMAL_DIGITS));
}
else
@ -23574,7 +23577,7 @@ int print_explain_message_line(select_result_sink *result,
/* `Extra` */
if (message)
item_list.push_back(new Item_string_sys(thd, message));
item_list.push_back(new (mem_root) Item_string_sys(thd, message));
else
item_list.push_back(item_null);
@ -23629,11 +23632,13 @@ void JOIN_TAB::update_explain_data(uint idx)
join->select_lex->select_number != INT_MAX &&
join->select_lex->select_number != UINT_MAX)
{
Explain_table_access *eta= new (join->thd->mem_root) Explain_table_access(join->thd->mem_root);
Explain_table_access *eta= new (join->thd->mem_root)
Explain_table_access(join->thd->mem_root);
save_explain_data(eta, join->const_table_map, join->select_distinct,
join->first_breadth_first_optimization_tab());
Explain_select *sel= join->thd->lex->explain->get_select(join->select_lex->select_number);
Explain_select *sel= join->thd->lex->explain->
get_select(join->select_lex->select_number);
idx -= my_count_bits(join->eliminated_tables);
sel->replace_table(idx, eta);
}

View File

@ -1852,7 +1852,7 @@ int join_read_record_no_init(JOIN_TAB *tab);
void set_position(JOIN *join,uint idx,JOIN_TAB *table,KEYUSE *key);
inline Item * and_items(THD *thd, Item* cond, Item *item)
{
return (cond ? (new Item_cond_and(thd, cond, item)) : item);
return (cond ? (new (thd->mem_root) Item_cond_and(thd, cond, item)) : item);
}
bool choose_plan(JOIN *join, table_map join_tables);
void optimize_wo_join_buffering(JOIN *join, uint first_tab, uint last_tab,

View File

@ -451,11 +451,12 @@ bool mysqld_show_authors(THD *thd)
{
List<Item> field_list;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_show_authors");
field_list.push_back(new Item_empty_string(thd, "Name", 40));
field_list.push_back(new Item_empty_string(thd, "Location", 40));
field_list.push_back(new Item_empty_string(thd, "Comment", 512));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -485,11 +486,12 @@ bool mysqld_show_contributors(THD *thd)
{
List<Item> field_list;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_show_contributors");
field_list.push_back(new Item_empty_string(thd, "Name", 40));
field_list.push_back(new Item_empty_string(thd, "Location", 40));
field_list.push_back(new Item_empty_string(thd, "Comment", 512));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -562,11 +564,12 @@ bool mysqld_show_privileges(THD *thd)
{
List<Item> field_list;
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_show_privileges");
field_list.push_back(new Item_empty_string(thd, "Privilege", 10));
field_list.push_back(new Item_empty_string(thd, "Context", 15));
field_list.push_back(new Item_empty_string(thd, "Comment", NAME_CHAR_LEN));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -1092,6 +1095,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
String buffer(buff, sizeof(buff), system_charset_info);
List<Item> field_list;
bool error= TRUE;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_show_create");
DBUG_PRINT("enter",("db: %s table: %s",table_list->db,
table_list->table_name));
@ -1144,19 +1148,19 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
if (table_list->view)
{
field_list.push_back(new Item_empty_string(thd, "View", NAME_CHAR_LEN));
field_list.push_back(new Item_empty_string(thd, "Create 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 Item_empty_string(thd, "character_set_client",
field_list.push_back(new (mem_root) Item_empty_string(thd, "character_set_client",
MY_CS_NAME_SIZE));
field_list.push_back(new Item_empty_string(thd, "collation_connection",
field_list.push_back(new (mem_root) Item_empty_string(thd, "collation_connection",
MY_CS_NAME_SIZE));
}
else
{
field_list.push_back(new Item_empty_string(thd, "Table", NAME_CHAR_LEN));
field_list.push_back(new (mem_root) Item_empty_string(thd, "Table", NAME_CHAR_LEN));
// 1024 is for not to confuse old clients
field_list.push_back(new Item_empty_string(thd, "Create Table",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Create Table",
MY_MAX(buffer.length(),1024)));
}
@ -1215,6 +1219,7 @@ bool mysqld_show_create_db(THD *thd, LEX_STRING *dbname,
#endif
Schema_specification_st create;
Protocol *protocol=thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysql_show_create_db");
#ifndef NO_EMBEDDED_ACCESS_CHECKS
@ -1249,8 +1254,8 @@ 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 Item_empty_string(thd, "Database", NAME_CHAR_LEN));
field_list.push_back(new Item_empty_string(thd, "Create Database", 1024));
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));
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
@ -1295,6 +1300,7 @@ void
mysqld_list_fields(THD *thd, TABLE_LIST *table_list, const char *wild)
{
TABLE *table;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_list_fields");
DBUG_PRINT("enter",("table: %s",table_list->table_name));
@ -1313,11 +1319,11 @@ 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 Item_ident_for_show(thd, field,
field_list.push_back(new (mem_root) Item_ident_for_show(thd, field,
table_list->view_db.str,
table_list->view_name.str));
else
field_list.push_back(new Item_field(thd, field));
field_list.push_back(new (mem_root) Item_field(thd, field));
}
}
restore_record(table, s->default_values); // Get empty record
@ -2341,28 +2347,29 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
ulong max_query_length= (verbose ? thd->variables.max_allowed_packet :
PROCESS_LIST_WIDTH);
Protocol *protocol= thd->protocol;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_list_processes");
field_list.push_back(new Item_int(thd, "Id", 0, MY_INT32_NUM_DECIMAL_DIGITS));
field_list.push_back(new Item_empty_string(thd, "User",
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 Item_empty_string(thd, "Host",
field_list.push_back(new (mem_root) Item_empty_string(thd, "Host",
LIST_PROCESS_HOST_LEN));
field_list.push_back(field=new Item_empty_string(thd, "db", NAME_CHAR_LEN));
field_list.push_back(field=new (mem_root) Item_empty_string(thd, "db", NAME_CHAR_LEN));
field->maybe_null=1;
field_list.push_back(new Item_empty_string(thd, "Command", 16));
field_list.push_back(field= new Item_return_int(thd, "Time", 7,
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->unsigned_flag= 0;
field_list.push_back(field=new Item_empty_string(thd, "State", 30));
field_list.push_back(field=new (mem_root) Item_empty_string(thd, "State", 30));
field->maybe_null=1;
field_list.push_back(field=new Item_empty_string(thd, "Info",
field_list.push_back(field=new (mem_root) Item_empty_string(thd, "Info",
max_query_length));
field->maybe_null=1;
if (!thd->variables.old_mode &&
!(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO))
{
field_list.push_back(field= new Item_float(thd, "Progress", 0.0, 3, 7));
field_list.push_back(field= new (mem_root) Item_float(thd, "Progress", 0.0, 3, 7));
field->maybe_null= 0;
}
if (protocol->send_result_set_metadata(&field_list,
@ -3541,7 +3548,7 @@ COND *make_cond_for_info_schema(THD *thd, COND *cond, TABLE_LIST *table)
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
{
/* Create new top level AND item */
Item_cond_and *new_cond=new Item_cond_and(thd);
Item_cond_and *new_cond=new (thd->mem_root) Item_cond_and(thd);
if (!new_cond)
return (COND*) 0;
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -3564,7 +3571,7 @@ COND *make_cond_for_info_schema(THD *thd, COND *cond, TABLE_LIST *table)
}
else
{ // Or list
Item_cond_or *new_cond= new Item_cond_or(thd);
Item_cond_or *new_cond= new (thd->mem_root) Item_cond_or(thd);
if (!new_cond)
return (COND*) 0;
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
@ -7317,6 +7324,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
ST_SCHEMA_TABLE *schema_table= table_list->schema_table;
ST_FIELD_INFO *fields_info= schema_table->fields_info;
CHARSET_INFO *cs= system_charset_info;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("create_schema_table");
for (; fields_info->field_name; fields_info++)
@ -7327,44 +7335,50 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_LONGLONG:
case MYSQL_TYPE_INT24:
if (!(item= new Item_return_int(thd, fields_info->field_name,
fields_info->field_length,
fields_info->field_type,
fields_info->value)))
if (!(item= new (mem_root)
Item_return_int(thd, fields_info->field_name,
fields_info->field_length,
fields_info->field_type,
fields_info->value)))
{
DBUG_RETURN(0);
}
item->unsigned_flag= (fields_info->field_flags & MY_I_S_UNSIGNED);
break;
case MYSQL_TYPE_DATE:
if (!(item=new Item_return_date_time(thd, fields_info->field_name,
strlen(fields_info->field_name),
fields_info->field_type)))
if (!(item=new (mem_root)
Item_return_date_time(thd, fields_info->field_name,
strlen(fields_info->field_name),
fields_info->field_type)))
DBUG_RETURN(0);
break;
case MYSQL_TYPE_TIME:
if (!(item=new Item_return_date_time(thd, fields_info->field_name,
strlen(fields_info->field_name),
fields_info->field_type)))
if (!(item=new (mem_root)
Item_return_date_time(thd, fields_info->field_name,
strlen(fields_info->field_name),
fields_info->field_type)))
DBUG_RETURN(0);
break;
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DATETIME:
if (!(item=new Item_return_date_time(thd, fields_info->field_name,
strlen(fields_info->field_name),
fields_info->field_type)))
if (!(item=new (mem_root)
Item_return_date_time(thd, fields_info->field_name,
strlen(fields_info->field_name),
fields_info->field_type)))
DBUG_RETURN(0);
break;
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
if ((item= new Item_float(thd, fields_info->field_name, 0.0,
NOT_FIXED_DEC,
fields_info->field_length)) == NULL)
if ((item= new (mem_root)
Item_float(thd, fields_info->field_name, 0.0,
NOT_FIXED_DEC,
fields_info->field_length)) == NULL)
DBUG_RETURN(NULL);
break;
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
if (!(item= new Item_decimal(thd, (longlong) fields_info->value, false)))
if (!(item= new (mem_root)
Item_decimal(thd, (longlong) fields_info->value, false)))
{
DBUG_RETURN(0);
}
@ -7372,7 +7386,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
Create a type holder, as we want the type of the item to defined
the type of the object, not the value
*/
if (!(item= new Item_type_holder(thd, item)))
if (!(item= new (mem_root) Item_type_holder(thd, item)))
DBUG_RETURN(0);
item->unsigned_flag= (fields_info->field_flags & MY_I_S_UNSIGNED);
item->decimals= fields_info->field_length%10;
@ -7388,8 +7402,9 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
if (!(item= new Item_blob(thd, fields_info->field_name,
fields_info->field_length)))
if (!(item= new (mem_root)
Item_blob(thd, fields_info->field_name,
fields_info->field_length)))
{
DBUG_RETURN(0);
}
@ -7398,7 +7413,8 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
/* Don't let unimplemented types pass through. Could be a grave error. */
DBUG_ASSERT(fields_info->field_type == MYSQL_TYPE_STRING);
if (!(item= new Item_empty_string(thd, "", fields_info->field_length, cs)))
if (!(item= new (mem_root)
Item_empty_string(thd, "", fields_info->field_length, cs)))
{
DBUG_RETURN(0);
}
@ -7457,8 +7473,8 @@ static int make_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
{
if (field_info->old_name)
{
Item_field *field= new Item_field(thd, context,
NullS, NullS, field_info->field_name);
Item_field *field= new (thd->mem_root)
Item_field(thd, context, NullS, NullS, field_info->field_name);
if (field)
{
field->set_name(field_info->old_name,
@ -7484,7 +7500,7 @@ int make_schemata_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
{
ST_FIELD_INFO *field_info= &schema_table->fields_info[1];
String buffer(tmp,sizeof(tmp), system_charset_info);
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
NullS, NullS, field_info->field_name);
if (!field || add_item_to_list(thd, field))
return 1;
@ -7519,7 +7535,7 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
buffer.append(lex->wild->ptr());
buffer.append(')');
}
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
NullS, NullS, field_info->field_name);
if (add_item_to_list(thd, field))
return 1;
@ -7528,7 +7544,7 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
{
field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
field_info= &schema_table->fields_info[3];
field= new Item_field(thd, context, NullS, NullS, field_info->field_name);
field= new (thd->mem_root) Item_field(thd, context, NullS, NullS, field_info->field_name);
if (add_item_to_list(thd, field))
return 1;
field->set_name(field_info->old_name, strlen(field_info->old_name),
@ -7552,7 +7568,7 @@ int make_columns_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
*field_num == 18 ||
*field_num == 19))
continue;
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
NullS, NullS, field_info->field_name);
if (field)
{
@ -7577,7 +7593,7 @@ int make_character_sets_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
for (; *field_num >= 0; field_num++)
{
field_info= &schema_table->fields_info[*field_num];
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
NullS, NullS, field_info->field_name);
if (field)
{
@ -7602,7 +7618,7 @@ int make_proc_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
for (; *field_num >= 0; field_num++)
{
field_info= &schema_table->fields_info[*field_num];
Item_field *field= new Item_field(thd, context,
Item_field *field= new (thd->mem_root) Item_field(thd, context,
NullS, NullS, field_info->field_name);
if (field)
{
@ -9113,10 +9129,8 @@ static bool show_create_trigger_impl(THD *thd,
int trigger_idx)
{
int ret_code;
Protocol *p= thd->protocol;
List<Item> fields;
LEX_STRING trg_name;
ulonglong trg_sql_mode;
LEX_STRING trg_sql_mode_str;
@ -9124,8 +9138,8 @@ static bool show_create_trigger_impl(THD *thd,
LEX_STRING trg_client_cs_name;
LEX_STRING trg_connection_cl_name;
LEX_STRING trg_db_cl_name;
CHARSET_INFO *trg_client_cs;
MEM_ROOT *mem_root= thd->mem_root;
/*
TODO: Check privileges here. This functionality will be added by
@ -9157,8 +9171,8 @@ static bool show_create_trigger_impl(THD *thd,
/* Send header. */
fields.push_back(new Item_empty_string(thd, "Trigger", NAME_LEN));
fields.push_back(new Item_empty_string(thd, "sql_mode",
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));
{
@ -9168,7 +9182,7 @@ static bool show_create_trigger_impl(THD *thd,
*/
Item_empty_string *stmt_fld=
new Item_empty_string(thd, "SQL Original Statement",
new (mem_root) Item_empty_string(thd, "SQL Original Statement",
MY_MAX(trg_sql_original_stmt.length, 1024));
stmt_fld->maybe_null= TRUE;
@ -9176,13 +9190,13 @@ static bool show_create_trigger_impl(THD *thd,
fields.push_back(stmt_fld);
}
fields.push_back(new Item_empty_string(thd, "character_set_client",
fields.push_back(new (mem_root) Item_empty_string(thd, "character_set_client",
MY_CS_NAME_SIZE));
fields.push_back(new Item_empty_string(thd, "collation_connection",
fields.push_back(new (mem_root) Item_empty_string(thd, "collation_connection",
MY_CS_NAME_SIZE));
fields.push_back(new Item_empty_string(thd, "Database Collation",
fields.push_back(new (mem_root) Item_empty_string(thd, "Database Collation",
MY_CS_NAME_SIZE));
if (p->send_result_set_metadata(&fields, Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))

View File

@ -9626,9 +9626,9 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables,
*/
DBUG_ASSERT(! thd->in_sub_stmt);
field_list.push_back(item = new 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));
item->maybe_null= 1;
field_list.push_back(item= new Item_int(thd, "Checksum",
field_list.push_back(item= new (thd->mem_root) Item_int(thd, "Checksum",
(longlong) 1,
MY_INT64_NUM_DECIMAL_DIGITS));
item->maybe_null= 1;

View File

@ -342,6 +342,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
bool is_union_select;
bool instantiate_tmp_table= false;
DBUG_ENTER("st_select_lex_unit::prepare");
DBUG_ASSERT(thd == thd_arg && thd == current_thd);
describe= MY_TEST(additional_options & SELECT_DESCRIBE);
@ -484,7 +485,8 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
while ((item_tmp= it++))
{
/* Error's in 'new' will be detected after loop */
types.push_back(new Item_type_holder(thd_arg, item_tmp));
types.push_back(new (thd_arg->mem_root)
Item_type_holder(thd_arg, item_tmp));
}
if (thd_arg->is_fatal_error)

View File

@ -148,7 +148,7 @@ static bool check_fields(THD *thd, List<Item> &items)
we make temporary copy of Item_field, to avoid influence of changing
result_field on Item_ref which refer on this field
*/
thd->change_item_tree(it.ref(), new Item_field(thd, field));
thd->change_item_tree(it.ref(), new (thd->mem_root) Item_field(thd, field));
}
return FALSE;
}
@ -1978,7 +1978,7 @@ loop_end:
table to be updated was created by mysql 4.1. Deny this.
*/
field->can_alter_field_type= 0;
Item_field *ifield= new Item_field(join->thd, (Field *) field);
Item_field *ifield= new (thd->mem_root) Item_field(join->thd, (Field *) field);
if (!ifield)
DBUG_RETURN(1);
ifield->maybe_null= 0;

View File

@ -284,8 +284,9 @@ int case_stmt_action_expr(LEX *lex, Item* expr)
if (parsing_ctx->push_case_expr_id(case_expr_id))
return 1;
i= new sp_instr_set_case_expr(sp->instructions(),
parsing_ctx, case_expr_id, expr, lex);
i= new (lex->thd->mem_root)
sp_instr_set_case_expr(sp->instructions(), parsing_ctx, case_expr_id, expr,
lex);
sp->add_cont_backpatch(i);
return sp->add_instr(i);
@ -307,10 +308,12 @@ int case_stmt_action_when(LEX *lex, Item *when, bool simple)
sp_instr_jump_if_not *i;
Item_case_expr *var;
Item *expr;
THD *thd= lex->thd;
if (simple)
{
var= new Item_case_expr(lex->thd, ctx->get_current_case_expr_id());
var= new (thd->mem_root)
Item_case_expr(thd, ctx->get_current_case_expr_id());
#ifndef DBUG_OFF
if (var)
@ -319,11 +322,11 @@ int case_stmt_action_when(LEX *lex, Item *when, bool simple)
}
#endif
expr= new Item_func_eq(lex->thd, var, when);
i= new sp_instr_jump_if_not(ip, ctx, expr, lex);
expr= new (thd->mem_root) Item_func_eq(thd, var, when);
i= new (thd->mem_root) sp_instr_jump_if_not(ip, ctx, expr, lex);
}
else
i= new sp_instr_jump_if_not(ip, ctx, when, lex);
i= new (thd->mem_root) sp_instr_jump_if_not(ip, ctx, when, lex);
/*
BACKPATCH: Registering forward jump from
@ -332,7 +335,7 @@ int case_stmt_action_when(LEX *lex, Item *when, bool simple)
*/
return !MY_TEST(i) ||
sp->push_backpatch(i, ctx->push_label(lex->thd, empty_lex_str, 0)) ||
sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)) ||
sp->add_cont_backpatch(i) ||
sp->add_instr(i);
}
@ -348,7 +351,7 @@ int case_stmt_action_then(LEX *lex)
sp_head *sp= lex->sphead;
sp_pcontext *ctx= lex->spcont;
uint ip= sp->instructions();
sp_instr_jump *i = new sp_instr_jump(ip, ctx);
sp_instr_jump *i= new (lex->thd->mem_root) sp_instr_jump(ip, ctx);
if (!MY_TEST(i) || sp->add_instr(i))
return 1;
@ -411,7 +414,8 @@ set_system_variable(THD *thd, struct sys_var_with_base *tmp,
return TRUE;
}
if (! (var= new set_var(thd, var_type, tmp->var, &tmp->base_name, val)))
if (! (var= new (thd->mem_root)
set_var(thd, var_type, tmp->var, &tmp->base_name, val)))
return TRUE;
return lex->var_list.push_back(var);
@ -447,8 +451,9 @@ set_local_variable(THD *thd, sp_variable *spv, Item *val)
return TRUE;
}
sp_set= new sp_instr_set(lex->sphead->instructions(), lex->spcont,
spv->offset, it, spv->type, lex, TRUE);
sp_set= new (thd->mem_root)
sp_instr_set(lex->sphead->instructions(), lex->spcont,
spv->offset, it, spv->type, lex, TRUE);
return (sp_set == NULL || lex->sphead->add_instr(sp_set));
}
@ -474,7 +479,7 @@ set_trigger_new_row(THD *thd, LEX_STRING *name, Item *val)
/* QQ: Shouldn't this be field's default value ? */
if (! val)
val= new Item_null(thd);
val= new (thd->mem_root) Item_null(thd);
DBUG_ASSERT(lex->trg_chistics.action_time == TRG_ACTION_BEFORE &&
(lex->trg_chistics.event == TRG_EVENT_INSERT ||
@ -488,8 +493,10 @@ set_trigger_new_row(THD *thd, LEX_STRING *name, Item *val)
if (trg_fld == NULL)
return TRUE;
sp_fld= new sp_instr_set_trigger_field(lex->sphead->instructions(),
lex->spcont, trg_fld, val, lex);
sp_fld= new (thd->mem_root)
sp_instr_set_trigger_field(lex->sphead->instructions(),
lex->spcont, trg_fld, val,
lex);
if (sp_fld == NULL)
return TRUE;
@ -814,8 +821,8 @@ static bool sp_create_assignment_instr(THD *thd, bool no_lookahead)
sp_instr_stmt *i;
Lex_input_stream *lip= &thd->m_parser_state->m_lip;
if (!(i= new sp_instr_stmt(sp->instructions(), lex->spcont,
lex)))
if (!(i= new (thd->mem_root)
sp_instr_stmt(sp->instructions(), lex->spcont, lex)))
return true;
/*
@ -2796,7 +2803,7 @@ sp_name:
{
MYSQL_YYABORT;
}
$$= new sp_name($1, $3, true);
$$= new (thd->mem_root) sp_name($1, $3, true);
if ($$ == NULL)
MYSQL_YYABORT;
$$->init_qname(thd);
@ -2811,7 +2818,7 @@ sp_name:
}
if (lex->copy_db_to(&db.str, &db.length))
MYSQL_YYABORT;
$$= new sp_name(db, $1, false);
$$= new (lex->thd->mem_root) sp_name(db, $1, false);
if ($$ == NULL)
MYSQL_YYABORT;
$$->init_qname(thd);
@ -3066,13 +3073,14 @@ sp_decl:
/* The last instruction is responsible for freeing LEX. */
sp_instr_set *is= new sp_instr_set(lex->sphead->instructions(),
pctx,
var_idx,
dflt_value_item,
var_type,
lex,
last);
sp_instr_set *is= (new (lex->thd->mem_root)
sp_instr_set(lex->sphead->instructions(),
pctx,
var_idx,
dflt_value_item,
var_type,
lex,
last));
if (is == NULL ||
lex->sphead->add_instr(is))
MYSQL_YYABORT;
@ -3112,7 +3120,8 @@ sp_decl:
sp_pcontext *ctx= lex->spcont;
sp_instr_hpush_jump *i=
new sp_instr_hpush_jump(sp->instructions(), ctx, h);
new (lex->thd->mem_root) sp_instr_hpush_jump(sp->instructions(),
ctx, h);
if (i == NULL || sp->add_instr(i))
MYSQL_YYABORT;
@ -3135,14 +3144,16 @@ sp_decl:
if ($2 == sp_handler::CONTINUE)
{
i= new sp_instr_hreturn(sp->instructions(), ctx);
i= new (lex->thd->mem_root)
sp_instr_hreturn(sp->instructions(), ctx);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
}
else
{ /* EXIT or UNDO handler, just jump to the end of the block */
i= new sp_instr_hreturn(sp->instructions(), ctx);
i= new (lex->thd->mem_root)
sp_instr_hreturn(sp->instructions(), ctx);
if (i == NULL ||
sp->add_instr(i) ||
sp->push_backpatch(i, lex->spcont->last_label())) /* Block end */
@ -3169,8 +3180,9 @@ sp_decl:
delete $5;
MYSQL_YYABORT;
}
i= new sp_instr_cpush(sp->instructions(), ctx, $5,
ctx->current_cursor_count());
i= new (lex->thd->mem_root)
sp_instr_cpush(sp->instructions(), ctx, $5,
ctx->current_cursor_count());
if (i == NULL ||
sp->add_instr(i) ||
ctx->add_cursor($2))
@ -3712,8 +3724,8 @@ sp_proc_stmt_statement:
lex->var_list.is_empty());
if (lex->sql_command != SQLCOM_SET_OPTION)
{
sp_instr_stmt *i=new sp_instr_stmt(sp->instructions(),
lex->spcont, lex);
sp_instr_stmt *i=new (lex->thd->mem_root)
sp_instr_stmt(sp->instructions(), lex->spcont, lex);
if (i == NULL)
MYSQL_YYABORT;
@ -3754,8 +3766,9 @@ sp_proc_stmt_return:
{
sp_instr_freturn *i;
i= new sp_instr_freturn(sp->instructions(), lex->spcont, $3,
sp->m_return_field_def.sql_type, lex);
i= new (lex->thd->mem_root)
sp_instr_freturn(sp->instructions(), lex->spcont, $3,
sp->m_return_field_def.sql_type, lex);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -3811,7 +3824,8 @@ sp_proc_stmt_leave:
n= ctx->diff_handlers(lab->ctx, exclusive);
if (n)
{
sp_instr_hpop *hpop= new sp_instr_hpop(ip++, ctx, n);
sp_instr_hpop *hpop= new (lex->thd->mem_root)
sp_instr_hpop(ip++, ctx, n);
if (hpop == NULL)
MYSQL_YYABORT;
sp->add_instr(hpop);
@ -3819,12 +3833,13 @@ sp_proc_stmt_leave:
n= ctx->diff_cursors(lab->ctx, exclusive);
if (n)
{
sp_instr_cpop *cpop= new sp_instr_cpop(ip++, ctx, n);
sp_instr_cpop *cpop= new (lex->thd->mem_root)
sp_instr_cpop(ip++, ctx, n);
if (cpop == NULL)
MYSQL_YYABORT;
sp->add_instr(cpop);
}
i= new sp_instr_jump(ip, ctx);
i= new (lex->thd->mem_root) sp_instr_jump(ip, ctx);
if (i == NULL)
MYSQL_YYABORT;
sp->push_backpatch(i, lab); /* Jumping forward */
@ -3855,7 +3870,8 @@ sp_proc_stmt_iterate:
n= ctx->diff_handlers(lab->ctx, FALSE); /* Inclusive the dest. */
if (n)
{
sp_instr_hpop *hpop= new sp_instr_hpop(ip++, ctx, n);
sp_instr_hpop *hpop= new (lex->thd->mem_root)
sp_instr_hpop(ip++, ctx, n);
if (hpop == NULL ||
sp->add_instr(hpop))
MYSQL_YYABORT;
@ -3863,12 +3879,14 @@ sp_proc_stmt_iterate:
n= ctx->diff_cursors(lab->ctx, FALSE); /* Inclusive the dest. */
if (n)
{
sp_instr_cpop *cpop= new sp_instr_cpop(ip++, ctx, n);
sp_instr_cpop *cpop= new (lex->thd->mem_root)
sp_instr_cpop(ip++, ctx, n);
if (cpop == NULL ||
sp->add_instr(cpop))
MYSQL_YYABORT;
}
i= new sp_instr_jump(ip, ctx, lab->ip); /* Jump back */
i= new (lex->thd->mem_root)
sp_instr_jump(ip, ctx, lab->ip); /* Jump back */
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -3889,7 +3907,8 @@ sp_proc_stmt_open:
my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $2.str);
MYSQL_YYABORT;
}
i= new sp_instr_copen(sp->instructions(), lex->spcont, offset);
i= new (lex->thd->mem_root)
sp_instr_copen(sp->instructions(), lex->spcont, offset);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -3909,7 +3928,8 @@ sp_proc_stmt_fetch:
my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $3.str);
MYSQL_YYABORT;
}
i= new sp_instr_cfetch(sp->instructions(), lex->spcont, offset);
i= new (lex->thd->mem_root)
sp_instr_cfetch(sp->instructions(), lex->spcont, offset);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -3931,7 +3951,8 @@ sp_proc_stmt_close:
my_error(ER_SP_CURSOR_MISMATCH, MYF(0), $2.str);
MYSQL_YYABORT;
}
i= new sp_instr_cclose(sp->instructions(), lex->spcont, offset);
i= new (lex->thd->mem_root)
sp_instr_cclose(sp->instructions(), lex->spcont, offset);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -3995,8 +4016,8 @@ sp_if:
sp_head *sp= lex->sphead;
sp_pcontext *ctx= lex->spcont;
uint ip= sp->instructions();
sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, ctx,
$2, lex);
sp_instr_jump_if_not *i= new (lex->thd->mem_root)
sp_instr_jump_if_not(ip, ctx, $2, lex);
if (i == NULL ||
sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)) ||
sp->add_cont_backpatch(i) ||
@ -4010,7 +4031,7 @@ sp_if:
sp_head *sp= Lex->sphead;
sp_pcontext *ctx= Lex->spcont;
uint ip= sp->instructions();
sp_instr_jump *i = new sp_instr_jump(ip, ctx);
sp_instr_jump *i= new (thd->mem_root) sp_instr_jump(ip, ctx);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -4181,8 +4202,8 @@ else_clause_opt:
LEX *lex= Lex;
sp_head *sp= lex->sphead;
uint ip= sp->instructions();
sp_instr_error *i= new sp_instr_error(ip, lex->spcont,
ER_SP_CASE_NOT_FOUND);
sp_instr_error *i= new (thd->mem_root)
sp_instr_error(ip, lex->spcont, ER_SP_CASE_NOT_FOUND);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -4298,14 +4319,16 @@ sp_block_content:
sp->backpatch(ctx->last_label()); /* We always have a label */
if ($2.hndlrs)
{
i= new sp_instr_hpop(sp->instructions(), ctx, $2.hndlrs);
i= new (thd->mem_root)
sp_instr_hpop(sp->instructions(), ctx, $2.hndlrs);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
}
if ($2.curs)
{
i= new sp_instr_cpop(sp->instructions(), ctx, $2.curs);
i= new (lex->thd->mem_root)
sp_instr_cpop(sp->instructions(), ctx, $2.curs);
if (i == NULL ||
sp->add_instr(i))
MYSQL_YYABORT;
@ -4322,7 +4345,8 @@ sp_control_content:
LEX *lex= Lex;
uint ip= lex->sphead->instructions();
sp_label *lab= lex->spcont->last_label(); /* Jumping back */
sp_instr_jump *i = new sp_instr_jump(ip, lex->spcont, lab->ip);
sp_instr_jump *i= new (lex->thd->mem_root)
sp_instr_jump(ip, lex->spcont, lab->ip);
if (i == NULL ||
lex->sphead->add_instr(i))
MYSQL_YYABORT;
@ -4334,8 +4358,8 @@ sp_control_content:
LEX *lex= Lex;
sp_head *sp= lex->sphead;
uint ip= sp->instructions();
sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, lex->spcont,
$3, lex);
sp_instr_jump_if_not *i= new (lex->thd->mem_root)
sp_instr_jump_if_not(ip, lex->spcont, $3, lex);
if (i == NULL ||
/* Jumping forward */
sp->push_backpatch(i, lex->spcont->last_label()) ||
@ -4350,7 +4374,8 @@ sp_control_content:
LEX *lex= Lex;
uint ip= lex->sphead->instructions();
sp_label *lab= lex->spcont->last_label(); /* Jumping back */
sp_instr_jump *i = new sp_instr_jump(ip, lex->spcont, lab->ip);
sp_instr_jump *i= new (lex->thd->mem_root)
sp_instr_jump(ip, lex->spcont, lab->ip);
if (i == NULL ||
lex->sphead->add_instr(i))
MYSQL_YYABORT;
@ -4363,9 +4388,8 @@ sp_control_content:
LEX *lex= Lex;
uint ip= lex->sphead->instructions();
sp_label *lab= lex->spcont->last_label(); /* Jumping back */
sp_instr_jump_if_not *i = new sp_instr_jump_if_not(ip, lex->spcont,
$5, lab->ip,
lex);
sp_instr_jump_if_not *i= new (lex->thd->mem_root)
sp_instr_jump_if_not(ip, lex->spcont, $5, lab->ip, lex);
if (i == NULL ||
lex->sphead->add_instr(i))
MYSQL_YYABORT;
@ -8684,7 +8708,7 @@ expr:
else
{
/* X OR Y */
$$ = new (thd->mem_root) Item_cond_or(thd, $1, $3);
$$= new (thd->mem_root) Item_cond_or(thd, $1, $3);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -8692,7 +8716,7 @@ expr:
| expr XOR expr %prec XOR
{
/* XOR is a proprietary extension */
$$ = new (thd->mem_root) Item_func_xor(thd, $1, $3);
$$= new (thd->mem_root) Item_func_xor(thd, $1, $3);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -8734,7 +8758,7 @@ expr:
else
{
/* X AND Y */
$$ = new (thd->mem_root) Item_cond_and(thd, $1, $3);
$$= new (thd->mem_root) Item_cond_and(thd, $1, $3);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -8858,7 +8882,7 @@ predicate:
{
$7->push_front($5);
$7->push_front($1);
Item_func_in *item = new (thd->mem_root) Item_func_in(thd, *$7);
Item_func_in *item= new (thd->mem_root) Item_func_in(thd, *$7);
if (item == NULL)
MYSQL_YYABORT;
item->negate();
@ -9625,7 +9649,7 @@ function_call_nonkeyword:
}
| POSITION_SYM '(' bit_expr IN_SYM expr ')'
{
$$ = new (thd->mem_root) Item_func_locate(thd, $5, $3);
$$= new (thd->mem_root) Item_func_locate(thd, $5, $3);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -9826,7 +9850,7 @@ function_call_conflict:
}
| MOD_SYM '(' expr ',' expr ')'
{
$$ = new (thd->mem_root) Item_func_mod(thd, $3, $5);
$$= new (thd->mem_root) Item_func_mod(thd, $3, $5);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -9847,7 +9871,7 @@ function_call_conflict:
}
| QUARTER_SYM '(' expr ')'
{
$$ = new (thd->mem_root) Item_func_quarter(thd, $3);
$$= new (thd->mem_root) Item_func_quarter(thd, $3);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -11802,7 +11826,7 @@ drop:
MYSQL_YYABORT;
}
lex->set_command(SQLCOM_DROP_FUNCTION, $3);
spname= new sp_name($4, $6, true);
spname= new (lex->thd->mem_root) sp_name($4, $6, true);
if (spname == NULL)
MYSQL_YYABORT;
spname->init_qname(thd);
@ -11821,7 +11845,7 @@ drop:
if (thd->db && lex->copy_db_to(&db.str, &db.length))
MYSQL_YYABORT;
lex->set_command(SQLCOM_DROP_FUNCTION, $3);
spname= new sp_name(db, $4, false);
spname= new (lex->thd->mem_root) sp_name(db, $4, false);
if (spname == NULL)
MYSQL_YYABORT;
spname->init_qname(thd);
@ -12050,7 +12074,7 @@ insert_field_spec:
| SET
{
LEX *lex=Lex;
if (!(lex->insert_list = new List_item) ||
if (!(lex->insert_list= new List_item) ||
lex->many_values.push_back(lex->insert_list))
MYSQL_YYABORT;
}
@ -12106,7 +12130,7 @@ opt_equal:
no_braces:
'('
{
if (!(Lex->insert_list = new List_item))
if (!(Lex->insert_list= new List_item))
MYSQL_YYABORT;
}
opt_values ')'
@ -13511,7 +13535,7 @@ literal:
TOK_GENERIC_VALUE := NULL_SYM
*/
YYLIP->reduce_digest_token(TOK_GENERIC_VALUE, NULL_SYM);
$$ = new (thd->mem_root) Item_null(thd);
$$= new (thd->mem_root) Item_null(thd);
if ($$ == NULL)
MYSQL_YYABORT;
YYLIP->next_state= MY_LEX_OPERATOR_OR_IDENT;
@ -13530,13 +13554,13 @@ literal:
}
| HEX_NUM
{
$$ = new (thd->mem_root) Item_hex_hybrid(thd, $1.str, $1.length);
$$= new (thd->mem_root) Item_hex_hybrid(thd, $1.str, $1.length);
if ($$ == NULL)
MYSQL_YYABORT;
}
| HEX_STRING
{
$$ = new (thd->mem_root) Item_hex_string(thd, $1.str, $1.length);
$$= new (thd->mem_root) Item_hex_string(thd, $1.str, $1.length);
if ($$ == NULL)
MYSQL_YYABORT;
}
@ -15172,7 +15196,7 @@ handler_rkey_function:
LEX *lex=Lex;
lex->ha_read_mode = RKEY;
lex->ha_rkey_mode=$1;
if (!(lex->insert_list = new List_item))
if (!(lex->insert_list= new List_item))
MYSQL_YYABORT;
}
'(' values ')'
@ -15609,7 +15633,7 @@ column_list:
column_list_id:
ident
{
String *new_str = new (thd->mem_root) String((const char*) $1.str,$1.length,system_charset_info);
String *new_str= new (thd->mem_root) String((const char*) $1.str,$1.length,system_charset_info);
if (new_str == NULL)
MYSQL_YYABORT;
List_iterator <LEX_COLUMN> iter(Lex->columns);

View File

@ -4142,7 +4142,7 @@ bool TABLE::fill_item_list(List<Item> *item_list) const
*/
for (Field **ptr= field; *ptr; ptr++)
{
Item_field *item= new Item_field(in_use, *ptr);
Item_field *item= new (in_use->mem_root) Item_field(in_use, *ptr);
if (!item || item_list->push_back(item))
return TRUE;
}
@ -5297,7 +5297,7 @@ Item *Field_iterator_table::create_item(THD *thd)
{
SELECT_LEX *select= thd->lex->current_select;
Item_field *item= new Item_field(thd, &select->context, *ptr);
Item_field *item= new (thd->mem_root) Item_field(thd, &select->context, *ptr);
if (item && thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY &&
!thd->lex->in_sum_func && select->cur_pos_in_select_list != UNDEF_POS)
{
@ -5354,7 +5354,7 @@ Item *create_view_field(THD *thd, TABLE_LIST *view, Item **field_ref,
{
DBUG_RETURN(field);
}
Item *item= new Item_direct_view_ref(thd, &view->view->select_lex.context,
Item *item= new (thd->mem_root) Item_direct_view_ref(thd, &view->view->select_lex.context,
field_ref, view->alias,
name, view);
/*
@ -5559,7 +5559,7 @@ Field_iterator_table_ref::get_or_create_column_ref(THD *thd, TABLE_LIST *parent_
/* The field belongs to a stored table. */
Field *tmp_field= table_field_it.field();
Item_field *tmp_item=
new Item_field(thd, &thd->lex->current_select->context, tmp_field);
new (thd->mem_root) Item_field(thd, &thd->lex->current_select->context, tmp_field);
if (!tmp_item)
return NULL;
nj_col= new Natural_join_column(tmp_item, table_ref);
@ -7328,7 +7328,7 @@ bool TABLE_LIST::change_refs_to_fields()
DBUG_ASSERT(!field_it.end_of_fields());
if (!materialized_items[idx])
{
materialized_items[idx]= new Item_field(thd, table->field[idx]);
materialized_items[idx]= new (thd->mem_root) Item_field(thd, table->field[idx]);
if (!materialized_items[idx])
return TRUE;
}

View File

@ -2335,10 +2335,11 @@ int ha_sphinx::write_row ( byte * )
} else
{
THD *thd= ha_thd();
if ( (*ppField)->type()==MYSQL_TYPE_TIMESTAMP )
{
Item_field * pWrap = new Item_field ( ha_thd(), *ppField ); // autofreed by query arena, I assume
Item_func_unix_timestamp * pConv = new Item_func_unix_timestamp ( ha_thd(), pWrap );
Item_field * pWrap = new (thd->mem_root) Item_field(thd, *ppField); // autofreed by query arena, I assume
Item_func_unix_timestamp * pConv = new (thd->mem_root) Item_func_unix_timestamp(thd, pWrap);
pConv->quick_fix_field();
unsigned int uTs = (unsigned int) pConv->val_int();

View File

@ -2390,7 +2390,7 @@ TABLE *spider_mk_sys_tmp_table(
goto error_alloc_field;
field->init(table);
if (!(i_field = new Item_field(thd, (Field *) field)))
if (!(i_field = new (thd->mem_root) Item_field(thd, (Field *) field)))
goto error_alloc_item_field;
if (i_list.push_back(i_field))
@ -2443,29 +2443,29 @@ TABLE *spider_mk_sys_tmp_table_for_result(
goto error_alloc_field1;
field1->init(table);
if (!(i_field1 = new Item_field(thd, (Field *) field1)))
if (!(i_field1 = new (thd->mem_root) Item_field(thd, (Field *) field1)))
goto error_alloc_item_field1;
if (i_list.push_back(i_field1))
goto error_push_item1;
if (!(field2 = new Field_blob(
if (!(field2 = new (thd->mem_root) Field_blob(
4294967295U, FALSE, field_name2, cs, TRUE)))
goto error_alloc_field2;
field2->init(table);
if (!(i_field2 = new Item_field(thd, (Field *) field2)))
if (!(i_field2 = new (thd->mem_root) Item_field(thd, (Field *) field2)))
goto error_alloc_item_field2;
if (i_list.push_back(i_field2))
goto error_push_item2;
if (!(field3 = new Field_blob(
if (!(field3 = new (thd->mem_root) Field_blob(
4294967295U, FALSE, field_name3, cs, TRUE)))
goto error_alloc_field3;
field3->init(table);
if (!(i_field3 = new Item_field(thd, (Field *) field3)))
if (!(i_field3 = new (thd->mem_root) Item_field(thd, (Field *) field3)))
goto error_alloc_item_field3;
if (i_list.push_back(i_field3))