Commit 7a91bf8c authored by Georgi Kodinov's avatar Georgi Kodinov

Bug #46003 and bug #46034: backported the fixes from azalea.

parent c80fc350
...@@ -5095,6 +5095,12 @@ int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields, ...@@ -5095,6 +5095,12 @@ int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields,
/* make * substituting permanent */ /* make * substituting permanent */
SELECT_LEX *select_lex= thd->lex->current_select; SELECT_LEX *select_lex= thd->lex->current_select;
select_lex->with_wild= 0; select_lex->with_wild= 0;
/*
The assignment below is translated to memcpy() call (at least on some
platforms). memcpy() expects that source and destination areas do not
overlap. That problem was detected by valgrind.
*/
if (&select_lex->item_list != &fields)
select_lex->item_list= fields; select_lex->item_list= fields;
thd->restore_active_arena(arena, &backup); thd->restore_active_arena(arena, &backup);
......
...@@ -1748,6 +1748,7 @@ JOIN::exec() ...@@ -1748,6 +1748,7 @@ JOIN::exec()
curr_join->having= curr_join->tmp_having= 0; // Allready done curr_join->having= curr_join->tmp_having= 0; // Allready done
/* Change sum_fields reference to calculated fields in tmp_table */ /* Change sum_fields reference to calculated fields in tmp_table */
if (curr_join != this)
curr_join->all_fields= *curr_all_fields; curr_join->all_fields= *curr_all_fields;
if (!items1) if (!items1)
{ {
...@@ -1767,8 +1768,11 @@ JOIN::exec() ...@@ -1767,8 +1768,11 @@ JOIN::exec()
fields_list.elements, all_fields)) fields_list.elements, all_fields))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
if (curr_join != this)
{
curr_join->tmp_all_fields1= tmp_all_fields1; curr_join->tmp_all_fields1= tmp_all_fields1;
curr_join->tmp_fields_list1= tmp_fields_list1; curr_join->tmp_fields_list1= tmp_fields_list1;
}
curr_join->items1= items1; curr_join->items1= items1;
} }
curr_all_fields= &tmp_all_fields1; curr_all_fields= &tmp_all_fields1;
...@@ -1913,9 +1917,12 @@ JOIN::exec() ...@@ -1913,9 +1917,12 @@ JOIN::exec()
tmp_fields_list2, tmp_all_fields2, tmp_fields_list2, tmp_all_fields2,
fields_list.elements, tmp_all_fields1)) fields_list.elements, tmp_all_fields1))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
if (curr_join != this)
{
curr_join->tmp_fields_list2= tmp_fields_list2; curr_join->tmp_fields_list2= tmp_fields_list2;
curr_join->tmp_all_fields2= tmp_all_fields2; curr_join->tmp_all_fields2= tmp_all_fields2;
} }
}
curr_fields_list= &curr_join->tmp_fields_list2; curr_fields_list= &curr_join->tmp_fields_list2;
curr_all_fields= &curr_join->tmp_all_fields2; curr_all_fields= &curr_join->tmp_all_fields2;
curr_join->set_items_ref_array(items2); curr_join->set_items_ref_array(items2);
...@@ -1969,9 +1976,12 @@ JOIN::exec() ...@@ -1969,9 +1976,12 @@ JOIN::exec()
tmp_table_param.save_copy_field= curr_join->tmp_table_param.copy_field; tmp_table_param.save_copy_field= curr_join->tmp_table_param.copy_field;
tmp_table_param.save_copy_field_end= tmp_table_param.save_copy_field_end=
curr_join->tmp_table_param.copy_field_end; curr_join->tmp_table_param.copy_field_end;
if (curr_join != this)
{
curr_join->tmp_all_fields3= tmp_all_fields3; curr_join->tmp_all_fields3= tmp_all_fields3;
curr_join->tmp_fields_list3= tmp_fields_list3; curr_join->tmp_fields_list3= tmp_fields_list3;
} }
}
else else
{ {
curr_join->tmp_table_param.copy_funcs= tmp_table_param.save_copy_funcs; curr_join->tmp_table_param.copy_funcs= tmp_table_param.save_copy_funcs;
......
...@@ -416,6 +416,7 @@ class JOIN :public Sql_alloc ...@@ -416,6 +416,7 @@ class JOIN :public Sql_alloc
group_optimized_away= 0; group_optimized_away= 0;
all_fields= fields_arg; all_fields= fields_arg;
if (&fields_list != &fields_arg) /* Avoid valgrind-warning */
fields_list= fields_arg; fields_list= fields_arg;
bzero((char*) &keyuse,sizeof(keyuse)); bzero((char*) &keyuse,sizeof(keyuse));
tmp_table_param.init(); tmp_table_param.init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment