• Igor Babaev's avatar
    MDEV-27624 Wrong result for nested left join using not_exists optimization · b21832ef
    Igor Babaev authored
    This bug affected queries with nested left joins having the same last inner
    table such that not_exists optimization could be applied to the most inner
    outer join when optimizer chose to use join buffers. The bug could lead to
    producing wrong a result set.
    If the WHERE condition a query contains a conjunctive IS NULL predicate
    over a non-nullable column of an inner table of a not nested outer join
    then not_exists optimization can be applied to tho the outer join. With
    this optimization when looking for matches for a certain record from the
    outer table of the join the records of the inner table can be ignored
    right after the first match satisfying the ON condition is found.
    In the case of nested outer joins having the same last inner table this
    optimization still can be applied but only if all ON conditions of the
    embedding outer joins are satisfied. Such check was missing in the code
    that tried to apply not_exists optimization when join buffers were used
    for outer join operations.
    This problem has been already fixed in the patch for bug MDEV-7992. Yet
    there it was resolved only for the cases when join buffers were not used
    for outer joins.
    
    Approved by Oleksandr Byelkin <sanja@mariadb.com>
    b21832ef
sql_join_cache.cc 145 KB