summaryrefslogtreecommitdiff
path: root/sql/sql_lex.h
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2012-08-22 11:40:39 +0200
committerSergei Golubchik <sergii@pisem.net>2012-08-22 11:40:39 +0200
commitcefc30b1663114930439e03dec245604bc904604 (patch)
tree83a4479fe38adb24e478dde743856f04d65fa801 /sql/sql_lex.h
parent34f2f8ea41726d98e50752ff3453ebde70912c35 (diff)
parent171355077501da7ddd32778ab3ebe77c5f7ce7da (diff)
downloadmariadb-git-cefc30b1663114930439e03dec245604bc904604.tar.gz
merge with MySQL 5.1.65
Diffstat (limited to 'sql/sql_lex.h')
-rw-r--r--sql/sql_lex.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 3706d4c30ae..819cf41ec21 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -40,6 +40,7 @@ class Event_parse_data;
*/
#include "set_var.h"
+#include "mem_root_array.h"
#ifdef MYSQL_YACC
#define LEX_YYSTYPE void *
@@ -183,6 +184,7 @@ enum enum_drop_mode
};
typedef List<Item> List_item;
+typedef Mem_root_array<ORDER*, true> Group_list_ptrs;
/* SERVERS CACHE CHANGES */
typedef struct st_lex_server_options
@@ -590,7 +592,16 @@ public:
enum olap_type olap;
/* FROM clause - points to the beginning of the TABLE_LIST::next_local list. */
SQL_I_List<TABLE_LIST> table_list;
- SQL_I_List<ORDER> group_list; /* GROUP BY clause. */
+
+ /*
+ GROUP BY clause.
+ This list may be mutated during optimization (by remove_const()),
+ so for prepared statements, we keep a copy of the ORDER.next pointers in
+ group_list_ptrs, and re-establish the original list before each execution.
+ */
+ SQL_I_List<ORDER> group_list;
+ Group_list_ptrs *group_list_ptrs;
+
List<Item> item_list; /* list of fields & expressions */
List<String> interval_list;
bool is_item_list_lookup;
@@ -778,7 +789,8 @@ public:
bool test_limit();
friend void lex_start(THD *thd);
- st_select_lex() : n_sum_items(0), n_child_sum_items(0) {}
+ st_select_lex() : group_list_ptrs(NULL), n_sum_items(0), n_child_sum_items(0)
+ {}
void make_empty_select()
{
init_query();