1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

Fix for bug #28837: MyISAM storage engine error (134) doing delete with

self-join

When doing DELETE with self-join on a MyISAM or MERGE table, it could
happen that a record being retrieved in join_read_next_same() has
already been deleted by previous iterations. That caused the engine's
index_next_same() method to fail with HA_ERR_RECORD_DELETED error and
the whole DELETE query to be aborted with an error.

Fixed by suppressing the HA_ERR_RECORD_DELETED error in
hy_myisam::index_next_same() and ha_myisammrg::index_next_same(). Since
HA_ERR_RECORD_DELETED can only be returned by MyISAM, there is no point
in filtering this error in the SQL layer.


mysql-test/r/merge.result:
  Added a test case for bug #28837.
mysql-test/r/myisam.result:
  Added a test case for bug #28837.
mysql-test/t/merge.test:
  Added a test case for bug #28837.
mysql-test/t/myisam.test:
  Added a test case for bug #28837.
sql/ha_myisam.cc:
  Skip HA_ERR_RECORD_DELETED silently when calling mi_rnext_same().
sql/ha_myisammrg.cc:
  Skip HA_ERR_RECORD_DELETED silently when calling mi_rnext_same().
This commit is contained in:
unknown
2007-11-26 18:58:54 +03:00
parent 1c1dd1f25c
commit 67bf39f241
6 changed files with 110 additions and 4 deletions

View File

@@ -876,4 +876,41 @@ CHECK TABLE tm1;
Table Op Msg_type Msg_text
test.tm1 check status OK
DROP TABLE tm1, t1, t2;
CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM;
CREATE TABLE t2 LIKE t1;
INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
INSERT INTO t1 SELECT * FROM t2;
INSERT INTO t1 SELECT * FROM t2;
CREATE TABLE t3 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MERGE
UNION(t1);
SELECT * FROM t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
id ref ref
4 4 5
4 4 5
4 4 5
4 4 5
SELECT * FROM t3;
id ref
1 3
2 1
3 2
4 5
4 4
1 3
2 1
3 2
4 5
4 4
DELETE FROM a USING t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
SELECT * FROM t3;
id ref
1 3
2 1
3 2
4 5
1 3
2 1
3 2
4 5
DROP TABLE t1, t2, t3;
End of 5.0 tests