-
Ole John Aske authored
The AQP module contain the member function ::get_join_type('predecessor') which is intended to return whether 'this' table and its 'predecessor' table is related with an inner or outer join. We had implemented this logic by using the nested 'embedding' structures in the TABLE_LIST. As MySQL 5.6 seems to have extended the usage of the 'embedding' to also be used as part of subquery optimization, this code is now broken. (And it might even have been broken prior to 5.6...) Currently this materializes as crashing RQG tests in our clone mysql-5.6-cluster which fails on 'DBUG_ASSERT(child_embedding->outer_join != 0);'. I assume this to be due to 5.6 extending the usage of 'embedding' to not only be used as part of inner/outer join nests. This fix reimplements ::get_join_type() to instead use the 'first_inner' and 'last_inner' member fields to determine the join type between two tables. This seems to also more closely resembles how the join types are determined internally in the optimizer.
Ole John Aske authoredThe AQP module contain the member function ::get_join_type('predecessor') which is intended to return whether 'this' table and its 'predecessor' table is related with an inner or outer join. We had implemented this logic by using the nested 'embedding' structures in the TABLE_LIST. As MySQL 5.6 seems to have extended the usage of the 'embedding' to also be used as part of subquery optimization, this code is now broken. (And it might even have been broken prior to 5.6...) Currently this materializes as crashing RQG tests in our clone mysql-5.6-cluster which fails on 'DBUG_ASSERT(child_embedding->outer_join != 0);'. I assume this to be due to 5.6 extending the usage of 'embedding' to not only be used as part of inner/outer join nests. This fix reimplements ::get_join_type() to instead use the 'first_inner' and 'last_inner' member fields to determine the join type between two tables. This seems to also more closely resembles how the join types are determined internally in the optimizer.
Loading