The same example, but without setting a debug trace causes
a crash in 5.3-mwl89 in a different (but related) place, when
update_ref_and_keys is called for the first subquery
(counted from the outside->in). The call stack in 5.3-mwl89 is:
#0 add_key_field at sql_select.cc:3677
#1 add_key_fields at sql_select.cc:3981
#2 update_ref_and_keys at sql_select.cc:4332
#3 make_join_statistics at sql_select.cc:2955
#4 JOIN::optimize at sql_select.cc:952
#5 st_select_lex::optimize_unflattened_subqueries at sql_lex.cc:3140
#6 JOIN::optimize_unflattened_subqueries at opt_subselect.cc:3617
#7 JOIN::optimize at sql_select.cc:1447
#8 mysql_select
The reason for the difference is that 5.3-mwl89 optimizes subqueries
early during JOIN::optimize of the outer query.
The same example, but without setting a debug trace causes
a crash in 5.3-mwl89 in a different (but related) place, when
update_ref_and_keys is called for the first subquery
(counted from the outside->in). The call stack in 5.3-mwl89 is:
#0 add_key_field at sql_select.cc:3677 statistics at sql_select.cc:2955 lex::optimize_ unflattened_ subqueries at sql_lex.cc:3140 unflattened_ subqueries at opt_subselect. cc:3617
#1 add_key_fields at sql_select.cc:3981
#2 update_ref_and_keys at sql_select.cc:4332
#3 make_join_
#4 JOIN::optimize at sql_select.cc:952
#5 st_select_
#6 JOIN::optimize_
#7 JOIN::optimize at sql_select.cc:1447
#8 mysql_select
The reason for the difference is that 5.3-mwl89 optimizes subqueries
early during JOIN::optimize of the outer query.