BUG#21658: Crash partition test in prepared statement protocol
Review fixes sql/sql_partition.cc: Removed unused variables Used thd->free_items() method sql/table.cc: Changed order of calls
This commit is contained in:
parent
a8b3ecfa0a
commit
abf8f4f154
@ -869,12 +869,9 @@ bool fix_fields_part_func(THD *thd, Item* func_expr, TABLE *table,
|
|||||||
bool is_sub_part, bool is_field_to_be_setup)
|
bool is_sub_part, bool is_field_to_be_setup)
|
||||||
{
|
{
|
||||||
MEM_ROOT new_mem_root;
|
MEM_ROOT new_mem_root;
|
||||||
Query_arena partition_arena(&new_mem_root, Query_arena::INITIALIZED);
|
|
||||||
Query_arena backup_arena;
|
|
||||||
partition_info *part_info= table->part_info;
|
partition_info *part_info= table->part_info;
|
||||||
uint dir_length, home_dir_length;
|
uint dir_length, home_dir_length;
|
||||||
bool result= TRUE;
|
bool result= TRUE;
|
||||||
bool is_prepare;
|
|
||||||
TABLE_LIST tables;
|
TABLE_LIST tables;
|
||||||
TABLE_LIST *save_table_list, *save_first_table, *save_last_table;
|
TABLE_LIST *save_table_list, *save_first_table, *save_last_table;
|
||||||
int error;
|
int error;
|
||||||
@ -1424,7 +1421,6 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
|||||||
bool result= TRUE;
|
bool result= TRUE;
|
||||||
partition_info *part_info= table->part_info;
|
partition_info *part_info= table->part_info;
|
||||||
enum_mark_columns save_mark_used_columns= thd->mark_used_columns;
|
enum_mark_columns save_mark_used_columns= thd->mark_used_columns;
|
||||||
Item *thd_free_list= thd->free_list;
|
|
||||||
DBUG_ENTER("fix_partition_func");
|
DBUG_ENTER("fix_partition_func");
|
||||||
|
|
||||||
if (part_info->fixed)
|
if (part_info->fixed)
|
||||||
@ -3426,8 +3422,7 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
|
|||||||
DBUG_PRINT("info", ("Parse: %s", part_buf));
|
DBUG_PRINT("info", ("Parse: %s", part_buf));
|
||||||
if (MYSQLparse((void*)thd) || thd->is_fatal_error)
|
if (MYSQLparse((void*)thd) || thd->is_fatal_error)
|
||||||
{
|
{
|
||||||
free_items(thd->free_list);
|
thd->free_items();
|
||||||
thd->free_list= NULL;
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -3485,9 +3480,8 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
|
|||||||
just to ensure we don't get into strange situations with the
|
just to ensure we don't get into strange situations with the
|
||||||
item objects.
|
item objects.
|
||||||
*/
|
*/
|
||||||
free_items(thd->free_list);
|
thd->free_items();
|
||||||
part_info= thd->work_part_info;
|
part_info= thd->work_part_info;
|
||||||
thd->free_list= NULL;
|
|
||||||
table->s->version= 0UL;
|
table->s->version= 0UL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3517,8 +3511,7 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
|
|||||||
!((subpart_func_string= thd->alloc(subpart_func_len)))))
|
!((subpart_func_string= thd->alloc(subpart_func_len)))))
|
||||||
{
|
{
|
||||||
mem_alloc_error(part_func_len);
|
mem_alloc_error(part_func_len);
|
||||||
free_items(thd->free_list);
|
thd->free_items();
|
||||||
thd->free_list= NULL;
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (part_func_len)
|
if (part_func_len)
|
||||||
|
@ -1499,10 +1499,10 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
|
|||||||
DBUG_PRINT("info", ("autopartitioned: %u", share->auto_partitioned));
|
DBUG_PRINT("info", ("autopartitioned: %u", share->auto_partitioned));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
tmp= fix_partition_func(thd, outparam, is_create_table);
|
tmp= fix_partition_func(thd, outparam, is_create_table);
|
||||||
if (!tmp)
|
|
||||||
outparam->part_info->item_free_list= part_func_arena.free_list;
|
|
||||||
thd->stmt_arena= backup_stmt_arena_ptr;
|
thd->stmt_arena= backup_stmt_arena_ptr;
|
||||||
thd->restore_active_arena(&part_func_arena, &backup_arena);
|
thd->restore_active_arena(&part_func_arena, &backup_arena);
|
||||||
|
if (!tmp)
|
||||||
|
outparam->part_info->item_free_list= part_func_arena.free_list;
|
||||||
if (tmp)
|
if (tmp)
|
||||||
{
|
{
|
||||||
if (is_create_table)
|
if (is_create_table)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user