1
0
mirror of https://github.com/MariaDB/server.git synced 2025-10-12 12:25:37 +03:00

Merge 5.3->5.5

This commit is contained in:
Igor Babaev
2013-10-14 12:08:55 -07:00
5 changed files with 92 additions and 6 deletions

View File

@@ -4780,6 +4780,33 @@ static void add_key_fields_for_nj(JOIN *join, TABLE_LIST *nested_join_table,
}
void count_cond_for_nj(SELECT_LEX *sel, TABLE_LIST *nested_join_table)
{
List_iterator<TABLE_LIST> li(nested_join_table->nested_join->join_list);
List_iterator<TABLE_LIST> li2(nested_join_table->nested_join->join_list);
bool have_another = FALSE;
TABLE_LIST *table;
while ((table= li++) || (have_another && (li=li2, have_another=FALSE,
(table= li++))))
if (table->nested_join)
{
if (!table->on_expr)
{
/* It's a semi-join nest. Walk into it as if it wasn't a nest */
have_another= TRUE;
li2= li;
li= List_iterator<TABLE_LIST>(table->nested_join->join_list);
}
else
count_cond_for_nj(sel, table);
}
if (nested_join_table->on_expr)
nested_join_table->on_expr->walk(&Item::count_sargable_conds,
0, (uchar*) sel);
}
/**
Update keyuse array with all possible keys we can use to fetch rows.
@@ -4828,12 +4855,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
while ((table= li++))
{
if (table->nested_join)
{
if (table->on_expr)
table->on_expr->walk(&Item::count_sargable_conds, 0, (uchar*) sel);
if (table->sj_on_expr)
table->sj_on_expr->walk(&Item::count_sargable_conds, 0, (uchar*) sel);
}
count_cond_for_nj(sel, table);
}
}