diff options
author | ibabaev@bk-internal.mysql.com <> | 2007-06-02 00:57:25 +0200 |
---|---|---|
committer | ibabaev@bk-internal.mysql.com <> | 2007-06-02 00:57:25 +0200 |
commit | 4bc1738be016cae3d0febed58d403a5c8d9ced11 (patch) | |
tree | 5339c6747631cb919dd972d0b8a25a0958bceba5 /sql/sql_view.cc | |
parent | 72a64f083b656ce0c233cbd845554399e0f6f75e (diff) | |
parent | b9a343104889451615ea603679b6941965b130e0 (diff) | |
download | mariadb-git-4bc1738be016cae3d0febed58d403a5c8d9ced11.tar.gz |
Merge bk-internal.mysql.com:/data0/bk/mysql-5.0
into bk-internal.mysql.com:/data0/bk/mysql-5.0-opt
Diffstat (limited to 'sql/sql_view.cc')
-rw-r--r-- | sql/sql_view.cc | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 0fb4d3aaea8..3c15f9c6494 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -824,6 +824,103 @@ loop_out: } } } + /* fill structure */ + view->query.str= (char*)str.ptr(); + view->query.length= str.length()-1; // we do not need last \0 + view->source.str= thd->query + thd->lex->create_view_select_start; + view->source.length= (char *)skip_rear_comments((char *)view->source.str, + (char *)thd->query + + thd->query_length) - + view->source.str; + view->file_version= 1; + view->calc_md5(md5); + view->md5.str= md5; + view->md5.length= 32; + can_be_merged= lex->can_be_merged(); + if (lex->create_view_algorithm == VIEW_ALGORITHM_MERGE && + !lex->can_be_merged()) + { + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_VIEW_MERGE, + ER(ER_WARN_VIEW_MERGE)); + lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; + } + view->algorithm= lex->create_view_algorithm; + view->definer.user= lex->definer->user; + view->definer.host= lex->definer->host; + view->view_suid= lex->create_view_suid; + view->with_check= lex->create_view_check; + if ((view->updatable_view= (can_be_merged && + view->algorithm != VIEW_ALGORITHM_TMPTABLE))) + { + /* TODO: change here when we will support UNIONs */ + for (TABLE_LIST *tbl= (TABLE_LIST *)lex->select_lex.table_list.first; + tbl; + tbl= tbl->next_local) + { + if ((tbl->view && !tbl->updatable_view) || tbl->schema_table) + { + view->updatable_view= 0; + break; + } + for (TABLE_LIST *up= tbl; up; up= up->embedding) + { + if (up->outer_join) + { + view->updatable_view= 0; + goto loop_out; + } + } + } + } + /* fill structure */ + view->query.str= (char*)str.ptr(); + view->query.length= str.length()-1; // we do not need last \0 + view->source.str= thd->query + thd->lex->create_view_select_start; + view->source.length= (char *)skip_rear_comments(thd->charset(), + (char *)view->source.str, + (char *)thd->query + + thd->query_length) - + view->source.str; + view->file_version= 1; + view->calc_md5(md5); + view->md5.str= md5; + view->md5.length= 32; + can_be_merged= lex->can_be_merged(); + if (lex->create_view_algorithm == VIEW_ALGORITHM_MERGE && + !lex->can_be_merged()) + { + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_VIEW_MERGE, + ER(ER_WARN_VIEW_MERGE)); + lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; + } + view->algorithm= lex->create_view_algorithm; + view->definer.user= lex->definer->user; + view->definer.host= lex->definer->host; + view->view_suid= lex->create_view_suid; + view->with_check= lex->create_view_check; + if ((view->updatable_view= (can_be_merged && + view->algorithm != VIEW_ALGORITHM_TMPTABLE))) + { + /* TODO: change here when we will support UNIONs */ + for (TABLE_LIST *tbl= (TABLE_LIST *)lex->select_lex.table_list.first; + tbl; + tbl= tbl->next_local) + { + if ((tbl->view && !tbl->updatable_view) || tbl->schema_table) + { + view->updatable_view= 0; + break; + } + for (TABLE_LIST *up= tbl; up; up= up->embedding) + { + if (up->outer_join) + { + view->updatable_view= 0; + goto loop_out; + } + } + } + } /* Check that table of main select do not used in subqueries. |