From d2789003b3b816db8b4ceea64518ecf9a7c3ad66 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 12 Sep 2005 17:01:17 +0300 Subject: [PATCH] Fix for BUG#6808. The problem was in that add_table_to_list was testing for duplicate tables in a list of tables that included the created view. mysql-test/r/view.result: Test for BUG#6808 mysql-test/t/view.test: Test for BUG#6808 sql/sql_parse.cc: When testing for table name uniquness, skip the first table the current statement is CREATE VIEW. Notice that the first table is skipped differently for CREATE TABLE ... SELECT ... statements, so we don't have to handle that case here (see production 'create_select', the call 'to save_and_clear'). --- mysql-test/r/view.result | 8 ++++++-- mysql-test/t/view.test | 13 +++++++++++-- sql/sql_parse.cc | 5 ++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index 558977a6d2d..5ac6759f1a3 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -1146,11 +1146,11 @@ create view v2 as select * from v1; alter view v1 as select * from v2; ERROR 42S02: Table 'test.v1' doesn't exist alter view v1 as select * from v1; -ERROR 42000: Not unique table/alias: 'v1' +ERROR 42S02: Table 'test.v1' doesn't exist create or replace view v1 as select * from v2; ERROR 42S02: Table 'test.v1' doesn't exist create or replace view v1 as select * from v1; -ERROR 42000: Not unique table/alias: 'v1' +ERROR 42S02: Table 'test.v1' doesn't exist drop view v2,v1; drop table t1; create table t1 (a int); @@ -2186,3 +2186,7 @@ r_object_id users_names 120001a080000542 guser02 drop view v1, v2; drop table t1, t2; +create table t1 (s1 int); +create view abc as select * from t1 as abc; +drop table t1; +drop view abc; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 7cca98391a8..33b77d80020 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -1083,11 +1083,11 @@ create view v1 as select * from t1; create view v2 as select * from v1; -- error 1146 alter view v1 as select * from v2; --- error 1066 +-- error 1146 alter view v1 as select * from v1; -- error 1146 create or replace view v1 as select * from v2; --- error 1066 +-- error 1146 create or replace view v1 as select * from v1; drop view v2,v1; drop table t1; @@ -2059,3 +2059,12 @@ order by users_names; drop view v1, v2; drop table t1, t2; + +# +# Bug #6808 - Views: CREATE VIEW v ... FROM t AS v fails +# + +create table t1 (s1 int); +create view abc as select * from t1 as abc; +drop table t1; +drop view abc; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 5d0070667c2..c421c4a91a7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6059,7 +6059,10 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, /* check that used name is unique */ if (lock_type != TL_IGNORE) { - for (TABLE_LIST *tables=(TABLE_LIST*) table_list.first ; + TABLE_LIST *first_table= (TABLE_LIST*) table_list.first; + if (lex->sql_command == SQLCOM_CREATE_VIEW) + first_table= first_table ? first_table->next_local : NULL; + for (TABLE_LIST *tables= first_table ; tables ; tables=tables->next_local) {