Fixed the bug mdev-13709.
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()
Showing
Please register or sign in to comment