• unknown's avatar
    Fix for bug lp:834492 · ea8aa329
    unknown authored
    Analysis:
    In the test query semi-join merges the inner-most subquery
    into the outer subquery, and the optimization of the merged
    subquery finds some new index access methods. Later the
    IN-EXISTS transformation is applied to the unmerged subquery.
    Since the optimizer is instructed to not consider
    materialization, it reoptimizes the plan in-place to take into
    account the new IN-EXISTS conditions. Just before reoptimization
    JOIN::choose_subquery_plan resets the query plan, which also
    resets the access methods found during the semi-join merge.
    Then reoptimization discovers there are no new access methods,
    but it leaves the query plan in its reset state. Later semi-join
    crashes because it assumes these access methods are present.
    
    Solution:
    When reoptimizing in-place, reset the query plan only after new
    access methods were discovered. If no new access methods were
    discovered, leave the current plan as it was.
    ea8aa329
sql_select.h 50.6 KB