mirror of
https://github.com/MariaDB/server.git
synced 2025-11-12 10:22:39 +03:00
This is a regression due to MDEV-17816. When creating a table fails, we must roll back the dictionary transaction. Because the rollback may rename tables, and because InnoDB lacks proper undo logging for CREATE operations, we must drop the incompletely created table before rolling back the transaction, which could include a RENAME operation. But, we must not blindly drop the table by name; after all, the operation could have failed because another table by the same name already existed. create_table_info_t::m_drop_before_rollback: A flag that is set if the table needs to be dropped before transaction rollback. create_table_info_t::create_table(): Remove some duplicated error handling. ha_innobase::create(): On error, only drop the table if it was actually created.
56 lines
1.7 KiB
Plaintext
56 lines
1.7 KiB
Plaintext
--source include/have_innodb.inc
|
|
|
|
CREATE TABLE t (a SERIAL) ENGINE=InnoDB;
|
|
|
|
connect (dml,localhost,root);
|
|
# At the end of this statement, close_thread_tables()
|
|
# should add the open table handle to the table definition cache (tdc).
|
|
select * from t;
|
|
|
|
connection default;
|
|
# This should purge the handle from the tdc;
|
|
# otherwise ha_innobase::truncate() would hang,
|
|
# waiting for the reference count to drop to 0.
|
|
TRUNCATE TABLE t;
|
|
disconnect dml;
|
|
|
|
DROP TABLE t;
|
|
|
|
--echo #
|
|
--echo # MDEV-17816 Crash in TRUNCATE TABLE when table creation fails
|
|
--echo #
|
|
CREATE TABLE t1 (c VARCHAR(1024), KEY(c)) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
|
INSERT INTO t1 SET c='character';
|
|
# FIXME: MDEV-17833 ALTER TABLE is not enforcing prefix index size limit
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
--error ER_INDEX_COLUMN_TOO_LONG
|
|
TRUNCATE TABLE t1;
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-17831 TRUNCATE TABLE removes ROW_FORMAT=COMPRESSED
|
|
--echo #
|
|
CREATE TABLE t1 (a SERIAL) ENGINE=InnoDB KEY_BLOCK_SIZE=4;
|
|
TRUNCATE TABLE t1;
|
|
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
|
|
SHOW TABLE STATUS;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-17859 Operating system errors in file operations
|
|
--echo # after failed CREATE
|
|
--echo #
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1);
|
|
call mtr.add_suppression("InnoDB: (Operating system )?[Ee]rror number");
|
|
call mtr.add_suppression("InnoDB: Cannot create file '.*t1\\.ibd");
|
|
FLUSH TABLES;
|
|
--move_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/hidden.frm
|
|
--error ER_TABLESPACE_EXISTS
|
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
|
--move_file $MYSQLD_DATADIR/test/hidden.frm $MYSQLD_DATADIR/test/t1.frm
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|