diff options
author | Sergei Golubchik <serg@mariadb.org> | 2015-06-11 20:20:35 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2015-06-11 20:20:35 +0200 |
commit | 810cf362eae28d4a096e0acea7efa67dd32aa05b (patch) | |
tree | 4f7b2f858e8a57022e790bcac6d88b5e3451ee0f /sql/sql_lex.cc | |
parent | a99efc00a68fe2406343e63b67fc4ea58bed345a (diff) | |
parent | d199a0ffb0aac86881ea2db7dd78bc07b438dc67 (diff) | |
download | mariadb-git-810cf362eae28d4a096e0acea7efa67dd32aa05b.tar.gz |
Merge branch '5.5' into 10.0
Diffstat (limited to 'sql/sql_lex.cc')
-rw-r--r-- | sql/sql_lex.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index d8f40897a59..2026d5f5059 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -556,6 +556,7 @@ void lex_start(THD *thd) lex->is_lex_started= TRUE; lex->used_tables= 0; + lex->only_view= FALSE; lex->reset_slave_info.all= false; lex->limit_rows_examined= 0; lex->limit_rows_examined_cnt= ULONGLONG_MAX; @@ -1873,7 +1874,7 @@ void st_select_lex::init_query() exclude_from_table_unique_test= no_wrap_view_item= FALSE; nest_level= 0; link_next= 0; - is_prep_leaf_list_saved= FALSE; + prep_leaf_list_state= UNINIT; have_merged_subqueries= FALSE; bzero((char*) expr_cache_may_be_used, sizeof(expr_cache_may_be_used)); m_non_agg_field_used= false; @@ -4152,12 +4153,22 @@ bool st_select_lex::save_prep_leaf_tables(THD *thd) { List_iterator_fast<TABLE_LIST> li(leaf_tables); TABLE_LIST *table; + + /* + Check that the SELECT_LEX was really prepared and so tables are setup. + + It can be subquery in SET clause of UPDATE which was not prepared yet, so + its tables are not yet setup and ready for storing. + */ + if (prep_leaf_list_state != READY) + return FALSE; + while ((table= li++)) { if (leaf_tables_prep.push_back(table)) return TRUE; } - is_prep_leaf_list_saved= TRUE; + prep_leaf_list_state= SAVED; for (SELECT_LEX_UNIT *u= first_inner_unit(); u; u= u->next_unit()) { for (SELECT_LEX *sl= u->first_select(); sl; sl= sl->next_select()) |