• Igor Babaev's avatar
    MDEV-22042 Server crash in Item_field::print on ANALYZE FORMAT=JSON · a8c200c7
    Igor Babaev authored
    When processing a query with a recursive CTE a temporary table is used for
    each recursive reference of the CTE. As any temporary table it uses its own
    mem-root for table definition structures. Due to specifics of the current
    implementation of ANALYZE stmt command this mem-root can be freed only at
    the very of query processing. Such deallocation of mem-root memory happens
    in close_thread_tables(). The function looks through the list of the tmp
    tables rec_tables attached to the THD of the query and frees corresponding
    mem-roots. If the query uses a stored function then such list is created
    for each query of the function. When a new rec_list has to be created the
    old one has to be saved and then restored at the proper moment.
    The bug occurred because only one rec_list for the query containing CTE was
    created. As a result close_thread_tables() freed tmp mem-roots used for
    rec_tables prematurely destroying some data needed for the output produced
    by the ANALYZE command.
    a8c200c7
cte_recursive.result 105 KB