mirror of
https://github.com/MariaDB/server.git
synced 2025-08-30 11:22:14 +03:00
Let us introduce the parameter innodb_read_only_compressed that is ON by default, making any ROW_FORMAT=COMPRESSED tables read-only. I developed the ROW_FORMAT=COMPRESSED format based on Heikki Tuuri's rough design between 2005 and 2008. It might have been a good idea back then, but no proper benchmarks were ever run to validate the design or the implementation. The format has been more or less obsolete for years. It limits innodb_page_size to 16384 bytes (the default), and instant ALTER TABLE is not supported. This is the first step towards deprecating and removing write support for ROW_FORMAT=COMPRESSED tables.
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_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;
|
|
|
|
--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;
|