diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index c61149b8313..bc9ad4f36b0 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -963,6 +963,8 @@ int yylex(void *arg, void *yythd) void st_select_lex_node::init_query() { + options= 0; + linkage= UNSPECIFIED_TYPE; no_table_names_allowed= uncacheable= dependent= 0; ref_pointer_array= 0; } @@ -981,8 +983,8 @@ void st_select_lex_node::init_select() void st_select_lex_unit::init_query() { - linkage= GLOBAL_OPTIONS_TYPE; st_select_lex_node::init_query(); + linkage= GLOBAL_OPTIONS_TYPE; global_parameters= this; select_limit_cnt= HA_POS_ERROR; offset_limit_cnt= 0; @@ -996,11 +998,10 @@ void st_select_lex_unit::init_query() void st_select_lex::init_query() { st_select_lex_node::init_query(); - table_list.elements= 0; - table_list.first= 0; - table_list.next= (byte**) &table_list.first; + table_list.empty(); item_list.empty(); join= 0; + where= 0; olap= UNSPECIFIED_OLAP_TYPE; having_fix_field= 0; with_wild= 0; @@ -1009,11 +1010,15 @@ void st_select_lex::init_query() void st_select_lex::init_select() { st_select_lex_node::init_select(); - group_list.elements= 0; - group_list.first= 0; - group_list.next= (byte**) &group_list.first; + group_list.empty(); + type= db= db1= table1= db2= table2= 0; + having= 0; + group_list.empty(); + use_index_ptr= ignore_index_ptr= 0; + table_join_options= 0; + in_sum_expr= with_wild= 0; options= 0; - where= having= 0; + braces= 0; when_list.empty(); expr_list.empty(); interval_list.empty(); diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 184618353fa..6226fbe1bb5 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -215,8 +215,7 @@ public: static void *operator new(size_t size) { - // TODO: Change to alloc() and explicitely clear elements in constructors - return (void*) sql_calloc((uint) size); + return (void*) sql_alloc((uint) size); } static void operator delete(void *ptr,size_t size) {} st_select_lex_node(): linkage(UNSPECIFIED_TYPE) {} diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 4f54b0fc3ba..5070466007e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3590,7 +3590,7 @@ void mysql_init_multi_delete(LEX *lex) lex->select_lex.select_limit= lex->unit.select_limit_cnt= HA_POS_ERROR; lex->auxilliary_table_list= lex->select_lex.table_list; - lex->select_lex.init_query(); + lex->select_lex.table_list.empty(); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 937fe94e3f2..e3fb81b39f2 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3571,7 +3571,6 @@ delete: { LEX *lex= Lex; lex->sql_command= SQLCOM_DELETE; - lex->select_lex.options= 0; lex->lock_option= lex->thd->update_lock_default; lex->select_lex.init_order(); }