• Igor Babaev's avatar
    MDEV-23619 MariaDB crash on WITH RECURSIVE UNION ALL (CTE) query · 190e8a4c
    Igor Babaev authored
    Due to a premature cleanup of the unit that specified a recursive CTE
    used in the second operand of union the server fell into an infinite
    loop in the reported test case. In other cases this premature cleanup
    could cause other problems.
    The bug is the result of a not quite correct fix for MDEV-17024. The
    unit that specifies a recursive CTE has to be cleaned only after the
    cleanup of the last external reference to this CTE. It means that
    cleanups of the unit triggered not by the cleanup of a external
    reference to the CTE must be blocked.
    Usage of local table chains in selects to get external references to
    recursive CTEs was not correct either because of possible merges of
    some selects.
    
    Also fixed a minor bug in st_select_lex::set_explain_type() that caused
    typing 'RECURSIVE UNION' instead of 'UNION' in EXPLAIN output for external
    references to a recursive CTE.
    190e8a4c
sql_union.cc 48.1 KB