mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-28871: Assert ... failed in JOIN::dbug_verify_sj_inner_tables...
optimize_semi_joins() calls update_sj_state() to update semi-join optimization state in the JOIN class. greedy_search() algorithm considers different join prefixes, and then picks one table to put into the join prefix. Most of the semi-join optimization state is in the table's entry in the join->positions[cur_prefix_size]. However, it also needs to call update_sj_state() to update the semi-join optimization state in the JOIN class. There is one exception, which is the cause of this bug: when we're inside optimize_semi_join_nests() and are optimizing a subquery, optimize_semi_joins() does nothing, it doesn't call update_sj_state(). greedy_search() must not do that either.
This commit is contained in:
@ -8210,7 +8210,8 @@ greedy_search(JOIN *join,
|
||||
picked semi-join operation is in best_pos->...picker, but we need to
|
||||
update the global state in the JOIN object, too.
|
||||
*/
|
||||
update_sj_state(join, best_table, idx, remaining_tables);
|
||||
if (!join->emb_sjm_nest)
|
||||
update_sj_state(join, best_table, idx, remaining_tables);
|
||||
|
||||
/* find the position of 'best_table' in 'join->best_ref' */
|
||||
best_idx= idx;
|
||||
|
Reference in New Issue
Block a user