diff options
author | unknown <kaa@polly.(none)> | 2007-11-26 18:58:54 +0300 |
---|---|---|
committer | unknown <kaa@polly.(none)> | 2007-11-26 18:58:54 +0300 |
commit | 67bf39f241bb1742dfa221218ff3d50842f58490 (patch) | |
tree | 5a1e8fe6a1267a063b18c6f5e387e7b9ede453bb /mysql-test/r/merge.result | |
parent | 1c1dd1f25c42081c7bf72042ccfcb83896298aab (diff) | |
download | mariadb-git-67bf39f241bb1742dfa221218ff3d50842f58490.tar.gz |
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().
Diffstat (limited to 'mysql-test/r/merge.result')
-rw-r--r-- | mysql-test/r/merge.result | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result index 42669eeb66f..7e8a0df6908 100644 --- a/mysql-test/r/merge.result +++ b/mysql-test/r/merge.result @@ -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 |