mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
5.5 merge
This commit is contained in:
@@ -549,6 +549,7 @@ fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select,
|
||||
static
|
||||
void remove_redundant_subquery_clauses(st_select_lex *subq_select_lex)
|
||||
{
|
||||
DBUG_ENTER("remove_redundant_subquery_clauses");
|
||||
Item_subselect *subq_predicate= subq_select_lex->master_unit()->item;
|
||||
/*
|
||||
The removal should happen for IN, ALL, ANY and EXISTS subqueries,
|
||||
@@ -558,7 +559,7 @@ void remove_redundant_subquery_clauses(st_select_lex *subq_select_lex)
|
||||
b) SELECT a, (<single row subquery) FROM t1
|
||||
*/
|
||||
if (subq_predicate->substype() == Item_subselect::SINGLEROW_SUBS)
|
||||
return;
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
/* A subquery that is not single row should be one of IN/ALL/ANY/EXISTS. */
|
||||
DBUG_ASSERT (subq_predicate->substype() == Item_subselect::EXISTS_SUBS ||
|
||||
@@ -568,6 +569,7 @@ void remove_redundant_subquery_clauses(st_select_lex *subq_select_lex)
|
||||
{
|
||||
subq_select_lex->join->select_distinct= false;
|
||||
subq_select_lex->options&= ~SELECT_DISTINCT;
|
||||
DBUG_PRINT("info", ("DISTINCT removed"));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -577,8 +579,13 @@ void remove_redundant_subquery_clauses(st_select_lex *subq_select_lex)
|
||||
if (subq_select_lex->group_list.elements &&
|
||||
!subq_select_lex->with_sum_func && !subq_select_lex->join->having)
|
||||
{
|
||||
for (ORDER *ord= subq_select_lex->group_list.first; ord; ord= ord->next)
|
||||
{
|
||||
(*ord->item)->walk(&Item::eliminate_subselect_processor, FALSE, NULL);
|
||||
}
|
||||
subq_select_lex->join->group_list= NULL;
|
||||
subq_select_lex->group_list.empty();
|
||||
DBUG_PRINT("info", ("GROUP BY removed"));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -593,6 +600,7 @@ void remove_redundant_subquery_clauses(st_select_lex *subq_select_lex)
|
||||
subq_select_lex->group_list.empty();
|
||||
}
|
||||
*/
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
@@ -700,7 +708,9 @@ JOIN::prepare(Item ***rref_pointer_array,
|
||||
if (!(select_options & OPTION_SETUP_TABLES_DONE) &&
|
||||
setup_tables_and_check_access(thd, &select_lex->context, join_list,
|
||||
tables_list, select_lex->leaf_tables,
|
||||
FALSE, SELECT_ACL, SELECT_ACL, FALSE))
|
||||
FALSE, SELECT_ACL, SELECT_ACL,
|
||||
(thd->lex->sql_command ==
|
||||
SQLCOM_UPDATE_MULTI)))
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
/*
|
||||
@@ -14368,7 +14378,7 @@ optimize_cond(JOIN *join, COND *conds,
|
||||
conds= remove_eq_conds(thd, conds, cond_value);
|
||||
if (conds && conds->type() == Item::COND_ITEM &&
|
||||
((Item_cond*) conds)->functype() == Item_func::COND_AND_FUNC)
|
||||
join->cond_equal= &((Item_cond_and*) conds)->cond_equal;
|
||||
*cond_equal= &((Item_cond_and*) conds)->cond_equal;
|
||||
DBUG_EXECUTE("info",print_where(conds,"after remove", QT_ORDINARY););
|
||||
}
|
||||
DBUG_RETURN(conds);
|
||||
|
||||
Reference in New Issue
Block a user