Commit cf7b1241 authored by unknown's avatar unknown
Browse files

sql_view.cc:

  correct exit from mysql_create_view to restore ennvironment (BUG#12468)
view.result, view.test:
  test of CRETE VIEW in SP


mysql-test/t/view.test:
  test of CRETE VIEW in SP
mysql-test/r/view.result:
  test of CRETE VIEW in SP
sql/sql_view.cc:
  correct exit from mysql_create_view to restore ennvironment
parent d33b968f
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -2097,3 +2097,11 @@ select * from v1;
f1
1
drop view v1;
create table t1(a int);
create procedure p1() create view v1 as select * from t1;
drop table t1;
call p1();
ERROR 42S02: Table 'test.t1' doesn't exist
call p1();
ERROR 42S02: Table 'test.t1' doesn't exist
drop procedure p1;
+12 −0
Original line number Diff line number Diff line
@@ -1942,3 +1942,15 @@ DROP TABLE t1,t2,t3,t4,t5;
create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1;
select * from v1;
drop view v1;

#
# repeatable CREATE VIEW statement BUG#12468
#
create table t1(a int);
create procedure p1() create view v1 as select * from t1;
drop table t1;
-- error 1146
call p1();
-- error 1146
call p1();
drop procedure p1;
+16 −5
Original line number Diff line number Diff line
@@ -234,7 +234,10 @@ bool mysql_create_view(THD *thd,
       (check_access(thd, DROP_ACL, view->db, &view->grant.privilege,
                     0, 0) ||
        grant_option && check_grant(thd, DROP_ACL, view, 0, 1, 0))))
    DBUG_RETURN(TRUE);
  {
    res= TRUE;
    goto err;
  }
  for (sl= select_lex; sl; sl= sl->next_select())
  {
    for (tbl= sl->get_table_list(); tbl; tbl= tbl->next_local)
@@ -247,7 +250,8 @@ bool mysql_create_view(THD *thd,
      {
        my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0),
                 "ANY", thd->priv_user, thd->host_or_ip, tbl->table_name);
        DBUG_RETURN(TRUE);
        res= TRUE;
        goto err;
      }
      /*
        Mark this table as a table which will be checked after the prepare
@@ -306,7 +310,10 @@ bool mysql_create_view(THD *thd,
#endif

  if (open_and_lock_tables(thd, tables))
    DBUG_RETURN(TRUE);
  {
    res= TRUE;
    goto err;
  }

  /*
    check that tables are not temporary  and this VIEW do not used in query
@@ -374,7 +381,10 @@ bool mysql_create_view(THD *thd,
  }

  if (check_duplicate_names(select_lex->item_list, 1))
    DBUG_RETURN(TRUE);
  {
    res= TRUE;
    goto err;
  }

#ifndef NO_EMBEDDED_ACCESS_CHECKS
  /*
@@ -404,7 +414,8 @@ bool mysql_create_view(THD *thd,
          my_error(ER_COLUMNACCESS_DENIED_ERROR, MYF(0),
                   "create view", thd->priv_user, thd->host_or_ip, item->name,
                   view->table_name);
          DBUG_RETURN(TRUE);
          res= TRUE;
          goto err;
        }
      }
    }