From 6ce8e1e7046df712f442ea96d568f5b21eeb5511 Mon Sep 17 00:00:00 2001 From: "bell@sanja.is.com.ua" <> Date: Sun, 16 Feb 2003 20:37:51 +0200 Subject: fixed excluding st_select_lex from global select list fixed destroing not well constructed analize object fixed wrong detection of unions in derived tables --- sql/sql_analyse.h | 11 ++++++----- sql/sql_derived.cc | 2 +- sql/sql_lex.cc | 7 ++++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index ada46374a15..5f0058c3ad9 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -306,13 +306,14 @@ protected: public: uint max_tree_elements, max_treemem; - analyse(select_result *res) :Procedure(res, PROC_NO_SORT), rows(0), - output_str_length(0) {} + analyse(select_result *res) :Procedure(res, PROC_NO_SORT), f_info(0), + rows(0), output_str_length(0) {} ~analyse() - { - for (field_info **f=f_info; f != f_end; f++) - delete (*f); + { + if (f_info) + for (field_info **f=f_info; f != f_end; f++) + delete (*f); } virtual void add() {} virtual bool change_columns(List &fields); diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 528bdb7b6f5..f1a5912cfdb 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -71,7 +71,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, select_union *derived_result; TABLE_LIST *tables= (TABLE_LIST *)sl->table_list.first; TMP_TABLE_PARAM tmp_table_param; - bool is_union= sl->next_select() && sl->next_select()->linkage == UNION_TYPE; + bool is_union= sl->next_select(); bool is_subsel= sl->first_inner_unit() ? 1: 0; SELECT_LEX_NODE *save_current_select= lex->current_select; DBUG_ENTER("mysql_derived"); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 0fe3d11e404..779a109367c 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1098,10 +1098,11 @@ void st_select_lex_node::fast_exclude() { if ((*link_prev= link_next)) link_next->link_prev= link_prev; - // Remove slave structure - for (; slave; slave= slave->next) - slave->fast_exclude(); } + // Remove slave structure + for (; slave; slave= slave->next) + slave->fast_exclude(); + } /* -- cgit v1.2.1