Merge 5.0 -> 5.1
Fixes + Adapted to new name resolution context after WL #2486 sql/sql_base.cc: Merge error fix + bug fix sql/sql_partition.cc: Adapted to new name resolution context after WL #2486
This commit is contained in:
parent
9b352548fb
commit
c4beb17f79
@ -3609,7 +3609,7 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
|
|||||||
TABLE *table_2= nj_col_2->table_ref->table;
|
TABLE *table_2= nj_col_2->table_ref->table;
|
||||||
/* Mark field_2 used for table cache. */
|
/* Mark field_2 used for table cache. */
|
||||||
field_2->query_id= thd->query_id;
|
field_2->query_id= thd->query_id;
|
||||||
table_2->file->ha_set_bit_in_read_set(field_1->fieldnr);
|
table_2->file->ha_set_bit_in_read_set(field_2->fieldnr);
|
||||||
table_2->used_keys.intersect(field_2->part_of_key);
|
table_2->used_keys.intersect(field_2->part_of_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4472,7 +4472,7 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
|
|||||||
if (field->query_id == thd->query_id)
|
if (field->query_id == thd->query_id)
|
||||||
thd->dupp_field= field;
|
thd->dupp_field= field;
|
||||||
field->query_id= thd->query_id;
|
field->query_id= thd->query_id;
|
||||||
table->file->ha_set_bit_in_read_set(field->fieldnr);
|
field->table->file->ha_set_bit_in_read_set(field->fieldnr);
|
||||||
|
|
||||||
if (table)
|
if (table)
|
||||||
table->used_keys.intersect(field->part_of_key);
|
table->used_keys.intersect(field->part_of_key);
|
||||||
|
@ -1213,18 +1213,26 @@ static bool fix_fields_part_func(THD *thd, TABLE_LIST *tables,
|
|||||||
|
|
||||||
bool result= TRUE;
|
bool result= TRUE;
|
||||||
TABLE *table= tables->table;
|
TABLE *table= tables->table;
|
||||||
TABLE_LIST *save_list;
|
TABLE_LIST *save_table_list, *save_first_table, *save_last_table;
|
||||||
int error;
|
int error;
|
||||||
Name_resolution_context *context= &thd->lex->current_select->context;
|
Name_resolution_context *context;
|
||||||
DBUG_ENTER("fix_fields_part_func");
|
DBUG_ENTER("fix_fields_part_func");
|
||||||
|
|
||||||
|
context= thd->lex->current_context();
|
||||||
table->map= 1; //To ensure correct calculation of const item
|
table->map= 1; //To ensure correct calculation of const item
|
||||||
table->get_fields_in_item_tree= TRUE;
|
table->get_fields_in_item_tree= TRUE;
|
||||||
save_list= context->table_list;
|
save_table_list= context->table_list;
|
||||||
|
save_first_table= context->first_name_resolution_table;
|
||||||
|
save_last_table= context->last_name_resolution_table;
|
||||||
context->table_list= tables;
|
context->table_list= tables;
|
||||||
|
context->first_name_resolution_table= tables;
|
||||||
|
context->last_name_resolution_table= NULL;
|
||||||
|
func_expr->walk(&Item::change_context_processor, (byte*) context);
|
||||||
thd->where= "partition function";
|
thd->where= "partition function";
|
||||||
error= func_expr->fix_fields(thd, (Item**)0);
|
error= func_expr->fix_fields(thd, (Item**)0);
|
||||||
context->table_list= save_list;
|
context->table_list= save_table_list;
|
||||||
|
context->first_name_resolution_table= save_first_table;
|
||||||
|
context->last_name_resolution_table= save_last_table;
|
||||||
if (unlikely(error))
|
if (unlikely(error))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Field in partition function not part of table"));
|
DBUG_PRINT("info", ("Field in partition function not part of table"));
|
||||||
@ -1630,6 +1638,8 @@ bool fix_partition_func(THD *thd, const char* name, TABLE *table)
|
|||||||
bzero((void*)&tables, sizeof(TABLE_LIST));
|
bzero((void*)&tables, sizeof(TABLE_LIST));
|
||||||
tables.alias= tables.table_name= (char*)share->table_name;
|
tables.alias= tables.table_name= (char*)share->table_name;
|
||||||
tables.table= table;
|
tables.table= table;
|
||||||
|
tables.next_local= 0;
|
||||||
|
tables.next_name_resolution_table= 0;
|
||||||
strmov(db_name_string, name);
|
strmov(db_name_string, name);
|
||||||
dir_length= dirname_length(db_name_string);
|
dir_length= dirname_length(db_name_string);
|
||||||
db_name_string[dir_length - 1]= 0;
|
db_name_string[dir_length - 1]= 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user