summaryrefslogtreecommitdiff
path: root/sql/sql_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_view.cc')
-rw-r--r--sql/sql_view.cc33
1 files changed, 17 insertions, 16 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index ce08763015f..289bf9d28a3 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -717,6 +717,16 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
}
/*
+ Let us set proper lock type for tables of the view's main select
+ since we may want to perform update or insert on view. This won't
+ work for view containing union. But this is ok since we don't
+ allow insert and update on such views anyway.
+ */
+ if (!lex->select_lex.next_select())
+ for (tbl= lex->select_lex.get_table_list(); tbl; tbl= tbl->next_local)
+ tbl->lock_type= table->lock_type;
+
+ /*
If we are opening this view as part of implicit LOCK TABLES, then
this view serves as simple placeholder and we should not continue
further processing.
@@ -756,26 +766,17 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
table->ancestor= view_tables;
/*
- Process upper level tables of view. As far as we do noy suport union
- here we can go through local tables of view most upper SELECT
+ Tables of the main select of the view should be marked as belonging
+ to the same select as original view (again we can use LEX::select_lex
+ for this purprose because we don't support MERGE algorithm for views
+ with unions).
*/
- for(tbl= view_tables;
- tbl;
- tbl= tbl->next_local)
- {
- /* next table should include SELECT_LEX under this table SELECT_LEX */
+ for (tbl= lex->select_lex.get_table_list(); tbl; tbl= tbl->next_local)
tbl->select_lex= table->select_lex;
- /*
- move lock type (TODO: should we issue error in case of TMPTABLE
- algorithm and non-read locking)?
- */
- tbl->lock_type= table->lock_type;
- }
-
- /* multi table view */
- if (view_tables->next_local)
{
+ if (view_tables->next_local)
+ table->multitable_view= TRUE;
/* make nested join structure for view tables */
NESTED_JOIN *nested_join;
if (!(nested_join= table->nested_join=