MWL#17: Table elimination
- Fix the previous cset: take into account that select_lex may be printed when 1. There is no select_lex->join at all (in that case, assume that no tables were eliminated) 2. select_lex->join exists but there was no JOIN::optimize() call yet. handle this by initializing join->eliminated really early.
This commit is contained in:
parent
402e58cf78
commit
b1e25edc9b
@ -2731,7 +2731,7 @@ static void eliminate_tables(JOIN *join, uint *const_tbl_count, table_map *const
|
||||
table_map used_tables;
|
||||
DBUG_ENTER("eliminate_tables");
|
||||
|
||||
join->eliminated_tables= 0;
|
||||
DBUG_ASSERT(join->eliminated_tables == 0);
|
||||
|
||||
/* MWL#17 is only about outer join elimination, so: */
|
||||
if (!join->outer_join)
|
||||
@ -16888,7 +16888,7 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
|
||||
unit->fake_select_lex->options|= SELECT_DESCRIBE;
|
||||
if (!(res= unit->prepare(thd, result, SELECT_NO_UNLOCK | SELECT_DESCRIBE)))
|
||||
res= unit->exec();
|
||||
res|= unit->cleanup();
|
||||
//psergey-move: res|= unit->cleanup();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -17164,7 +17164,7 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN(" from "));
|
||||
/* go through join tree */
|
||||
print_join(thd, join->eliminated_tables, str, &top_join_list, query_type);
|
||||
print_join(thd, join? join->eliminated_tables: 0, str, &top_join_list, query_type);
|
||||
}
|
||||
else if (where)
|
||||
{
|
||||
|
@ -427,6 +427,7 @@ public:
|
||||
table= 0;
|
||||
tables= 0;
|
||||
const_tables= 0;
|
||||
eliminated_tables= 0;
|
||||
join_list= 0;
|
||||
sort_and_group= 0;
|
||||
first_record= 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user