diff options
author | unknown <gluh@mysql.com/eagle.(none)> | 2007-06-09 16:52:37 +0500 |
---|---|---|
committer | unknown <gluh@mysql.com/eagle.(none)> | 2007-06-09 16:52:37 +0500 |
commit | ce4e9f7580c02d1e7c5587bccb3a2a2ed7b0cc69 (patch) | |
tree | 3d317849cb2de9e97491a3a9aa988b3055e2e82b /sql/sql_show.cc | |
parent | d1a8d7f43159298e0c3f5d1d5a3e00d71504a63d (diff) | |
download | mariadb-git-ce4e9f7580c02d1e7c5587bccb3a2a2ed7b0cc69.tar.gz |
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
the algorithm is not 'temporary'.
mysql-test/r/information_schema.result:
test result
mysql-test/r/view.result:
test result
mysql-test/t/information_schema.test:
test case
mysql-test/t/view.test:
test case
sql/sql_show.cc:
IS_UPDATABLE flag is set to 'yes' when the view has at least one updatable column and
the algorithm is not 'temporary'.
Diffstat (limited to 'sql/sql_show.cc')
-rw-r--r-- | sql/sql_show.cc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 16ed20cd479..a0db458be78 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3158,6 +3158,7 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables, DBUG_ENTER("get_schema_views_record"); char definer[USER_HOST_BUFF_SIZE]; uint definer_len; + bool updatable_view; if (tables->view) { @@ -3195,7 +3196,34 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables, else table->field[4]->store(STRING_WITH_LEN("NONE"), cs); - if (tables->updatable_view) + updatable_view= 0; + if (tables->algorithm != VIEW_ALGORITHM_TMPTABLE) + { + /* + We should use tables->view->select_lex.item_list here and + can not use Field_iterator_view because the view always uses + temporary algorithm during opening for I_S and + TABLE_LIST fields 'field_translation' & 'field_translation_end' + are uninitialized is this case. + */ + 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()) && field->field && + !field->field->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); |