mariadb/mysql-test/main/information_schema_temp_table.test
Anel Husakovic 80439e6918 MDEV-31618: Server crashes in process_i_s_table_temporary_tables/get_all_tables after alter in rename query
Any TMP_TABLE_SHARE must always have at least one TABLE instance.
So whenever a temporary TABLE that is marked for reopen is closed,
reopen it at once if its TMP_TABLE_SHARE list of tables becomes empty.
2023-08-11 19:36:22 +02:00

280 lines
8.6 KiB
Text

--echo #
--echo # MDEV-12459: The information_schema tables for getting temporary tables
--echo # info is missing, at least for innodb, there is no
--echo # INNODB_TEMP_TABLE_INFO
--echo #
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--source include/have_innodb.inc
--echo # -------------------------------
--echo # Test shadowing of a base table
--echo # -------------------------------
create database some_db;
use some_db;
--echo # Creating temporary table with the same name shadows the base table
--echo # in `show create` and by design, should not raise any warning
create table t(t int);
create temporary table t(t int);
show create table t;
select table_schema, table_name, temporary from information_schema.tables where table_name='t';
drop table t;
drop table t;
use test;
--echo # ------------------------
--echo # IS.tables tests
--echo # ------------------------
--echo # Create first temporary table
create temporary table test.t_temp(t int);
insert into t_temp values (1),(2), (3);
--echo # Show results
select table_schema, table_name, temporary from information_schema.tables where table_type='temporary';
--echo # Create the base table with the same name (both should be visible)
# Create the base table with the same name as temporary table.
create table test.t_temp(t int);
insert into t_temp values (-1),(-2);
--echo # Show results
select table_schema, table_name, temporary from information_schema.tables where table_type='temporary';
create database my_db;
--echo # Create the temporary table with the same name in new DB
create temporary table my_db.t_temp (t int);
insert into my_db.t_temp values (-2),(-1);
--echo # Show results
--horizontal_results
select table_schema, table_name, temporary from information_schema.tables where table_type='temporary'
order by table_schema desc, table_name desc, table_type desc;
connect (con1,localhost,root,,my_db,,);
--echo # Create the temporary table with the same name in new connection
create temporary table t_temp(t int);
insert into t_temp values (4),(5),(6), (7);
--echo # Show results
select table_schema, table_name, temporary from information_schema.tables where table_type='temporary'
order by table_schema desc, table_name desc, table_type desc;
connection default;
--echo # Show results in default connection
select table_schema, table_name, temporary from information_schema.tables where table_type='temporary'
order by table_schema desc, table_name desc, table_type desc;
--echo # Check shadowing and (no)warning with explicit referencing database
create table some_db.my_t (t int);
show warnings;
create temporary table some_db.my_t (t int);
show warnings;
--echo # Show results
select table_schema, table_name, temporary from information_schema.tables where table_type='temporary'
order by table_schema desc, table_name desc, table_type desc;
# Check with sequences
use test;
create table t1 (a int);
create sequence s1;
create temporary table t1 (b int);
create temporary sequence s1;
create temporary sequence s2;
select table_schema, table_name, table_type, temporary from information_schema.tables where table_schema = 'test'
order by table_schema desc, table_name desc, table_type desc;
drop table t1;
drop table t1;
drop table s1;
drop table s1;
drop table s2;
# First we are removing temporary table and after base table
drop table some_db.my_t;
drop table some_db.my_t;
disconnect con1;
# Drop both temporary and "real" table from test.
drop table test.t_temp;
drop table test.t_temp;
drop database my_db;
drop database some_db;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
--echo #
--echo # MDEV-28332: Alter on temporary table causes ER_TABLE_EXISTS_ERROR note
--echo #
create table t (a int);
create temporary table t (b int);
alter table t add c int;
# Cleanup
drop temporary table t;
drop table t;
--echo #
--echo # MDEV-28334: SHOW TABLE STATUS shows all temporary tables
--echo # ignoring database and conditions
--echo #
create temporary table test.tmp_in_test (a int);
create table test.base_in_test (t int);
# The base table with the same name as temporary table
create table test.tmp_in_test (t int);
# The temporary InnoDB table - CREATE TIME should be NULL, MDEV-28333
create temporary table test.tmp_innodb_in_test (a int) engine=InnoDB;
create database mysqltest;
use mysqltest;
# This should show tables from currently used DB
# no temporary tables created and empty result set should be returned
show table status;
# The same as before
show table status in mysqltest;
# The should show all ables from `test` DB
--replace_column 12 # 13 # 14 #
--horizontal_results
show table status in test;
# The same as before
--replace_column 12 # 13 # 14 #
--horizontal_results
show table status from test;
--echo # check that InnoDB temporary table
--echo # has a NULL value for `Create time` column (MDEV-28333)
select create_time from information_schema.tables where table_name='tmp_innodb_in_test';
# This shouldn't give any results
show table status like 'nonexisting';
# Cleanup
drop database mysqltest;
drop table test.base_in_test;
# We need first to drop temporary table that shadows the base table
drop table test.tmp_in_test;
drop table test.tmp_in_test;
--echo #
--echo # MDEV-28453: SHOW commands are inconsistent for temporary tables
--echo #
create database mysqltest;
use mysqltest;
create table t (a int, key(a)) engine=Aria;
create temporary table t (b int, key(b)) engine=MyISAM;
create table base_table(t int);
create temporary table tmp_table (b int, key(b));
create sequence s1;
create temporary sequence s1;
create temporary sequence s2;
# This should show all tables
show tables;
# This should show all tables with additional table_type
show full tables;
# This is already showing all tables (not related to bug)
--replace_column 12 # 13 # 14 #
show table status;
# This is showing temporary table as expected since it is shadowing base table
show columns in t;
# This is showing temporary table as expected since it is shadowing base table
show index in t;
# Cleanup
drop database mysqltest;
use test;
# many instances of the table temp table:
show full tables;
select * from tmp_innodb_in_test, tmp_innodb_in_test x;
show full tables;
drop temporary tables tmp_innodb_in_test;
# non-existent db
create temporary table foo.t1 (a int); # yup, that works
select table_schema, table_name from information_schema.tables where table_type='temporary';
drop temporary table foo.t1;
--echo #
--echo # MDEV-28351 Assertion `this->file->children_attached' failed in ha_myisammrg::info
--echo #
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
insert into t1 values (1);
CREATE TEMPORARY TABLE t2 (a INT) ENGINE=MERGE UNION=(t1);
CREATE TABLE t3 (a INT) ENGINE=MERGE UNION=(t1);
--sorted_result
--replace_column 10 X 11 X 12 X 13 X 15 X 16 X 22 X
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test';
DROP TABLE t1,t2,t3;
--echo #
--echo # MDEV-31618: Server crashes in
--echo # process_i_s_table_temporary_tables/get_all_tables
--echo #
CREATE TEMPORARY SEQUENCE seq1;
# Check show temp tables before alter
SHOW FULL TABLES;
SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_type='temporary sequence';
--error 4086
ALTER TABLE `seq1` CHANGE `cache_size` cache_size int;
# Check show temp tables after alter
SHOW FULL TABLES;
SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_type='temporary sequence';
CREATE OR REPLACE TEMPORARY SEQUENCE seq1;
# Check show temp tables after create/replace alter
SHOW FULL TABLES;
SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_type='temporary sequence';
DROP TABLE seq1;
DROP TABLE mysqltest.s1;
DROP TABLE mysqltest.s2;
--echo #
--echo # MDEV-31618: Server crashes in
--echo # process_i_s_table_temporary_tables/get_all_tables after alter in rename
--echo #
# Check on temporary tables
CREATE table seq1 (a bigint, b int);
CREATE TEMPORARY TABLE tmp LIKE seq1;
INSERT tmp SELECT * FROM seq1;
ALTER TABLE tmp RENAME TO seq1;
--error 4086,1060
ALTER TABLE seq1 CHANGE a b int ;
--error 1050
RENAME TABLE seq1 TO seq1;
show full tables;
drop table seq1;
drop table seq1;
# Check on sequences
CREATE SEQUENCE seq2;
CREATE TEMPORARY sequence tmp;
show full tables;
ALTER table `tmp` RENAME TO seq1;
show full tables;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
ALTER TABLE `seq1` CHANGE `cache_size` cache_size int ;
show full tables;
--error ER_TABLE_EXISTS_ERROR
RENAME TABLE seq1 TO seq1;
show full tables;
RENAME TABLE seq1 TO seq3;
show full tables;
drop table seq2;
show full tables;
drop table seq3;
show full tables;