Loading mysql-test/r/trigger.result +25 −0 Original line number Diff line number Diff line Loading @@ -1241,6 +1241,31 @@ i j 2 2 13 13 drop table t1; CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (a INT PRIMARY KEY); INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW INSERT INTO t2 VALUES (OLD.a); FLUSH STATUS; TRUNCATE t1; SHOW STATUS LIKE 'handler_delete'; Variable_name Value Handler_delete 0 SELECT COUNT(*) FROM t2; COUNT(*) 0 INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); DELETE FROM t2; FLUSH STATUS; DELETE FROM t1; SHOW STATUS LIKE 'handler_delete'; Variable_name Value Handler_delete 8 SELECT COUNT(*) FROM t2; COUNT(*) 8 DROP TRIGGER trg_t1; DROP TABLE t1,t2; drop table if exists t1; drop function if exists f1; create table t1 (i int); Loading mysql-test/t/trigger.test +25 −0 Original line number Diff line number Diff line Loading @@ -1505,6 +1505,31 @@ update t1 set i= i+ 10 where j > 2; select * from t1; drop table t1; # # Bug#23556 TRUNCATE TABLE still maps to DELETE # CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (a INT PRIMARY KEY); INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW INSERT INTO t2 VALUES (OLD.a); FLUSH STATUS; TRUNCATE t1; SHOW STATUS LIKE 'handler_delete'; SELECT COUNT(*) FROM t2; INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); DELETE FROM t2; FLUSH STATUS; DELETE FROM t1; SHOW STATUS LIKE 'handler_delete'; SELECT COUNT(*) FROM t2; DROP TRIGGER trg_t1; DROP TABLE t1,t2; # # Bug #23651 "Server crashes when trigger which uses stored function Loading sql/sql_delete.cc +5 −1 Original line number Diff line number Diff line Loading @@ -75,10 +75,14 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, Test if the user wants to delete all rows and deletion doesn't have any side-effects (because of triggers), so we can use optimized handler::delete_all_rows() method. We implement fast TRUNCATE for InnoDB even if triggers are present. TRUNCATE ignores triggers. */ if (!using_limit && const_cond && (!conds || conds->val_int()) && !(specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) && (thd->lex->sql_command == SQLCOM_TRUNCATE || !(table->triggers && table->triggers->has_delete_triggers())) ) { deleted= table->file->records; if (!(error=table->file->delete_all_rows())) Loading Loading
mysql-test/r/trigger.result +25 −0 Original line number Diff line number Diff line Loading @@ -1241,6 +1241,31 @@ i j 2 2 13 13 drop table t1; CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (a INT PRIMARY KEY); INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW INSERT INTO t2 VALUES (OLD.a); FLUSH STATUS; TRUNCATE t1; SHOW STATUS LIKE 'handler_delete'; Variable_name Value Handler_delete 0 SELECT COUNT(*) FROM t2; COUNT(*) 0 INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); DELETE FROM t2; FLUSH STATUS; DELETE FROM t1; SHOW STATUS LIKE 'handler_delete'; Variable_name Value Handler_delete 8 SELECT COUNT(*) FROM t2; COUNT(*) 8 DROP TRIGGER trg_t1; DROP TABLE t1,t2; drop table if exists t1; drop function if exists f1; create table t1 (i int); Loading
mysql-test/t/trigger.test +25 −0 Original line number Diff line number Diff line Loading @@ -1505,6 +1505,31 @@ update t1 set i= i+ 10 where j > 2; select * from t1; drop table t1; # # Bug#23556 TRUNCATE TABLE still maps to DELETE # CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (a INT PRIMARY KEY); INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW INSERT INTO t2 VALUES (OLD.a); FLUSH STATUS; TRUNCATE t1; SHOW STATUS LIKE 'handler_delete'; SELECT COUNT(*) FROM t2; INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8); DELETE FROM t2; FLUSH STATUS; DELETE FROM t1; SHOW STATUS LIKE 'handler_delete'; SELECT COUNT(*) FROM t2; DROP TRIGGER trg_t1; DROP TABLE t1,t2; # # Bug #23651 "Server crashes when trigger which uses stored function Loading
sql/sql_delete.cc +5 −1 Original line number Diff line number Diff line Loading @@ -75,10 +75,14 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, Test if the user wants to delete all rows and deletion doesn't have any side-effects (because of triggers), so we can use optimized handler::delete_all_rows() method. We implement fast TRUNCATE for InnoDB even if triggers are present. TRUNCATE ignores triggers. */ if (!using_limit && const_cond && (!conds || conds->val_int()) && !(specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) && (thd->lex->sql_command == SQLCOM_TRUNCATE || !(table->triggers && table->triggers->has_delete_triggers())) ) { deleted= table->file->records; if (!(error=table->file->delete_all_rows())) Loading