• Igor Babaev's avatar
    MDEV-24910 Crash with SELECT that uses table value constructor as a subselect · bf6484e7
    Igor Babaev authored
    This bug caused crashes of the server when processing queries with table
    value constructors (TVC) that contained subqueries and were used itself as
    subselects. For such TVCs the following transformation is applied at the
    prepare stage:
      VALUES (v1), ... (vn) => SELECT * FROM (VALUES (v1), ... (vn)) tvc_x.
    This transformation allows to reduce the problem of evaluation of TVCs used
    as subselects to the problem of evaluation of regular subselects.
    The transformation is implemented in the wrap_tvc(). The code the function
    to mimic the behaviour of the parser when processing the result of the
    transformation. However this imitation was not free of some flaws. First
    the function called the method exclude() that completely destroyed the
    select tree structures below the transformed TVC. Second the function
    used the procedure mysql_new_select to create st_select_lex nodes for
    both wrapping select of the transformation and TVC. This also led to
    constructing of invalid select tree structures.
    The patch actually re-engineers the code of wrap_tvc().
    
    Approved by Oleksandr Byelkin <sanja@mariadb.com>
    bf6484e7
table_value_constr.result 79.1 KB