Commit fe7121d1 authored by Sergey Petrunya's avatar Sergey Petrunya

MWL#90: Address review feedback in get_best_combination().

parent d44f68ae
...@@ -6631,8 +6631,7 @@ get_best_combination(JOIN *join) ...@@ -6631,8 +6631,7 @@ get_best_combination(JOIN *join)
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
JOIN_TAB *sjm_nest_end= NULL; JOIN_TAB *sjm_nest_end= NULL;
JOIN_TAB *sjm_saved_tab; /* protected by sjm_nest_end */ JOIN_TAB *sjm_nest_root= NULL;
LINT_INIT(sjm_saved_tab);
for (j=join_tab, tablenr=0 ; tablenr < table_count ; tablenr++,j++) for (j=join_tab, tablenr=0 ; tablenr < table_count ; tablenr++,j++)
{ {
...@@ -6644,12 +6643,8 @@ get_best_combination(JOIN *join) ...@@ -6644,12 +6643,8 @@ get_best_combination(JOIN *join)
/* /*
Ok, we've entered an SJ-Materialization semi-join (note that this can't Ok, we've entered an SJ-Materialization semi-join (note that this can't
be done recursively, semi-joins are not allowed to be nested). be done recursively, semi-joins are not allowed to be nested).
*/
/*
1. Put into main join order a JOIN_TAB that represents a lookup or scan 1. Put into main join order a JOIN_TAB that represents a lookup or scan
in the temptable. in the temptable.
// TODO: record this join_tab to be processed by
// setup_semijoin_elimination?
*/ */
bzero(j, sizeof(JOIN_TAB)); bzero(j, sizeof(JOIN_TAB));
j->join= join; j->join= join;
...@@ -6674,18 +6669,15 @@ get_best_combination(JOIN *join) ...@@ -6674,18 +6669,15 @@ get_best_combination(JOIN *join)
join->join_tab_ranges.push_back(jt_range); join->join_tab_ranges.push_back(jt_range);
j->bush_children= jt_range; j->bush_children= jt_range;
sjm_nest_end= jt + sjm->tables; sjm_nest_end= jt + sjm->tables;
sjm_saved_tab= j; sjm_nest_root= j;
root_range->end= j+1;
j= jt; j= jt;
} }
*j= *join->best_positions[tablenr].table; *j= *join->best_positions[tablenr].table;
if (sjm_nest_end) j->bush_root_tab= sjm_nest_root;
j->bush_root_tab= sjm_saved_tab;
else
root_range->end= j+1;
form=join->table[tablenr]=j->table; form=join->table[tablenr]=j->table;
used_tables|= form->map; used_tables|= form->map;
form->reginfo.join_tab=j; form->reginfo.join_tab=j;
...@@ -6715,20 +6707,19 @@ get_best_combination(JOIN *join) ...@@ -6715,20 +6707,19 @@ get_best_combination(JOIN *join)
j->records_read= (ha_rows)join->best_positions[tablenr].records_read; j->records_read= (ha_rows)join->best_positions[tablenr].records_read;
join->map2table[j->table->tablenr]= j; join->map2table[j->table->tablenr]= j;
// If we've reached the end of sjm nest, switch back to main sequence /* If we've reached the end of sjm nest, switch back to main sequence */
if (j + 1 == sjm_nest_end) if (j + 1 == sjm_nest_end)
{ {
j->last_leaf_in_bush= TRUE; j->last_leaf_in_bush= TRUE;
j= sjm_saved_tab; j= sjm_nest_root;
sjm_nest_root= NULL;
sjm_nest_end= NULL; sjm_nest_end= NULL;
} }
} }
root_range->end= j;
join->top_join_tab_count= join->join_tab_ranges.head()->end - join->top_join_tab_count= join->join_tab_ranges.head()->end -
join->join_tab_ranges.head()->start; join->join_tab_ranges.head()->start;
//for (i=0 ; i < table_count ; i++)
// join->map2table[join->join_tab[i].table->tablenr]=join->join_tab+i;
update_depend_map(join); update_depend_map(join);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
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