Bug#16347426:ASSERTION FAILED: (SELECT_INSERT &&
!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.
Showing
Please register or sign in to comment