diff options
author | Alexey Botchkov <holyfoot@askmonty.org> | 2015-11-17 00:42:18 +0400 |
---|---|---|
committer | Alexey Botchkov <holyfoot@askmonty.org> | 2015-11-17 22:09:42 +0400 |
commit | 836275bb203a47104eb7f28aa409924b91abc801 (patch) | |
tree | b7ce5ad7a0159c300290af5d3590861c76a9fe3d | |
parent | 905613f825f28f561072d6babd307a010de7cf86 (diff) | |
download | mariadb-git-836275bb203a47104eb7f28aa409924b91abc801.tar.gz |
MDEV-4829 BEFORE INSERT triggers dont issue 1406 error.
Turn the 'abort_on_warning' on for assigning value to fields.
-rw-r--r-- | mysql-test/r/trigger.result | 15 | ||||
-rw-r--r-- | mysql-test/t/trigger.test | 22 | ||||
-rw-r--r-- | sql/sp_head.cc | 3 |
3 files changed, 40 insertions, 0 deletions
diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result index 9dfa5897af1..c1780819c68 100644 --- a/mysql-test/r/trigger.result +++ b/mysql-test/r/trigger.result @@ -2273,3 +2273,18 @@ SET optimizer_switch=@save_optimizer_switch; DROP TRIGGER tr; DROP TABLE t1, t2; End of 5.3 tests. +SET @@session.sql_mode = 'STRICT_ALL_TABLES,STRICT_TRANS_TABLES'; +CREATE TABLE t1 (c CHAR(1) NOT NULL); +CREATE TRIGGER t1_bi +BEFORE INSERT +ON t1 +FOR EACH ROW +BEGIN +SET NEW.c = 'www'; +END; +| +SET @@session.sql_mode = default; +INSERT INTO t1 VALUES ('a'); +ERROR 22001: Data too long for column 'c' at row 1 +DROP TRIGGER t1_bi; +DROP TABLE t1; diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test index 384dd6cdec5..033a197fe10 100644 --- a/mysql-test/t/trigger.test +++ b/mysql-test/t/trigger.test @@ -2613,3 +2613,25 @@ DROP TABLE t1, t2; --echo End of 5.3 tests. +# +# MDEV-4829 BEFORE INSERT triggers dont issue 1406 error +# + +SET @@session.sql_mode = 'STRICT_ALL_TABLES,STRICT_TRANS_TABLES'; +CREATE TABLE t1 (c CHAR(1) NOT NULL); +DELIMITER |; +CREATE TRIGGER t1_bi + BEFORE INSERT + ON t1 + FOR EACH ROW + BEGIN + SET NEW.c = 'www'; + END; +| +DELIMITER ;| +SET @@session.sql_mode = default; +--error ER_DATA_TOO_LONG +INSERT INTO t1 VALUES ('a'); +DROP TRIGGER t1_bi; +DROP TABLE t1; + diff --git a/sql/sp_head.cc b/sql/sp_head.cc index a11796391d7..01e649bb746 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -3229,7 +3229,10 @@ sp_instr_set_trigger_field::execute(THD *thd, uint *nextp) int sp_instr_set_trigger_field::exec_core(THD *thd, uint *nextp) { + bool sav_abort_on_warning= thd->abort_on_warning; + thd->abort_on_warning= thd->is_strict_mode() && !thd->lex->ignore; const int res= (trigger_field->set_value(thd, &value) ? -1 : 0); + thd->abort_on_warning= sav_abort_on_warning; *nextp = m_ip+1; return res; } |