mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Fixed the bug mdev-12788.
In some rare cases queries with UNION ALL using a derived table specified by a grouping select with a subquery in WHERE and impossible HAVING detected after constant row substitution could hang. The cause was not a proper return from the function subselect_single_select_engine::exec() in the case when the subquery was not optimized beforehand and the optimization performed in this function requested for a change of the subquery engine. This was fixed. Also a change was applied that avoided execution of a subquery if impossible having was detected for the main query at the optimization stage.
This commit is contained in:
@@ -1984,7 +1984,8 @@ JOIN::optimize_inner()
|
||||
having= new (thd->mem_root) Item_int(thd, (longlong) 0,1);
|
||||
zero_result_cause= "Impossible HAVING noticed after reading const tables";
|
||||
error= 0;
|
||||
DBUG_RETURN(0);
|
||||
select_lex->mark_const_derived(zero_result_cause);
|
||||
goto setup_subq_exit;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3377,7 +3378,8 @@ void JOIN::exec_inner()
|
||||
condtions may be arbitrarily costly, and because the optimize phase
|
||||
might not have produced a complete executable plan for EXPLAINs.
|
||||
*/
|
||||
if (exec_const_cond && !(select_options & SELECT_DESCRIBE) &&
|
||||
if (!zero_result_cause &&
|
||||
exec_const_cond && !(select_options & SELECT_DESCRIBE) &&
|
||||
!exec_const_cond->val_int())
|
||||
zero_result_cause= "Impossible WHERE noticed after reading const tables";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user