# # InnoDB temporary table test case, including # WL#6560: InnoDB: separate tablespace for innodb-temp-tables. # WL#7899: InnoDB: Map compressed temporary tables to uncompressed # --source include/have_innodb.inc # Embedded server does not restart of server --source include/not_embedded.inc --source include/no_valgrind_without_big.inc --disable_query_log call mtr.add_suppression("last file in setting innodb_temp_data_file_path"); call mtr.add_suppression("The table 't1' is full"); call mtr.add_suppression("Plugin 'InnoDB' init function returned error"); call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); call mtr.add_suppression("InnoDB: Tablespace doesn't support raw devices"); call mtr.add_suppression("InnoDB: The innodb_temporary data file 'ibtmp1' must be at least"); call mtr.add_suppression("InnoDB: Plugin initialization aborted"); call mtr.add_suppression("innodb_temporary and innodb_system file names seem to be the same"); call mtr.add_suppression("Could not create the shared innodb_temporary"); call mtr.add_suppression("InnoDB: syntax error in file path"); --enable_query_log let $MYSQL_TMP_DIR = `select @@tmpdir`; let $MYSQL_DATA_DIR = `select @@datadir`; --echo # files in MYSQL_DATA_DIR --list_files $MYSQL_DATA_DIR/ ibtmp* create temporary table t1 (i int, f float, c char(100)) engine=innodb; insert into t1 values (100, 1.1, 'pune'); insert into t1 values (99, 1.2, 'mumbai'); insert into t1 values (98, 1.3, 'jaipur'); insert into t1 values (97, 1.4, 'delhi'); insert into t1 values (96, 1.5, 'ahmedabad'); select * from t1; select * from t1 where i = 98; select * from t1 where i < 100; explain select * from t1 where f > 1.29999; alter table t1 add index sec_index(f); explain select * from t1 where f > 1.29999; select * from t1 where f > 1.29999; explain select * from t1 where i = 100; alter table t1 add unique index pri_index(i); explain select * from t1 where i = 100; select * from t1 where i = 100; delete from t1 where i < 97; select * from t1; insert into t1 values (96, 1.5, 'kolkata'); select * from t1; update t1 set f = 1.44 where c = 'delhi'; select * from t1; truncate table t1; insert into t1 values (100, 1.1, 'pune'); insert into t1 values (99, 1.2, 'mumbai'); insert into t1 values (98, 1.3, 'jaipur'); insert into t1 values (97, 1.4, 'delhi'); insert into t1 values (96, 1.5, 'ahmedabad'); select * from t1; --error ER_CANNOT_DISCARD_TEMPORARY_TABLE alter table t1 discard tablespace; --error ER_CANNOT_DISCARD_TEMPORARY_TABLE alter table t1 import tablespace; drop temporary table t1; create temporary table t1 (keyc int, c1 char(100), c2 char(100), primary key(keyc)) engine = innodb; delimiter |; CREATE PROCEDURE populate_t1() BEGIN DECLARE i INT DEFAULT 1; while (i <= 20000) DO insert into t1 values (i, 'a', 'b'); SET i = i + 1; END WHILE; END| delimiter ;| set autocommit=0; select count(*) from t1; call populate_t1(); select count(*) from t1; select * from t1 limit 10; set autocommit=1; truncate table t1; select * from t1; # --echo # test condition of full-temp-tablespace --let $restart_parameters= --innodb_temp_data_file_path=ibtmp1:12M --source include/restart_mysqld.inc create temporary table t1 (keyc int, c1 char(100), c2 char(100), primary key(keyc)) engine = innodb; begin; --error ER_RECORD_FILE_FULL call populate_t1(); drop procedure populate_t1; --echo # test read-only mode --let $restart_parameters = --innodb-read-only --source include/restart_mysqld.inc --echo # files in MYSQL_DATA_DIR --list_files $MYSQL_DATA_DIR/ ibtmp* --error ER_NO_SUCH_TABLE select * from t1; show tables; --error ER_CANT_CREATE_TABLE create temporary table t1 (keyc int, c1 char(100), c2 char(100)) engine = innodb; --echo # test various bad start-up parameters let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err; let SEARCH_RANGE = -50000; let SEARCH_ABORT = NOT FOUND; let $check_no_innodb=SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED'); --let $restart_parameters= --innodb_data_file_path=ibdata1:12M:autoextend --innodb_temp_data_file_path=ibdata1:12M:autoextend --source include/restart_mysqld.inc --let SEARCH_PATTERN = innodb_temporary and innodb_system file names seem to be the same --source include/search_pattern_in_file.inc eval $check_no_innodb; --let $restart_parameters= --innodb_temp_data_file_path=foobar:3Gnewraw --source include/restart_mysqld.inc --let SEARCH_PATTERN = support raw device --source include/search_pattern_in_file.inc eval $check_no_innodb; --let $restart_parameters= --innodb_temp_data_file_path=barbar:3Graw --source include/restart_mysqld.inc --source include/search_pattern_in_file.inc eval $check_no_innodb; --let $restart_parameters= --innodb_temp_data_file_path=ibtmp1:2M:autoextend --source include/restart_mysqld.inc --let SEARCH_PATTERN = The innodb_temporary data file 'ibtmp1' must be at least --source include/search_pattern_in_file.inc eval $check_no_innodb; --let $restart_parameters= --innodb_temp_data_file_path= --source include/restart_mysqld.inc --let SEARCH_PATTERN = InnoDB: syntax error in file path --source include/search_pattern_in_file.inc eval $check_no_innodb; --let $restart_parameters= --source include/restart_mysqld.inc --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE create temporary table t ( i int) engine = innodb row_format = compressed; # --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE create temporary table t ( i int) engine = innodb row_format = compressed key_block_size = 8; # create temporary table t ( i int) engine = innodb row_format = dynamic; show warnings; drop table t; # create temporary table t ( i int) engine = innodb row_format = dynamic; show warnings; drop table t; set innodb_strict_mode = off; # create temporary table t ( i int) engine = innodb row_format = compressed key_block_size = 8; show warnings; set innodb_strict_mode = default; # drop table t; --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE create temporary table t ( i int) engine = innodb row_format = compressed; --echo #files in MYSQL_TMP_DIR, expecting only default temporary tablespace file --list_files $MYSQL_TMP_DIR/ *.ibd --list_files $MYSQL_DATA_DIR/ ibtmp* # create temporary table t ( i int) engine = innodb row_format = dynamic; show warnings; drop table t; # create temporary table t ( i int) engine = innodb row_format = dynamic; show warnings; drop table t; set innodb_strict_mode = off; # create temporary table t ( i int) engine = innodb row_format = dynamic key_block_size = 4; show warnings; drop table t; # create temporary table t ( i int) engine = innodb row_format = compact; show warnings; drop table t; # create temporary table t ( i int) engine = innodb key_block_size = 4; show warnings; drop table t; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB KEY_BLOCK_SIZE = 4; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = REDUNDANT; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = COMPACT; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB KEY_BLOCK_SIZE = 4; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 8; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = DYNAMIC KEY_BLOCK_SIZE = 8; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = DYNAMIC; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # # Test alter table for temporary tables with row format = compressed or # key_block_size CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY ) ENGINE = InnoDB ROW_FORMAT = REDUNDANT; ALTER TABLE t1 ROW_FORMAT = COMPRESSED; SHOW WARNINGS; SHOW CREATE TABLE t1; ALTER TABLE t1 KEY_BLOCK_SIZE = 4; SHOW WARNINGS; SHOW CREATE TABLE t1; ALTER TABLE t1 KEY_BLOCK_SIZE = 4 ROW_FORMAT = COMPRESSED; SHOW WARNINGS; SHOW CREATE TABLE t1; ALTER TABLE t1 ROW_FORMAT = DYNAMIC KEY_BLOCK_SIZE = 4; SHOW WARNINGS; SHOW CREATE TABLE t1; ALTER TABLE t1 ROW_FORMAT = DYNAMIC; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # Set innodb_strict_mode=ON and test compressed temporary tables again. set innodb_strict_mode = ON; --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB KEY_BLOCK_SIZE = 4; SHOW WARNINGS; # --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB KEY_BLOCK_SIZE = 4, ROW_FORMAT = COMPACT; SHOW WARNINGS; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = REDUNDANT; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB KEY_BLOCK_SIZE = 4; SHOW WARNINGS; # --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED; SHOW WARNINGS; # --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 8; SHOW WARNINGS; # --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 7; SHOW WARNINGS; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY, c CHAR(10) NOT NULL ) ENGINE = InnoDB ROW_FORMAT = DYNAMIC; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; # CREATE TEMPORARY TABLE t1 ( i INT NOT NULL PRIMARY KEY ) ENGINE = InnoDB ROW_FORMAT = REDUNDANT; --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE ALTER TABLE t1 ROW_FORMAT = COMPRESSED; SHOW WARNINGS; --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE ALTER TABLE t1 KEY_BLOCK_SIZE = 4; SHOW WARNINGS; --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE ALTER TABLE t1 ROW_FORMAT = DYNAMIC KEY_BLOCK_SIZE = 4; SHOW WARNINGS; ALTER TABLE t1 ROW_FORMAT = DYNAMIC; # # Some checking for turning innodb_strict_mode ON and OFF. set innodb_strict_mode = OFF; ALTER TABLE t1 ROW_FORMAT = COMPRESSED; SHOW WARNINGS; set innodb_strict_mode = ON; ALTER TABLE t1 ROW_FORMAT = DYNAMIC; SHOW CREATE TABLE t1; set innodb_strict_mode = OFF; ALTER TABLE t1 ROW_FORMAT = COMPRESSED; SHOW WARNINGS; ALTER TABLE t1 KEY_BLOCK_SIZE = 8; SHOW WARNINGS; set innodb_strict_mode = ON; --error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE ALTER TABLE t1 ADD COLUMN j INT; SHOW WARNINGS; SHOW CREATE TABLE t1; set innodb_strict_mode = OFF; ALTER TABLE t1 KEY_BLOCK_SIZE = 0; SHOW CREATE TABLE t1; ALTER TABLE t1 ROW_FORMAT = DYNAMIC; set innodb_strict_mode = ON; ALTER TABLE t1 ADD COLUMN j INT; SHOW CREATE TABLE t1;