• Chaithra Gopalareddy's avatar
    Bug#16347426:ASSERTION FAILED: (SELECT_INSERT && · 2d836633
    Chaithra Gopalareddy authored
                 !TABLES->NEXT_NAME_RESOLUTION_TABLE) || !TAB
          
    Problem:
    The context info of select query gets corrupted when a query
    with group_concat having order by is present in an order by
    clause of the select query. As a result, server crashes with
    an assert.
          
    Analysis:
    While parsing order by for group_concat, it is presumed that
    it is always present before the actual order by for the
    select query.
    As a result, parser uses select->order_list to populate the
    order by items of group_concat and creates a select->gorder_list
    to which select->order_list is copied onto. Once this is done,
    it empties the select->order_list.
    In the case presented in the bugpage, as order by is already
    parsed when group_concat's order by is encountered, parser
    presumes that it is the second order by in the select query
    and creates fake_lex_unit which results in the change of
    context info.
          
    Solution:
    Make group_concat's order by parsing independent of the select
    
    
    sql/item_sum.cc:
      Change the argument as, select->gorder_list is not pointer anymore
    sql/item_sum.h:
      Change the argument as, select->gorder_list is not pointer anymore
    sql/mysql_priv.h:
      Parsing for group_concat's order by is made independent.
      As a result, add_order_to_list cannot be used anymore.
    sql/sql_lex.cc:
      Parsing for group_concat's order by is made independent.
      As a result, add_order_to_list cannot be used anymore.
    sql/sql_lex.h:
      Parsing for group_concat's order by is made independent.
      As a result, add_order_to_list cannot be used anymore.
    sql/sql_yacc.yy:
       Make group_concat's order by parsing independent of the select
      queries order by.
    2d836633
sql_lex.h 61.1 KB