mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MDEV-10216: Assertion `strcmp(share->unique_file_name,filename) ||
.. share->last_version' failed in myisam/mi_open.c:67: test_if_reopen During the RENAME operation since the renamed temporary table is also opened and added to myisam_open_list/maria_open_list, resetting the last_version at the end of operation (HA_EXTRA_PREPARE_FOR_RENAME) will cause an assertion failure when a subsequent query tries to open an additional temporary table instance and thus attempts to reuse it from the open table list. This commit fixes the issue by skipping flush/close operations executed toward the end of ALTER for temporary tables. It also enables a shortcut for simple ALTERs (like rename, disable/enable keys) on temporary tables. As safety checks, added some assertions at code points that should not be hit for temporary tables.
This commit is contained in:
@@ -164,5 +164,29 @@ SELECT COUNT(*)=4 FROM t6;
|
||||
COUNT(*)=4
|
||||
1
|
||||
DROP TABLE t5, t6;
|
||||
#
|
||||
# MDEV-10216: Assertion `strcmp(share->unique_file_name,filename) ||
|
||||
# share->last_version' failed in myisam/mi_open.c:67: test_if_reopen
|
||||
#
|
||||
CREATE TEMPORARY TABLE t7 (i INT) ENGINE=MYISAM;
|
||||
INSERT INTO t7 VALUES(1);
|
||||
ALTER TABLE t7 RENAME TO t;
|
||||
SELECT * FROM t a, t b;
|
||||
i i
|
||||
1 1
|
||||
DROP TABLE t;
|
||||
CREATE TEMPORARY TABLE t7 (i INT) ENGINE=ARIA;
|
||||
INSERT INTO t7 VALUES(1);
|
||||
ALTER TABLE t7 RENAME TO t;
|
||||
SELECT * FROM t a, t b;
|
||||
i i
|
||||
1 1
|
||||
DROP TABLE t;
|
||||
CREATE TEMPORARY TABLE t8 (i INT) ENGINE=ARIA;
|
||||
ALTER TABLE t8 rename to t;
|
||||
SELECT (SELECT 1 FROM t a1, t a2 ) AS f1, ( SELECT 2 FROM t a3 ) AS f2 FROM DUAL;
|
||||
f1 f2
|
||||
NULL NULL
|
||||
DROP TABLE t;
|
||||
# Cleanup
|
||||
DROP DATABASE temp_db;
|
||||
|
||||
Reference in New Issue
Block a user