2011-01-14 14:38:41 +01:00
|
|
|
#
|
2011-02-09 04:17:12 +01:00
|
|
|
# Bug#36981 - "innodb crash when selecting for update"
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
c1 CHAR(1),
|
|
|
|
c2 CHAR(10),
|
|
|
|
KEY (c1)
|
|
|
|
);
|
|
|
|
INSERT INTO t1 VALUES ('3', null);
|
|
|
|
SELECT * FROM t1 WHERE c1='3' FOR UPDATE;
|
|
|
|
c1 c2
|
|
|
|
3 NULL
|
|
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
|
|
INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
|
|
CREATE TABLE t2 (a INT);
|
|
|
|
INSERT INTO t2 SELECT A.a + 10*(B.a + 10*C.a) FROM t1 A, t1 B, t1 C;
|
|
|
|
CREATE TABLE t3 (
|
|
|
|
c1 CHAR(10) NOT NULL,
|
|
|
|
c2 CHAR(10) NOT NULL,
|
|
|
|
c3 CHAR(200) NOT NULL,
|
|
|
|
KEY (c1)
|
|
|
|
);
|
|
|
|
INSERT INTO t3
|
|
|
|
SELECT CONCAT('c-',1000+t2.a,'=w'), CONCAT('c-',1000+ t2.a,'=w'), 'filler'
|
|
|
|
FROM t2;
|
|
|
|
INSERT INTO t3
|
|
|
|
SELECT CONCAT('c-',1000+t2.a,'=w'), CONCAT('c-',2000+t2.a,'=w'), 'filler-1'
|
|
|
|
FROM t2;
|
|
|
|
INSERT INTO t3
|
|
|
|
SELECT CONCAT('c-',1000+t2.a,'=w'), CONCAT('c-',3000+t2.a,'=w'), 'filler-2'
|
|
|
|
FROM t2;
|
|
|
|
SELECT c1,c3 FROM t3 WHERE c1 >= 'c-1994=w' and c1 != 'c-1996=w' FOR UPDATE;
|
|
|
|
c1 c3
|
|
|
|
c-1994=w filler
|
|
|
|
c-1994=w filler-1
|
|
|
|
c-1994=w filler-2
|
|
|
|
c-1995=w filler
|
|
|
|
c-1995=w filler-1
|
|
|
|
c-1995=w filler-2
|
|
|
|
c-1997=w filler
|
|
|
|
c-1997=w filler-1
|
|
|
|
c-1997=w filler-2
|
|
|
|
c-1998=w filler
|
|
|
|
c-1998=w filler-1
|
|
|
|
c-1998=w filler-2
|
|
|
|
c-1999=w filler
|
|
|
|
c-1999=w filler-1
|
|
|
|
c-1999=w filler-2
|
|
|
|
DROP TABLE t1,t2,t3;
|
|
|
|
#
|
2011-01-14 14:38:41 +01:00
|
|
|
# Bug#42580 - Innodb's ORDER BY ..LIMIT returns no rows for
|
|
|
|
# null-safe operator <=> NULL
|
|
|
|
#
|
|
|
|
CREATE TABLE t1(
|
|
|
|
c1 DATE NOT NULL,
|
|
|
|
c2 DATE NULL,
|
|
|
|
c3 DATETIME,
|
|
|
|
c4 TIMESTAMP,
|
|
|
|
PRIMARY KEY(c1),
|
|
|
|
UNIQUE(c2)
|
|
|
|
);
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES('0000-00-00', '0000-00-00', '2008-01-04', '2008-01-05');
|
|
|
|
INSERT INTO t1 VALUES('2007-05-25', '2007-05-25', '2007-05-26', '2007-05-26');
|
|
|
|
INSERT INTO t1 VALUES('2008-01-01', NULL , '2008-01-02', '2008-01-03');
|
|
|
|
INSERT INTO t1 VALUES('2008-01-17', NULL , NULL , '2009-01-29');
|
|
|
|
INSERT INTO t1 VALUES('2009-01-29', '2009-01-29', '2009-01-29', '2009-01-29');
|
|
|
|
|
|
|
|
SELECT * FROM t1 WHERE c2 <=> NULL ORDER BY c1,c2;
|
|
|
|
c1 c2 c3 c4
|
|
|
|
2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
|
|
|
|
2008-01-17 NULL NULL 2009-01-29 00:00:00
|
|
|
|
|
|
|
|
SELECT * FROM t1 WHERE c2 <=> NULL ORDER BY c1,c2 LIMIT 2;
|
|
|
|
c1 c2 c3 c4
|
|
|
|
2008-01-01 NULL 2008-01-02 00:00:00 2008-01-03 00:00:00
|
|
|
|
2008-01-17 NULL NULL 2009-01-29 00:00:00
|
|
|
|
|
|
|
|
DROP TABLE t1;
|
2011-01-14 15:30:27 +01:00
|
|
|
#
|
|
|
|
# Bug#40992 - InnoDB: Crash when engine_condition_pushdown is on
|
|
|
|
#
|
|
|
|
CREATE TABLE t (
|
|
|
|
dummy INT PRIMARY KEY,
|
|
|
|
a INT UNIQUE,
|
|
|
|
b INT
|
|
|
|
);
|
|
|
|
INSERT INTO t VALUES (1,1,1),(3,3,3),(5,5,5);
|
|
|
|
SELECT * FROM t WHERE a > 2 FOR UPDATE;
|
|
|
|
dummy a b
|
|
|
|
3 3 3
|
|
|
|
5 5 5
|
|
|
|
DROP TABLE t;
|
|
|
|
#
|
|
|
|
# Bug#35080 - Innodb crash at mem_block_get_len line 72
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
t1_autoinc INT(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
uuid VARCHAR(36) DEFAULT NULL,
|
|
|
|
PRIMARY KEY (t1_autoinc),
|
|
|
|
KEY k (uuid)
|
|
|
|
);
|
|
|
|
CREATE TABLE t2 (
|
|
|
|
t2_autoinc INT(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
uuid VARCHAR(36) DEFAULT NULL,
|
|
|
|
date DATETIME DEFAULT NULL,
|
|
|
|
PRIMARY KEY (t2_autoinc),
|
|
|
|
KEY k (uuid)
|
|
|
|
);
|
|
|
|
CREATE VIEW v1 AS
|
|
|
|
SELECT t1_autoinc, uuid
|
|
|
|
FROM t1
|
|
|
|
WHERE (ISNULL(uuid) OR (uuid like '%-%'));
|
|
|
|
CREATE VIEW v2 AS
|
|
|
|
SELECT t2_autoinc, uuid, date
|
|
|
|
FROM t2
|
|
|
|
WHERE (ISNULL(uuid) OR (LENGTH(uuid) = 36));
|
|
|
|
CREATE PROCEDURE delete_multi (IN uuid CHAR(36))
|
|
|
|
DELETE v1, v2 FROM v1 INNER JOIN v2
|
|
|
|
ON v1.uuid = v2.uuid
|
|
|
|
WHERE v1.uuid = @uuid;
|
|
|
|
SET @uuid = UUID();
|
|
|
|
INSERT INTO v1 (uuid) VALUES (@uuid);
|
|
|
|
INSERT INTO v2 (uuid, date) VALUES (@uuid, '2009-09-09');
|
|
|
|
CALL delete_multi(@uuid);
|
|
|
|
DROP procedure delete_multi;
|
|
|
|
DROP table t1,t2;
|
|
|
|
DROP view v1,v2;
|
|
|
|
#
|
|
|
|
# Bug#41996 - multi-table delete crashes server (InnoDB table)
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
b BIGINT,
|
|
|
|
i INT,
|
|
|
|
KEY (b)
|
|
|
|
);
|
|
|
|
INSERT INTO t1 VALUES (2, 2);
|
|
|
|
DELETE t1 FROM t1 a, t1 WHERE a.i=t1.b;
|
|
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
|
|
# Bug#43448 - Server crashes on multi table delete with Innodb
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
id1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
t CHAR(12)
|
|
|
|
);
|
|
|
|
CREATE TABLE t2 (
|
|
|
|
id2 INT NOT NULL,
|
|
|
|
t CHAR(12)
|
|
|
|
);
|
|
|
|
CREATE TABLE t3(
|
|
|
|
id3 INT NOT NULL,
|
|
|
|
t CHAR(12),
|
|
|
|
INDEX(id3)
|
|
|
|
);
|
|
|
|
CREATE PROCEDURE insert_data ()
|
|
|
|
BEGIN
|
|
|
|
DECLARE i1 INT DEFAULT 20;
|
|
|
|
DECLARE i2 INT;
|
|
|
|
DECLARE i3 INT;
|
|
|
|
WHILE (i1 > 0) DO
|
|
|
|
INSERT INTO t1(t) VALUES (i1);
|
|
|
|
SET i2 = 2;
|
|
|
|
WHILE (i2 > 0) DO
|
|
|
|
INSERT INTO t2(id2, t) VALUES (i1, i2);
|
|
|
|
SET i3 = 2;
|
|
|
|
WHILE (i3 > 0) DO
|
|
|
|
INSERT INTO t3(id3, t) VALUES (i1, i2);
|
|
|
|
SET i3 = i3 -1;
|
|
|
|
END WHILE;
|
|
|
|
SET i2 = i2 -1;
|
|
|
|
END WHILE;
|
|
|
|
SET i1 = i1 - 1;
|
|
|
|
END WHILE;
|
|
|
|
END |
|
|
|
|
CALL insert_data();
|
|
|
|
SELECT COUNT(*) FROM t1 WHERE id1 > 10;
|
|
|
|
COUNT(*)
|
|
|
|
10
|
|
|
|
SELECT COUNT(*) FROM t2 WHERE id2 > 10;
|
|
|
|
COUNT(*)
|
|
|
|
20
|
|
|
|
SELECT COUNT(*) FROM t3 WHERE id3 > 10;
|
|
|
|
COUNT(*)
|
|
|
|
40
|
|
|
|
DELETE t1, t2, t3
|
|
|
|
FROM t1, t2, t3
|
|
|
|
WHERE t1.id1 = t2.id2 AND t2.id2 = t3.id3 AND t1.id1 > 3;
|
|
|
|
SELECT COUNT(*) FROM t1;
|
|
|
|
COUNT(*)
|
|
|
|
3
|
|
|
|
SELECT COUNT(*) FROM t2;
|
|
|
|
COUNT(*)
|
|
|
|
6
|
|
|
|
SELECT COUNT(*) FROM t3;
|
|
|
|
COUNT(*)
|
|
|
|
12
|
|
|
|
DROP PROCEDURE insert_data;
|
|
|
|
DROP TABLE t1, t2, t3;
|
Fix for lp:711565 "Index Condition Pushdown can make a thread hold MyISAM locks as well as be unKILLable for long time"
- In Maria/MyISAM: Release/re-acquire locks to give queries that wait on them a chance to make progress
- In Maria/MyISAM: Change from numeric constants to ICP_RES values.
- In Maria: Do check index condition in maria_rprev() (was lost in the merge/backport?)
- In Maria/MyISAM/XtraDB: Check if the query was killed, and return immediately if it was.
Added new storage engine error: HA_ERR_ABORTED_BY_USER, for handler to signal that it detected a kill of the query and aborted
Authors: Sergey Petrunia & Monty
include/my_base.h:
Added HA_ERR_ABORTED_BY_USER, for handler to signal that it detected a kill of the query and aborted
include/my_handler.h:
Added comment
mysql-test/r/myisam_icp.result:
Updated test
mysql-test/t/myisam_icp.test:
Drop used tables at start of test
Added test case that can help with manual testing of killing index condition pushdown query.
mysys/my_handler_errors.h:
Text for new storage engine error
sql/handler.cc:
If engine got HA_ERR_ABORTED_BY_USER, send kill message.
sql/multi_range_read.cc:
Return error code
storage/maria/ha_maria.cc:
Added ma_killed_in_mariadb() to detect kill.
Ensure that file->external_ref points to TABLE object.
storage/maria/ma_extra.c:
Dummy test-if-killed for standalone
storage/maria/ma_key.c:
If ma_check_index_cond() fails, set my_errno and info->cur_row.lastpos
storage/maria/ma_rkey.c:
Release/re-acquire locks to give queries that wait on them a chance to make progress
Check if the query was killed, and return immediately if it was
storage/maria/ma_rnext.c:
Check if the query was killed, and return immediately if it was
Added missing fast_ma_writeinfo(info)
storage/maria/ma_rnext_same.c:
Check if the query was killed, and return immediately if it was
Added missing fast_ma_writeinfo(info)
storage/maria/ma_rprev.c:
Check if the query was killed, and return immediately if it was
Added missing fast_ma_writeinfo(info) and ma_check_index_cond()
storage/maria/ma_search.c:
Give error message if we find a wrong key
storage/maria/ma_static.c:
Added pointer to test-if-killed function
storage/maria/maria_def.h:
New prototypes
storage/myisam/ha_myisam.cc:
Added mi_killed_in_mariadb()
Ensure that file->external_ref points to TABLE object.
storage/myisam/mi_extra.c:
Dummy test-if-killed for standalone
storage/myisam/mi_key.c:
If ma_check_index_cond() fails, set my_errno and info->lastpos
storage/myisam/mi_rkey.c:
Ensure that info->lastpos= HA_OFFSET_ERROR in case of error
Release/re-acquire locks to give queries that wait on them a chance to make progress
Check if the query was killed, and return immediately if it was
Reorder code to do less things in case of error.
Added missing fast_mi_writeinfo()
storage/myisam/mi_rnext.c:
Check if the query was killed, and return immediately if it was
Simplify old ICP code
Added missing fast_ma_writeinfo(info)
storage/myisam/mi_rnext_same.c:
Check if the query was killed, and return immediately if it was
Added missing fast_mi_writeinfo(info)
storage/myisam/mi_rprev.c:
Check if the query was killed, and return immediately if it was
Simplify error handling of ICP
Added missing fast_mi_writeinfo(info)
storage/myisam/mi_search.c:
Give error message if we find a wrong key
storage/myisam/mi_static.c:
Added pointer to test-if-killed function
storage/myisam/myisamdef.h:
New prototypes
storage/xtradb/handler/ha_innodb.cc:
Added DB_SEARCH_ABORTED_BY_USER and ha_innobase::is_thd_killed()
Check if the query was killed, and return immediately if it was
storage/xtradb/handler/ha_innodb.h:
Added prototype
storage/xtradb/include/db0err.h:
Added DB_SEARCH_ABORTED_BY_USER
storage/xtradb/include/row0mysql.h:
Added possible ICP errors
storage/xtradb/row/row0sel.c:
Use ICP errors instead of constants.
Detect if killed and return B_SEARCH_ABORTED_BY_USER
2011-02-18 16:43:59 +01:00
|
|
|
drop table if exists t0, t1, t1i, t1m;
|