• Igor Babaev's avatar
    MDEV-27132 Wrong result from query when using split optimization · 97425f74
    Igor Babaev authored
    This bug could affect queries with a grouping derived table containing
    equalities in the where clause of its specification if the optimizer
    chose to apply split optimization to access the derived table. In such
    cases wrong results could be returned from the queries.
    When the optimizer considers a possibility of using split optimization
    to a derived table it injects equalities joining the derived table with
    other tables into the where condition of the derived table. After the join
    order for the execution using split optimization has been chosen as the
    cheapest the injected equalities that are not used to access the derived
    table are removed from the where condition of the derived table.
    For this removal the optimizer looks through the conjuncts of the where
    condition of the derived table, fetches the equalities and checks whether
    they belong to the list of injected equalities.
    As the injection of the list was performed just by the insertion of it
    into the list of top level AND condition of the where condition some extra
    conjuncts from the where condition could be automatically attached to the
    end of the list of injected equalities. If such attached conjunct happened
    to be an equality predicate it was removed from the where condition of the
    derived table and thus lost for checking at the execution phase.
    The bug has been fixed by injecting of a shallow copy of the list of the
    pushed equalities rather than the list itself leaving the latter intact.
    
    Approved by Oleksandr Byelkin <sanja@mariadb.com>
    97425f74
derived_cond_pushdown.test 103 KB