• Igor Babaev's avatar
    Fixed the bug mdev-13709. · 5e4aa1a2
    Igor Babaev authored
    Currently condition pushdown into materialized views / derived tables
    is not implemented yet (see mdev-12387) and grouping views are
    optimized early when subqueries are converted to semi-joins in
    convert_join_subqueries_to_semijoins(). If a subquery that is converted
    to a semi-join uses a grouping view this view is optimized in two phases.
    For such a view V only the first phase of optimization is done after
    the conversion of subqueries of the outer join into semi-joins.
    At the same time the reference of the view V appears in the join
    expression of the outer join. In fixed code there was an attempt to push
    conditions into this view and to optimize it after this. This triggered
    the second phase of the optimization of the view and it was done
    prematurely. The second phase of the optimization for the materialized
    view is supposed to be called after the splitting condition is pushed
    into the view in the call of JOIN::improve_chosen_plan for the outer
    join.
    
    The fix blocks the attempt to push conditions into splittable views
    if they have been already partly optimized and the following
    optimization for them.
    
    The test case of the patch shows that the code for mdev-13369
    basically supported the splitting technique for materialized views /
    derived tables.
    
    The patch also replaces the name of the state JOIN::OPTIMIZATION_IN_STAGE_2
    for JOIN::OPTIMIZATION_PHASE_1_DONE and fixes a bug in
    TABLE_LIST::fetch_number_of_rows()
    5e4aa1a2
derived_cond_pushdown.test 55.4 KB