mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 19:11:46 +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
d9ae9ce58d
3 changed files with 55 additions and 1 deletions
|
@ -1241,6 +1241,31 @@ i j
|
||||||
2 2
|
2 2
|
||||||
13 13
|
13 13
|
||||||
drop table t1;
|
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 table if exists t1;
|
||||||
drop function if exists f1;
|
drop function if exists f1;
|
||||||
create table t1 (i int);
|
create table t1 (i int);
|
||||||
|
|
|
@ -1505,6 +1505,31 @@ update t1 set i= i+ 10 where j > 2;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table 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
|
# 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
|
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
|
any side-effects (because of triggers), so we can use optimized
|
||||||
handler::delete_all_rows() method.
|
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()) &&
|
if (!using_limit && const_cond && (!conds || conds->val_int()) &&
|
||||||
!(specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) &&
|
!(specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) &&
|
||||||
|
(thd->lex->sql_command == SQLCOM_TRUNCATE ||
|
||||||
!(table->triggers && table->triggers->has_delete_triggers()))
|
!(table->triggers && table->triggers->has_delete_triggers()))
|
||||||
|
)
|
||||||
{
|
{
|
||||||
deleted= table->file->records;
|
deleted= table->file->records;
|
||||||
if (!(error=table->file->delete_all_rows()))
|
if (!(error=table->file->delete_all_rows()))
|
||||||
|
|
Loading…
Add table
Reference in a new issue