mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into rakia.gmz:/home/kgeorge/mysql/autopush/B23556-5.0-opt
This commit is contained in:
commit
f697acb0ca
3 changed files with 55 additions and 1 deletions
|
@ -1310,4 +1310,29 @@ SELECT fubar_id FROM t2;
|
|||
fubar_id
|
||||
1
|
||||
DROP TABLE t1,t2;
|
||||
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;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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…
Reference in a new issue