Commit e1ea6cc5 authored by unknown's avatar unknown
Browse files

Merge rurik.mysql.com:/home/igor/mysql-5.0

into rurik.mysql.com:/home/igor/dev/mysql-5.0-0


sql/sql_view.cc:
  Auto merged
parents 4d2bf4be c9fa6a47
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ create view v1 (c,d) as select a,b from t1;
ERROR 42S02: Table 'test.t1' doesn't exist
create temporary table t1 (a int, b int);
create view v1 (c) as select b+1 from t1;
ERROR HY000: View's SELECT contains a temporary table 't1'
ERROR HY000: View's SELECT refers to a temporary table 't1'
drop table t1;
create table t1 (a int, b int);
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
@@ -2097,3 +2097,9 @@ select * from v1;
f1
1
drop view v1;
CREATE TEMPORARY TABLE t1 (a int);
CREATE FUNCTION f1 () RETURNS int RETURN (SELECT COUNT(*) FROM t1);
CREATE VIEW v1 AS SELECT f1();
ERROR HY000: View's SELECT refers to a temporary table 't1'
DROP FUNCTION f1;
DROP TABLE t1;
+13 −0
Original line number Diff line number Diff line
@@ -1942,3 +1942,16 @@ 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;

#
# Test for bug #10970: view referring a temporary table indirectly
#                     

CREATE TEMPORARY TABLE t1 (a int);
CREATE FUNCTION f1 () RETURNS int RETURN (SELECT COUNT(*) FROM t1);
-- error 1352
CREATE VIEW v1 AS SELECT f1();

DROP FUNCTION f1;
DROP TABLE t1;
+1 −1
Original line number Diff line number Diff line
@@ -5194,7 +5194,7 @@ ER_VIEW_SELECT_VARIABLE
	rus "View SELECT    "
	ukr "View SELECT    "
ER_VIEW_SELECT_TMPTABLE  
	eng "View's SELECT contains a temporary table '%-.64s'"
	eng "View's SELECT refers to a temporary table '%-.64s'"
	rus "View SELECT      '%-.64s'"
	ukr "View SELECT դ   '%-.64s'"
ER_VIEW_WRONG_LIST  
+5 −3
Original line number Diff line number Diff line
@@ -306,9 +306,11 @@ bool mysql_create_view(THD *thd,

  /*
    check that tables are not temporary  and this VIEW do not used in query
    (it is possible with ALTERing VIEW)
    (it is possible with ALTERing VIEW).
    open_and_lock_tables can change the value of tables,
    e.g. it may happen if before the function call tables was equal to 0. 
  */ 
  for (tbl= tables; tbl; tbl= tbl->next_global)
  for (tbl= tables= 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 &&