Commit 1bd699e0 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

value should be checked after 'before' trigger work (BUG#5992)

parent 73e4ac71
...@@ -1547,3 +1547,14 @@ s1 ...@@ -1547,3 +1547,14 @@ s1
3 3
drop view v1; drop view v1;
drop table t1; 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;
...@@ -1497,3 +1497,17 @@ select * from t1; ...@@ -1497,3 +1497,17 @@ select * from t1;
drop view v1; drop view v1;
drop table t1; 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;
...@@ -319,6 +319,15 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -319,6 +319,15 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
break; 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, if ((res= table_list->view_check_option(thd,
(values_list.elements == 1 ? (values_list.elements == 1 ?
0 : 0 :
...@@ -330,15 +339,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -330,15 +339,6 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
error= 1; error= 1;
break; 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 #ifndef EMBEDDED_LIBRARY
if (lock_type == TL_WRITE_DELAYED) if (lock_type == TL_WRITE_DELAYED)
{ {
......
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