diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-02-28 18:13:28 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-02-28 18:13:28 +0400 |
commit | 0ad598a00b17008b0c0702db40948b14d7eee0d5 (patch) | |
tree | 4288555eee4e2fb9c427d8aa97ba762eb7c03b0f | |
parent | c9b9d9f5152b2ec16e88c0b235d50420c52b41de (diff) | |
download | mariadb-git-0ad598a00b17008b0c0702db40948b14d7eee0d5.tar.gz |
A cleanup in derived table handling: removing duplicate code from st_select_lex::handle_derived()
st_select_lex::handle_derived() and mysql_handle_list_of_derived() had
exactly the same implementations.
- Adding a new method LEX::handle_list_of_derived() instead
- Removing public function mysql_handle_list_of_derived()
- Reusing LEX::handle_list_of_derived() in st_select_lex::handle_derived()
-rw-r--r-- | sql/sql_delete.cc | 6 | ||||
-rw-r--r-- | sql/sql_derived.cc | 30 | ||||
-rw-r--r-- | sql/sql_derived.h | 1 | ||||
-rw-r--r-- | sql/sql_insert.cc | 2 | ||||
-rw-r--r-- | sql/sql_lex.cc | 9 | ||||
-rw-r--r-- | sql/sql_lex.h | 25 | ||||
-rw-r--r-- | sql/sql_load.cc | 2 |
7 files changed, 31 insertions, 44 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index cdd7350cb0c..ab573df7992 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -37,7 +37,7 @@ #include "sql_trigger.h" #include "transaction.h" #include "records.h" // init_read_record, -#include "sql_derived.h" // mysql_handle_list_of_derived +#include "sql_derived.h" // mysql_handle_derived // end_read_record /** Implement DELETE SQL word. @@ -71,9 +71,9 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, if (open_and_lock_tables(thd, table_list, TRUE, 0)) DBUG_RETURN(TRUE); - if (mysql_handle_list_of_derived(thd->lex, table_list, DT_MERGE_FOR_INSERT)) + if (thd->lex->handle_list_of_derived(table_list, DT_MERGE_FOR_INSERT)) DBUG_RETURN(TRUE); - if (mysql_handle_list_of_derived(thd->lex, table_list, DT_PREPARE)) + if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE)) DBUG_RETURN(TRUE); if (!table_list->single_table_updatable()) diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 2e947ecba16..e990eba8e54 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -200,36 +200,6 @@ mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases) /** - Run specified phases for derived tables/views in the given list - - @param lex LEX for this thread - @param table_list list of derived tables/view to handle - @param phase_map phases to process tables/views through - - @details - This function runs phases specified by the 'phases_map' on derived - tables/views found in the 'dt_list' with help of the - TABLE_LIST::handle_derived function. - 'lex' is passed as an argument to the TABLE_LIST::handle_derived. - - @return FALSE ok - @return TRUE error -*/ - -bool -mysql_handle_list_of_derived(LEX *lex, TABLE_LIST *table_list, uint phases) -{ - for (TABLE_LIST *tl= table_list; tl; tl= tl->next_local) - { - if (tl->is_view_or_derived() && - tl->handle_derived(lex, phases)) - return TRUE; - } - return FALSE; -} - - -/** Merge a derived table/view into the embedding select @param thd thread handle diff --git a/sql/sql_derived.h b/sql/sql_derived.h index f232445879e..29b898fc65a 100644 --- a/sql/sql_derived.h +++ b/sql/sql_derived.h @@ -22,7 +22,6 @@ struct LEX; bool mysql_handle_derived(LEX *lex, uint phases); bool mysql_handle_single_derived(LEX *lex, TABLE_LIST *derived, uint phases); -bool mysql_handle_list_of_derived(LEX *lex, TABLE_LIST *dt_list, uint phases); /** Cleans up the SELECT_LEX_UNIT for the derived table (if any). diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 809059093c2..ba8134bfaf1 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1404,7 +1404,7 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, DBUG_RETURN(TRUE); if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT)) DBUG_RETURN(TRUE); - if (mysql_handle_list_of_derived(thd->lex, table_list, DT_PREPARE)) + if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE)) DBUG_RETURN(TRUE); /* For subqueries in VALUES() we should not see the table in which we are diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index cfbde25314b..3c0d3049ae4 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -3593,14 +3593,7 @@ bool st_select_lex::optimize_unflattened_subqueries(bool const_only) bool st_select_lex::handle_derived(LEX *lex, uint phases) { - for (TABLE_LIST *cursor= (TABLE_LIST*) table_list.first; - cursor; - cursor= cursor->next_local) - { - if (cursor->is_view_or_derived() && cursor->handle_derived(lex, phases)) - return TRUE; - } - return FALSE; + return lex->handle_list_of_derived(table_list.first, phases); } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 57129cfedc7..8a31560d2bf 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -2785,6 +2785,31 @@ struct LEX: public Query_tables_list } bool save_prep_leaf_tables(); + + /* + Run specified phases for derived tables/views in the given list + + @param table_list - list of derived tables/view to handle + @param phase - phases to process tables/views through + + @details + This method runs phases specified by the 'phases' on derived + tables/views found in the 'table_list' with help of the + TABLE_LIST::handle_derived function. + 'this' is passed as an argument to the TABLE_LIST::handle_derived. + + @return false - ok + @return true - error + */ + bool handle_list_of_derived(TABLE_LIST *table_list, uint phases) + { + for (TABLE_LIST *tl= table_list; tl; tl= tl->next_local) + { + if (tl->is_view_or_derived() && tl->handle_derived(this, phases)) + return true; + } + return false; + } }; diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 113cbe1dac0..850360c1dba 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -235,7 +235,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, DBUG_RETURN(TRUE); if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT)) DBUG_RETURN(TRUE); - if (mysql_handle_list_of_derived(thd->lex, table_list, DT_PREPARE)) + if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE)) DBUG_RETURN(TRUE); if (setup_tables_and_check_access(thd, &thd->lex->select_lex.context, &thd->lex->select_lex.top_join_list, |