summaryrefslogtreecommitdiff
path: root/sql/sql_show.cc
diff options
context:
space:
mode:
authorunknown <gluh@mysql.com/eagle.(none)>2007-06-09 16:52:37 +0500
committerunknown <gluh@mysql.com/eagle.(none)>2007-06-09 16:52:37 +0500
commitce4e9f7580c02d1e7c5587bccb3a2a2ed7b0cc69 (patch)
tree3d317849cb2de9e97491a3a9aa988b3055e2e82b /sql/sql_show.cc
parentd1a8d7f43159298e0c3f5d1d5a3e00d71504a63d (diff)
downloadmariadb-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.cc30
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);