mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
Before we create an InnoDB data file, we must have persistently started a DDL transaction and written a record in SYS_INDEXES as well as a FILE_CREATE record for creating the file. In that way, if InnoDB is killed before the DDL transaction is committed, the rollback will be able to delete the file in dict_drop_index_tree(). dict_build_table_def_step(): Do not create the tablespace. At this point, we have not written any log, not even for inserting the SYS_TABLES record. dict_create_sys_indexes_tuple(): Relax an assertion to tolerate a missing tablespace before the first index has been created in dict_create_index_step(). dict_build_index_def_step(): Relax the dict_table_open_on_name() parameter, because no tablespace may be available yet. tab_create_graph_create(), row_create_table_for_mysql(), tab_node_t: Remove key_id, mode. ind_create_graph_create(), row_create_index_for_mysql(), ind_node_t: Add key_id, mode. dict_create_index_space(): New function, to create the tablespace during clustered index creation. dict_create_index_step(): After the SYS_INDEXES record has been written, invoke dict_create_index_space() to create the tablespace if needed. fil_ibd_create(): Before creating the file, persistently write a FILE_CREATE record. This will also ensure that an incomplete DDL transaction will be recovered. After creating the file, invoke fsp_header_init().
70 lines
2.0 KiB
Plaintext
70 lines
2.0 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-17831 TRUNCATE TABLE removes ROW_FORMAT=COMPRESSED
|
|
--echo #
|
|
--disable_query_log
|
|
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
|
|
SET GLOBAL innodb_read_only_compressed=OFF;
|
|
--enable_query_log
|
|
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;
|
|
--disable_query_log
|
|
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
|
|
--enable_query_log
|
|
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_TABLE_EXISTS_ERROR
|
|
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;
|
|
|
|
--echo #
|
|
--echo # MDEV-17885 TRUNCATE on temporary table causes ER_GET_ERRNO
|
|
--echo #
|
|
CREATE TEMPORARY TABLE t1 (a INT) ENCRYPTED=NO ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(1);
|
|
TRUNCATE t1;
|
|
SELECT * FROM t1;
|
|
DROP TEMPORARY TABLE t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-23705 Assertion 'table->data_dir_path || !space'
|
|
--echo #
|
|
CREATE TABLE t(c INT) ENGINE=InnoDB;
|
|
ALTER TABLE t DISCARD TABLESPACE;
|
|
RENAME TABLE t TO u;
|
|
TRUNCATE u;
|
|
TRUNCATE u;
|
|
DROP TABLE u;
|