Commit e0b4db5b authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-29750 triggers can modify history

should be the same behavior as for virtual columns:
* a warning on every inserted row
* silently ignored in a trigger
parent 78030b67
set time_zone='+00:00';
#
# MDEV-29750 triggers can modify history
#
set sql_mode='', timestamp=unix_timestamp('2010-10-10 10:10:10');
create table t (a int, b int as (a+1), s timestamp(6) as row start, e timestamp(6) as row end, period for system_time(s,e)) with system versioning;
insert into t values (1,1, '2022-01-01','2023-01-01'),(2,2, '2022-02-02','2023-02-02');
Warnings:
Warning 1906 The value specified for generated column 'b' in table 't' has been ignored
Warning 1906 The value specified for generated column 's' in table 't' has been ignored
Warning 1906 The value specified for generated column 'e' in table 't' has been ignored
Warning 1906 The value specified for generated column 'b' in table 't' has been ignored
Warning 1906 The value specified for generated column 's' in table 't' has been ignored
Warning 1906 The value specified for generated column 'e' in table 't' has been ignored
create trigger tr before insert on t for each row set new.b=1, new.s = '2022-03-03', new.e = '2023-03-03';
insert into t (a) values (3),(4);
select * from t for system_time all;
a b s e
1 2 2010-10-10 10:10:10.000000 2038-01-19 03:14:07.999999
2 3 2010-10-10 10:10:10.000000 2038-01-19 03:14:07.999999
3 4 2010-10-10 10:10:10.000000 2038-01-19 03:14:07.999999
4 5 2010-10-10 10:10:10.000000 2038-01-19 03:14:07.999999
drop table t;
set sql_mode=default, timestamp=default;
#
# End of 10.3 tests
#
#
# simple tests that don't need to be run in multiple various combinations
#
set time_zone='+00:00';
--echo #
--echo # MDEV-29750 triggers can modify history
--echo #
set sql_mode='', timestamp=unix_timestamp('2010-10-10 10:10:10');
create table t (a int, b int as (a+1), s timestamp(6) as row start, e timestamp(6) as row end, period for system_time(s,e)) with system versioning;
insert into t values (1,1, '2022-01-01','2023-01-01'),(2,2, '2022-02-02','2023-02-02');
create trigger tr before insert on t for each row set new.b=1, new.s = '2022-03-03', new.e = '2023-03-03';
insert into t (a) values (3),(4);
select * from t for system_time all;
drop table t;
set sql_mode=default, timestamp=default;
--echo #
--echo # End of 10.3 tests
--echo #
...@@ -9804,6 +9804,8 @@ bool Item_trigger_field::set_value(THD *thd, sp_rcontext * /*ctx*/, Item **it) ...@@ -9804,6 +9804,8 @@ bool Item_trigger_field::set_value(THD *thd, sp_rcontext * /*ctx*/, Item **it)
if (!item || fix_fields_if_needed(thd, NULL)) if (!item || fix_fields_if_needed(thd, NULL))
return true; return true;
if (field->vers_sys_field())
return false;
// NOTE: field->table->copy_blobs should be false here, but let's // NOTE: field->table->copy_blobs should be false here, but let's
// remember the value at runtime to avoid subtle bugs. // remember the value at runtime to avoid subtle bugs.
......
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