Commit aa4a3c9a authored by unknown's avatar unknown

Bug#30020: Insufficient check led to a wrong info provided by the

information schema table.

The get_schema_views_record() function fills records in the view table of
the informations schema with data about given views. Among other info
the is_updatable flag is set. But the check whether the view is updatable or
not wasn't covering all cases thus sometimes providing wrong info.
This might led to a user confusion.

Now the get_schema_views_record function additionally calls to the 
view->can_be_merge() function to find out whether the view can be updated or
not.


mysql-test/t/view.test:
  Added a test case for the bug#30020: Insufficient check led to a wrong info
  provided by the information schema table.
mysql-test/r/view.result:
  Added a test case for the bug#30020: Insufficient check led to a wrong info
  provided by the information schema table.
sql/sql_show.cc:
  Bug#30020: Insufficient check led to a wrong info provided by the
  information schema table.
  Now the get_schema_views_record function additionally calls to the 
  view->can_be_merge() function to find out whether the view can be updated or
  not.
parent 1a6ced2c
...@@ -3547,4 +3547,19 @@ a b ...@@ -3547,4 +3547,19 @@ a b
6 6 6 6
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2,t3; 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. End of 5.0 tests.
...@@ -3402,5 +3402,18 @@ SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6; ...@@ -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 VIEW v1;
DROP TABLE t1,t2,t3; 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. --echo End of 5.0 tests.
...@@ -3211,7 +3211,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, ...@@ -3211,7 +3211,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables,
Item *item; Item *item;
Item_field *field; 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++)) while ((item= it++))
{ {
...@@ -3222,6 +3222,8 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, ...@@ -3222,6 +3222,8 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables,
break; break;
} }
} }
if (updatable_view && !tables->view->can_be_merged())
updatable_view= 0;
} }
if (updatable_view) if (updatable_view)
table->field[5]->store(STRING_WITH_LEN("YES"), cs); table->field[5]->store(STRING_WITH_LEN("YES"), cs);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment