Commit 836275bb authored by Alexey Botchkov's avatar Alexey Botchkov

MDEV-4829 BEFORE INSERT triggers dont issue 1406 error.

  Turn the 'abort_on_warning' on for assigning value to fields.
parent 905613f8
......@@ -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;
......@@ -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;
......@@ -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;
}
......
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