summaryrefslogtreecommitdiff
path: root/sql/item_sum.h
diff options
context:
space:
mode:
authorChaithra Gopalareddy <chaithra.gopalareddy@oracle.com>2013-04-14 07:30:49 +0530
committerChaithra Gopalareddy <chaithra.gopalareddy@oracle.com>2013-04-14 07:30:49 +0530
commit2d83663380f5c0ea720e31f51898912b0006cd9f (patch)
tree9e76d4b51af2d6243ea3f195e0068ab5dfa61b17 /sql/item_sum.h
parent4ad004c2b4d9d5abf1c135678eba1b1af39b9b97 (diff)
downloadmariadb-git-2d83663380f5c0ea720e31f51898912b0006cd9f.tar.gz
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.
Diffstat (limited to 'sql/item_sum.h')
-rw-r--r--sql/item_sum.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/sql/item_sum.h b/sql/item_sum.h
index 418899e61aa..6f8660e5491 100644
--- a/sql/item_sum.h
+++ b/sql/item_sum.h
@@ -1,4 +1,5 @@
-/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights
+ * reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1222,7 +1223,7 @@ class Item_func_group_concat : public Item_sum
public:
Item_func_group_concat(Name_resolution_context *context_arg,
bool is_distinct, List<Item> *is_select,
- SQL_I_List<ORDER> *is_order, String *is_separator);
+ const SQL_I_List<ORDER> &is_order, String *is_separator);
Item_func_group_concat(THD *thd, Item_func_group_concat *item);
~Item_func_group_concat();