Below is the list of changes that have just been committed into a local
5.0 repository of gluh. When gluh does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-05-31 17:58:49+05:00, gluh@stripped +5 -0
Bug#28266 IS_UPDATABLE field on VIEWS table in I_S database is wrong
IS_UPDATABLE flag is set to 'yes' when the view has at least one updatable column and
algorithm is not 'temporary'.
mysql-test/r/information_schema.result@stripped, 2007-05-31 17:58:47+05:00, gluh@stripped +10 -0
test result
mysql-test/r/view.result@stripped, 2007-05-31 17:58:47+05:00, gluh@stripped +13 -0
test result
mysql-test/t/information_schema.test@stripped, 2007-05-31 17:58:47+05:00, gluh@stripped +11 -0
test case
mysql-test/t/view.test@stripped, 2007-05-31 17:58:47+05:00, gluh@stripped +4 -0
test case
sql/sql_show.cc@stripped, 2007-05-31 17:58:47+05:00, gluh@stripped +28 -1
IS_UPDATABLE flag is set to 'yes' when the view has at least one updatable column and
algorithm is not 'temporary'.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: gluh
# Host: eagle.(none)
# Root: /home/gluh/MySQL/Bugs/5.0.28266
--- 1.347/sql/sql_show.cc 2007-04-21 03:36:15 +05:00
+++ 1.348/sql/sql_show.cc 2007-05-31 17:58:47 +05:00
@@ -3158,6 +3158,7 @@ static int get_schema_views_record(THD *
DBUG_ENTER("get_schema_views_record");
char definer[USER_HOST_BUFF_SIZE];
uint definer_len;
+ bool updatable_view;
if (tables->view)
{
@@ -3195,7 +3196,33 @@ static int get_schema_views_record(THD *
else
table->field[4]->store(STRING_WITH_LEN("NONE"), cs);
- if (tables->updatable_view)
+ updatable_view= 0;
+ if (tables->algorithm != VIEW_ALGORITHM_TMPTABLE)
+ {
+ List<Item> *fields= &tables->view->select_lex.item_list;
+ List_iterator<Item> it(*fields);
+ Item *item;
+ Item_field *field;
+ /*
+ chech that at least one coulmn in view is updatable
+ */
+ while ((item= it++))
+ {
+ if ((field= item->filed_for_view_update()))
+ {
+ if (field->field)
+ {
+ Field *fl= field->field;
+ if (!fl->table->pos_in_table_list->schema_table)
+ {
+ updatable_view= 1;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (updatable_view)
table->field[5]->store(STRING_WITH_LEN("YES"), cs);
else
table->field[5]->store(STRING_WITH_LEN("NO"), cs);
--- 1.200/mysql-test/r/view.result 2007-05-10 00:17:20 +05:00
+++ 1.201/mysql-test/r/view.result 2007-05-31 17:58:47 +05:00
@@ -23,6 +23,9 @@ c
5
6
11
+select is_updatable from information_schema.views where table_name='v1';
+is_updatable
+NO
create temporary table t1 (a int, b int);
select * from t1;
a b
@@ -322,6 +325,12 @@ create table t1 (a int, b int, primary k
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
+select is_updatable from information_schema.views where table_name='v2';
+is_updatable
+NO
+select is_updatable from information_schema.views where table_name='v1';
+is_updatable
+YES
update v1 set c=a+c;
ERROR HY000: Column 'c' is not updatable
update v2 set a=a+c;
@@ -604,6 +613,10 @@ insert into t1 values(5,'Hello, world of
create view v1 as select * from t1;
create view v2 as select * from v1;
update v2 set col2='Hello, view world';
+select is_updatable from information_schema.views;
+is_updatable
+YES
+YES
select * from t1;
col1 col2
5 Hello, view world
--- 1.183/mysql-test/t/view.test 2007-05-10 00:17:20 +05:00
+++ 1.184/mysql-test/t/view.test 2007-05-31 17:58:47 +05:00
@@ -32,6 +32,7 @@ create view v1 (c,d) as select a,b from
# simple view
create view v1 (c) as select b+1 from t1;
select c from v1;
+select is_updatable from information_schema.views where table_name='v1';
# temporary table should not hide table of view
create temporary table t1 (a int, b int);
@@ -228,6 +229,8 @@ create table t1 (a int, b int, primary k
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
+select is_updatable from information_schema.views where table_name='v2';
+select is_updatable from information_schema.views where table_name='v1';
# try to update expression
-- error 1348
update v1 set c=a+c;
@@ -497,6 +500,7 @@ insert into t1 values(5,'Hello, world of
create view v1 as select * from t1;
create view v2 as select * from v1;
update v2 set col2='Hello, view world';
+select is_updatable from information_schema.views;
select * from t1;
drop view v2, v1;
drop table t1;
--- 1.121/mysql-test/r/information_schema.result 2007-03-27 21:31:42 +05:00
+++ 1.122/mysql-test/r/information_schema.result 2007-05-31 17:58:47 +05:00
@@ -1315,3 +1315,13 @@ TABLE_PRIVILEGES information_schema.TABL
TRIGGERS information_schema.TRIGGERS 1
USER_PRIVILEGES information_schema.USER_PRIVILEGES 1
VIEWS information_schema.VIEWS 1
+create table t1(f1 int);
+create view v1 as select f1+1 as a from t1;
+create table t2 (f1 int, f2 int);
+create view v2 as select f1+1 as a, f2 as b from t2;
+select table_name, is_updatable from information_schema.views;
+table_name is_updatable
+v1 NO
+v2 YES
+drop view v1,v2;
+drop table t1,t2;
--- 1.90/mysql-test/t/information_schema.test 2007-02-12 16:06:12 +04:00
+++ 1.91/mysql-test/t/information_schema.test 2007-05-31 17:58:47 +05:00
@@ -1023,4 +1023,15 @@ where t.table_schema = 'information_sche
group by c2.column_type order by num limit 1)
group by t.table_name order by num1, t.table_name;
+#
+# Bug#28266 IS_UPDATABLE field on VIEWS table in I_S database is wrong
+#
+create table t1(f1 int);
+create view v1 as select f1+1 as a from t1;
+create table t2 (f1 int, f2 int);
+create view v2 as select f1+1 as a, f2 as b from t2;
+select table_name, is_updatable from information_schema.views;
+drop view v1,v2;
+drop table t1,t2;
+
# End of 5.0 tests.
| Thread |
|---|
| • bk commit into 5.0 tree (gluh:1.2484) BUG#28266 | gluh | 31 May |