• Igor Babaev's avatar
    Fixed the bug MDEV-14755 Crash when executing prepared statement · bbb8c9d7
    Igor Babaev authored
    for a query that uses CTE
    
    The first reference to a CTE in the processed query uses the unit
    built by the parser for the CTE specification. This unit is
    considered as the specification of the derived table created for
    the first reference of the CTE. This requires some transformation of
    the original query tree: the unit of the specification must be moved
    to a new position as a slave of the select where the first reference
    to the CTE occurs. The transformation is performed by the function
    st_select_lex_node::move_as_slave(). There was an obvious bug in this
    function. As a result of this bug in many cases the moved unit turned
    out to be lost in the query tree. This could cause different problems.
    In particular the prepared statements for queries that used CTEs could
    miss cleanup for some selects that was performed at the end of the
    preparation/execution of the PSs. If such cleanup is not done for a PS
    the next execution of the PS causes an assertion abort or a crash.
    bbb8c9d7
sql_lex.cc 145 KB