diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index c9581598de6..d866fbe498c 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -1547,3 +1547,14 @@ s1 3 drop view v1; drop table t1; +create table t1 (s1 tinyint); +create trigger t1_bi before insert on t1 for each row set new.s1 = 500; +create view v1 as select * from t1 where s1 <> 127 with check option; +insert into v1 values (0); +ERROR HY000: CHECK OPTION failed 'test.v1' +select * from v1; +s1 +select * from t1; +s1 +drop view v1; +drop table t1; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 282ea827c6a..fdf431f0107 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -1497,3 +1497,17 @@ select * from t1; drop view v1; drop table t1; +# +# changing value by trigger and CHECK OPTION +# +create table t1 (s1 tinyint); +create trigger t1_bi before insert on t1 for each row set new.s1 = 500; +create view v1 as select * from t1 where s1 <> 127 with check option; +-- error 1369 +insert into v1 values (0); +select * from v1; +select * from t1; +drop view v1; +drop table t1; + + diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 2fe0d2f644a..d9002c2da29 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -319,6 +319,15 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, break; } } + + /* + FIXME: Actually we should do this before + check_that_all_fields_are_given_values Or even go into write_record ? + */ + if (table->triggers) + table->triggers->process_triggers(thd, TRG_EVENT_INSERT, + TRG_ACTION_BEFORE); + if ((res= table_list->view_check_option(thd, (values_list.elements == 1 ? 0 : @@ -330,15 +339,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, error= 1; break; } - - /* - FIXME: Actually we should do this before - check_that_all_fields_are_given_values Or even go into write_record ? - */ - if (table->triggers) - table->triggers->process_triggers(thd, TRG_EVENT_INSERT, - TRG_ACTION_BEFORE); - #ifndef EMBEDDED_LIBRARY if (lock_type == TL_WRITE_DELAYED) {