• Igor Babaev's avatar
    MDEV-28603 Invalid view when its definition uses TVC as single-value subquery · 841e8877
    Igor Babaev authored
    Subselect_single_value_engine cannot handle table value constructor used as
    subquery. That's why any table value constructor TVC used as subquery is
    converted into a select over derived table whose specification is TVC.
    Currently the names  of the columns of the derived table DT are taken from
    the first element of TVC and if the k-th component of the element happens
    to be a subquery the text representation of this subquery serves as the
    name of the k-th column of the derived table. References of all columns of
    the derived table DT compose the select list of the result of the conversion.
    If a definition of a view contained a table value constructor used as a
    subquery and the view was registered after this conversion had been
    applied we could register an invalid view definition if the first element
    of TVC contained a subquery as its component: the name of this component
    was taken from the original subquery, while the name of the corresponding
    column of the derived table was taken from the text representation of the
    subquery produced by the function SELECT_LEX::print() and these names were
    usually differ from each other.
    To avoid registration of such invalid views the function SELECT_LEX::print()
    now prints the original TVC instead of the select in which this TVC has
    been wrapped. Now the specification of registered view looks like as if no
    conversions from TVC to selects were done.
    
    Approved by Oleksandr Byelkin <sanja@mariadb.com>
    841e8877
sql_view.cc 71 KB