From 3f619478f796eddbba6e39502fe941b285dd97b1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 20:00:34 +0200 Subject: Adding upstream version 1:10.11.6. Signed-off-by: Daniel Baumann --- mysql-test/suite/innodb/t/temporary_table.test | 638 +++++++++++++++++++++++++ 1 file changed, 638 insertions(+) create mode 100644 mysql-test/suite/innodb/t/temporary_table.test (limited to 'mysql-test/suite/innodb/t/temporary_table.test') diff --git a/mysql-test/suite/innodb/t/temporary_table.test b/mysql-test/suite/innodb/t/temporary_table.test new file mode 100644 index 00000000..b09ff7c7 --- /dev/null +++ b/mysql-test/suite/innodb/t/temporary_table.test @@ -0,0 +1,638 @@ +# +# 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 +--source include/innodb_page_size.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("Can't create/write to file '' \\\(Errcode: 20 \"Not a directory\"\\\)"); +call mtr.add_suppression("Can't create/write to file '/dev/null/.*/ib"); +call mtr.add_suppression("InnoDB: Unable to create temporary file"); +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: 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"); +call mtr.add_suppression("InnoDB: Unable to parse innodb_temp_data_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; + +SET GLOBAL innodb_encrypt_tables=DEFAULT; + +--echo # test various bad start-up parameters + +let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_ABORT = NOT FOUND; +let $check_no_innodb=SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' +AND support IN ('YES', 'DEFAULT', 'ENABLED'); + +# We cannot use include/restart_mysqld.inc in this particular test, +# because SHOW STATUS would fail due to unwritable (nonexistent) tmpdir. +--source include/shutdown_mysqld.inc +--exec echo "restart: --tmpdir=/dev/null/$MYSQL_TMP_DIR --skip-innodb-fast-shutdown" > $_expect_file_name +--enable_reconnect +--disable_result_log +--disable_query_log +let $counter= 5000; +let $mysql_errno= 9999; +while ($mysql_errno) +{ + --error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013,2026 + select 1; + + dec $counter; + if (!$counter) + { + --die Server failed to restart + } + --sleep 0.1 +} +--enable_query_log +--enable_result_log +--disable_reconnect +--let SEARCH_PATTERN= InnoDB: Unable to create temporary file +--source include/search_pattern_in_file.inc + +--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= +--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_UNSUPPORTED_COMPRESSED_TABLE +create temporary table t ( + i int) + engine = innodb row_format = compressed; +# +--error ER_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_TABLE +ALTER TABLE t1 ROW_FORMAT = COMPRESSED; +SHOW WARNINGS; + +--error ER_UNSUPPORTED_COMPRESSED_TABLE +ALTER TABLE t1 KEY_BLOCK_SIZE = 4; +SHOW WARNINGS; + +--error ER_UNSUPPORTED_COMPRESSED_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_UNSUPPORTED_COMPRESSED_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; +DROP TABLE t1; + +CREATE TEMPORARY TABLE t1(f1 INT, KEY(f1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES(NULL); +UPDATE t1 SET f1 = 0; +START TRANSACTION; +UPDATE t1 SET f1 = 4; +UPDATE t1 SET f1 = 0; +ROLLBACK; +SELECT * FROM t1; +DROP TABLE t1; + +delimiter //; +create procedure t1_proc() +begin +DECLARE var INT UNSIGNED; +CREATE TEMPORARY TABLE t1(f1 INT UNSIGNED, f2 INT UNSIGNED, KEY( f1, f2 ) )engine=innodb; +SET TRANSACTION ISOLATION LEVEL READ COMMITTED; +START TRANSACTION; +INSERT INTO t1 SET f1 = 1, f2 = 1; +UPDATE t1 SET f2 = 2; +SET var = ( SELECT 1 FROM t1 ); +DROP TABLE t1; +END// +delimiter ;// + +call t1_proc; +drop procedure t1_proc; + +--echo # +--echo # MDEV-15874 CREATE TABLE creates extra transaction +--echo # +call mtr.add_suppression("Warning 150 Create table `mysqld.1`.`t1` with foreign key constraint failed. Temporary tables can't have foreign key constraints.*"); +SET FOREIGN_KEY_CHECKS = 0; +--error ER_CANT_CREATE_TABLE +CREATE TEMPORARY TABLE t1(f1 INT NOT NULL, + FOREIGN KEY(f1) REFERENCES t0(f1))ENGINE=InnoDB; + +CREATE TABLE t (c INT) ENGINE=InnoDB; +INSERT INTO t VALUES(0); +CREATE TEMPORARY TABLE t2 (c INT) ENGINE=InnoDB; +START TRANSACTION READ ONLY; +INSERT INTO t2 SELECT * FROM t; +COMMIT; +DROP TABLE t, t2; + +CREATE TEMPORARY TABLE t (c INT,c2 INT) ENGINE=InnoDB; +START TRANSACTION READ ONLY; +--error ER_WRONG_VALUE_COUNT_ON_ROW +INSERT INTO t VALUES(0); +SAVEPOINT s; +INSERT INTO t VALUES(0,0); +COMMIT; +DROP TABLE t; + +CREATE TEMPORARY TABLE t (c INT,c2 INT) ENGINE=InnoDB; +START TRANSACTION READ ONLY; +--error ER_WRONG_VALUE_COUNT_ON_ROW +INSERT INTO t VALUES(0); +SAVEPOINT s; +INSERT INTO t VALUES(0,0); +ROLLBACK; +DROP TABLE t; + +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +START TRANSACTION READ ONLY; +UPDATE t1 SET a= 2; +COMMIT; +DROP TABLE t1; + +CREATE TEMPORARY TABLE t(c INT) ENGINE=InnoDB; +SET SESSION tx_read_only=TRUE; +LOCK TABLE test.t READ; +SELECT * FROM t; +INSERT INTO t VALUES(0xADC3); +SET SESSION tx_read_only=FALSE; +DROP TABLE t; + +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +START TRANSACTION READ ONLY; +UPDATE t1 SET a= 2; +COMMIT; +DROP TABLE t1; + +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY, b int) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1, 1); +START TRANSACTION READ ONLY; +UPDATE t1 SET b= 2; +COMMIT; +DROP TABLE t1; + +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY, b int, c varchar(255)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1, 1, repeat('a', 200)); +START TRANSACTION READ ONLY; +UPDATE t1 SET b= 2, c=repeat('a', 250); +COMMIT; +DROP TABLE t1; + +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +START TRANSACTION READ ONLY; +UPDATE t1 SET a= 2; +ROLLBACK; +DROP TABLE t1; + +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +START TRANSACTION READ ONLY; +DELETE FROM t1 WHERE a= 2; +COMMIT; +DROP TABLE t1; + +CREATE TEMPORARY TABLE tmp (a INT) ENGINE=InnoDB; +INSERT INTO tmp () VALUES (),(); +SET TX_READ_ONLY= 1; +INSERT INTO tmp SELECT * FROM tmp; +SET TX_READ_ONLY= 0; +DROP TABLE tmp; + +SET sql_mode=''; +SET GLOBAL tx_read_only=TRUE; +CREATE TEMPORARY TABLE t (c INT); +SET SESSION tx_read_only=DEFAULT; +INSERT INTO t VALUES(1); +INSERT INTO t SELECT * FROM t; +SET SESSION tx_read_only=FALSE; +SET GLOBAL tx_read_only=OFF; +DROP TABLE t; + +CREATE TEMPORARY TABLE t(a INT); +SET SESSION tx_read_only=ON; +LOCK TABLE t READ; +SELECT COUNT(*)FROM t; +INSERT INTO t VALUES (0); +SET SESSION tx_read_only=OFF; +DROP TABLE t; + +CREATE TEMPORARY TABLE t (a INT) ENGINE=InnoDB; +INSERT INTO t VALUES (1); +START TRANSACTION READ ONLY; +UPDATE t SET a = NULL; +ROLLBACK; +DROP TABLE t; + +--echo # +--echo # MDEV-29886 Assertion !index->table->is_temporary() failed +--echo # in trx_undo_prev_version_build upon CHECK +--echo # +CREATE TEMPORARY TABLE t (a INT, KEY(a)) ENGINE=InnoDB SELECT 1; +UPDATE t SET a=2; +CHECK TABLE t; +CHECK TABLE t EXTENDED; +DROP TEMPORARY TABLE t; + +--echo # +--echo # MDEV-29978 Corruption errors upon CHECK on temporary InnoDB table +--echo # + +CREATE TEMPORARY TABLE t (f INT UNIQUE) ENGINE=InnoDB; +INSERT INTO t (f) VALUES (1),(2); +CHECK TABLE t; +CHECK TABLE t EXTENDED; +DROP TEMPORARY TABLE t; + +--echo # End of 10.6 tests -- cgit v1.2.3