diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index c51a4c30960..c5c6b675146 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -3547,4 +3547,19 @@ a b 6 6 DROP VIEW v1; DROP TABLE t1,t2,t3; +create table t1 (i int); +insert into t1 values (1), (2), (1), (3), (2), (4); +create view v1 as select distinct i from t1; +select * from v1; +i +1 +2 +3 +4 +select table_name, is_updatable from information_schema.views +where table_name = 'v1'; +table_name is_updatable +v1 NO +drop view v1; +drop table t1; End of 5.0 tests. diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index c7f722a18a5..fc3fdc932ba 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -3402,5 +3402,18 @@ SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6; DROP VIEW v1; DROP TABLE t1,t2,t3; +# +# Bug#30020: Insufficient check led to a wrong info provided by the +# information schema table. +# +create table t1 (i int); +insert into t1 values (1), (2), (1), (3), (2), (4); +create view v1 as select distinct i from t1; +select * from v1; +select table_name, is_updatable from information_schema.views + where table_name = 'v1'; +drop view v1; +drop table t1; + --echo End of 5.0 tests. diff --git a/sql/sql_show.cc b/sql/sql_show.cc index b91412390bc..05a847b3830 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3211,7 +3211,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, Item *item; Item_field *field; /* - chech that at least one coulmn in view is updatable + check that at least one column in view is updatable */ while ((item= it++)) { @@ -3222,6 +3222,8 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, break; } } + if (updatable_view && !tables->view->can_be_merged()) + updatable_view= 0; } if (updatable_view) table->field[5]->store(STRING_WITH_LEN("YES"), cs);