summaryrefslogtreecommitdiff
path: root/sql/sql_view.cc
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2005-12-03 08:56:00 +0200
committerunknown <bell@sanja.is.com.ua>2005-12-03 08:56:00 +0200
commit099d2bfbb190e2834eb1cbe73d4ec4981746f979 (patch)
treed9e560cf66c5f514ec3bc3bc3894112f19da7420 /sql/sql_view.cc
parent90ab6eedb8408e64521dc5158b36fde74ab872bd (diff)
parent56cccee22a0a5f49f39b0a1479e4525c919e3dd5 (diff)
downloadmariadb-git-099d2bfbb190e2834eb1cbe73d4ec4981746f979.tar.gz
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0
into sanja.is.com.ua:/home/bell/mysql/bk/work-merge-5.1 configure.in: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/sp.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/t/query_cache.test: Auto merged mysql-test/t/view.test: Auto merged sql/sp_head.cc: Auto merged sql/sql_view.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/sql_cache.cc: merge sql/sql_lex.h: merge
Diffstat (limited to 'sql/sql_view.cc')
-rw-r--r--sql/sql_view.cc40
1 files changed, 24 insertions, 16 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 02bbe2bc3dc..e5e0603c640 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -350,15 +350,6 @@ bool mysql_create_view(THD *thd,
*/
for (tbl= lex->query_tables; tbl; tbl= tbl->next_global)
{
- /* is this table temporary and is not view? */
- if (tbl->table->s->tmp_table != NO_TMP_TABLE && !tbl->view &&
- !tbl->schema_table)
- {
- my_error(ER_VIEW_SELECT_TMPTABLE, MYF(0), tbl->alias);
- res= TRUE;
- goto err;
- }
-
/* is this table view and the same view which we creates now? */
if (tbl->view &&
strcmp(tbl->view_db.str, view->db) == 0 &&
@@ -370,11 +361,29 @@ bool mysql_create_view(THD *thd,
}
/*
- Copy the privileges of the underlying VIEWs which were filled by
- fill_effective_table_privileges
- (they were not copied at derived tables processing)
+ tbl->table can be NULL when tbl is a placeholder for a view
+ that is indirectly referenced via a stored function from the
+ view being created. We don't check these indirectly
+ referenced views in CREATE VIEW so they don't have table
+ object.
*/
- tbl->table->grant.privilege= tbl->grant.privilege;
+ if (tbl->table)
+ {
+ /* is this table temporary and is not view? */
+ if (tbl->table->s->tmp_table != NO_TMP_TABLE && !tbl->view &&
+ !tbl->schema_table)
+ {
+ my_error(ER_VIEW_SELECT_TMPTABLE, MYF(0), tbl->alias);
+ res= TRUE;
+ goto err;
+ }
+ /*
+ Copy the privileges of the underlying VIEWs which were filled by
+ fill_effective_table_privileges
+ (they were not copied at derived tables processing)
+ */
+ tbl->table->grant.privilege= tbl->grant.privilege;
+ }
}
/* prepare select to resolve all fields */
@@ -641,10 +650,9 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
/* fill structure */
view->query.str= (char*)str.ptr();
view->query.length= str.length()-1; // we do not need last \0
- view->source.str= thd->lex->create_view_select_start;
+ view->source.str= thd->query + thd->lex->create_view_select_start;
view->source.length= (thd->query_length -
- (thd->lex->create_view_select_start -
- thd->lex->create_view_start));
+ thd->lex->create_view_select_start);
view->file_version= 1;
view->calc_md5(md5);
view->md5.str= md5;