For an EXPLAIN statement, for every
SELECT, mysql_select will be
called with option SELECT_DESCRIBE.
For main UNION,
mysql_explain_union will be called.
For every SELECT in a given union,
mysql_explain_union will call
mysql_explain_select.
mysql_explain_select will call
mysql_select with option
SELECT_DESCRIBE.
mysql_select creates a JOIN
for select if it does not already exist (it might already exist
because if it called for subquery JOIN can be
created in JOIN::optimize of outer query when
it decided to calculate the value of the subquery). Then it calls
JOIN::prepare,
JOIN::optimize, JOIN::exec
and JOIN::cleanup as usual.
JOIN::exec is called for
SELECT with SELECT_DESCRIBE
option call select_describe.
select_describe returns the user description of
SELECT and calls
mysql_explain_union for every inner
UNION.
PROBLEM: how it will work with global query optimization?
