mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
702 lines
18 KiB
Text
702 lines
18 KiB
Text
#
|
|
# test basic creation of temporary tables together with normal table
|
|
#
|
|
create table t1 (a int);
|
|
create temporary table t1 AS SELECT 1;
|
|
create temporary table t1 AS SELECT 1;
|
|
ERROR 42S01: Table 't1' already exists
|
|
create temporary table t1 (a int);
|
|
ERROR 42S01: Table 't1' already exists
|
|
drop temporary table t1;
|
|
drop table t1;
|
|
create temporary table t1 AS SELECT 1;
|
|
create temporary table t1 AS SELECT 1;
|
|
ERROR 42S01: Table 't1' already exists
|
|
create temporary table t1 (a int);
|
|
ERROR 42S01: Table 't1' already exists
|
|
drop temporary table t1;
|
|
#
|
|
# Test with rename
|
|
#
|
|
CREATE TABLE t1 (c int not null, d char (10) not null);
|
|
insert into t1 values(1,""),(2,"a"),(3,"b");
|
|
CREATE TEMPORARY TABLE t1 (a int not null, b char (10) not null);
|
|
insert into t1 values(4,"e"),(5,"f"),(6,"g");
|
|
alter table t1 rename t2;
|
|
select * from t1;
|
|
c d
|
|
1
|
|
2 a
|
|
3 b
|
|
select * from t2;
|
|
a b
|
|
4 e
|
|
5 f
|
|
6 g
|
|
CREATE TABLE t2 (x int not null, y int not null);
|
|
alter table t2 rename t1;
|
|
select * from t1;
|
|
a b
|
|
4 e
|
|
5 f
|
|
6 g
|
|
create TEMPORARY TABLE t2 engine=heap select * from t1;
|
|
create TEMPORARY TABLE IF NOT EXISTS t2 (a int) engine=heap;
|
|
Warnings:
|
|
Note 1050 Table 't2' already exists
|
|
CREATE TEMPORARY TABLE t1 (a int not null, b char (10) not null);
|
|
ERROR 42S01: Table 't1' already exists
|
|
ALTER TABLE t1 RENAME t2;
|
|
ERROR 42S01: Table 't2' already exists
|
|
select * from t2;
|
|
a b
|
|
4 e
|
|
5 f
|
|
6 g
|
|
alter table t2 add primary key (a,b);
|
|
drop table t1,t2;
|
|
select * from t1;
|
|
c d
|
|
1
|
|
2 a
|
|
3 b
|
|
drop table t2;
|
|
create temporary table t1 select *,2 as "e" from t1;
|
|
select * from t1;
|
|
c d e
|
|
1 2
|
|
2 a 2
|
|
3 b 2
|
|
drop table t1;
|
|
drop table t1;
|
|
CREATE TABLE t1 (pkCrash INTEGER PRIMARY KEY,strCrash VARCHAR(255));
|
|
INSERT INTO t1 ( pkCrash, strCrash ) VALUES ( 1, '1');
|
|
SELECT CONCAT_WS(pkCrash, strCrash) FROM t1;
|
|
CONCAT_WS(pkCrash, strCrash)
|
|
1
|
|
drop table t1;
|
|
create temporary table t1 select 1 as 'x';
|
|
drop table t1;
|
|
CREATE TABLE t1 (x INT);
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
CREATE TEMPORARY TABLE tmp SELECT *, NULL FROM t1;
|
|
drop table t1;
|
|
create temporary table t1 (id int(10) not null unique);
|
|
create temporary table t2 (id int(10) not null primary key,
|
|
val int(10) not null);
|
|
insert into t1 values (1),(2),(4);
|
|
insert into t2 values (1,1),(2,1),(3,1),(4,2);
|
|
select one.id, two.val, elt(two.val,'one','two') from t1 one, t2 two where two.id=one.id order by one.id;
|
|
id val elt(two.val,'one','two')
|
|
1 1 one
|
|
2 1 one
|
|
4 2 two
|
|
drop table t1,t2;
|
|
create temporary table t1 (a int not null);
|
|
insert into t1 values (1),(1);
|
|
alter table t1 add primary key (a);
|
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
|
drop table t1;
|
|
CREATE TABLE t1 (
|
|
d datetime default NULL
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t1 VALUES ('2002-10-24 14:50:32'),('2002-10-24 14:50:33'),('2002-10-24 14:50:34'),('2002-10-24 14:50:34'),('2002-10-24 14:50:34'),('2002-10-24 14:50:35'),('2002-10-24 14:50:35'),('2002-10-24 14:50:35'),('2002-10-24 14:50:35'),('2002-10-24 14:50:36'),('2002-10-24 14:50:36'),('2002-10-24 14:50:36'),('2002-10-24 14:50:36'),('2002-10-24 14:50:37'),('2002-10-24 14:50:37'),('2002-10-24 14:50:37'),('2002-10-24 14:50:37'),('2002-10-24 14:50:38'),('2002-10-24 14:50:38'),('2002-10-24 14:50:38'),('2002-10-24 14:50:39'),('2002-10-24 14:50:39'),('2002-10-24 14:50:39'),('2002-10-24 14:50:39'),('2002-10-24 14:50:40'),('2002-10-24 14:50:40'),('2002-10-24 14:50:40');
|
|
flush status;
|
|
select * from t1 group by d;
|
|
d
|
|
2002-10-24 14:50:32
|
|
2002-10-24 14:50:33
|
|
2002-10-24 14:50:34
|
|
2002-10-24 14:50:35
|
|
2002-10-24 14:50:36
|
|
2002-10-24 14:50:37
|
|
2002-10-24 14:50:38
|
|
2002-10-24 14:50:39
|
|
2002-10-24 14:50:40
|
|
show status like "created_tmp%tables";
|
|
Variable_name Value
|
|
Created_tmp_disk_tables 0
|
|
Created_tmp_tables 1
|
|
drop table t1;
|
|
create temporary table v1 as select 'This is temp. table' A;
|
|
create view v1 as select 'This is view' A;
|
|
select * from v1;
|
|
A
|
|
This is temp. table
|
|
show create table v1;
|
|
Table Create Table
|
|
v1 CREATE TEMPORARY TABLE `v1` (
|
|
`A` varchar(19) NOT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
|
show create view v1;
|
|
View Create View character_set_client collation_connection
|
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'This is view' AS `A` latin1 latin1_swedish_ci
|
|
drop view v1;
|
|
select * from v1;
|
|
A
|
|
This is temp. table
|
|
create view v1 as select 'This is view again' A;
|
|
select * from v1;
|
|
A
|
|
This is temp. table
|
|
drop table v1;
|
|
select * from v1;
|
|
A
|
|
This is view again
|
|
drop view v1;
|
|
create table t1 (a int, b int, index(a), index(b));
|
|
create table t2 (c int auto_increment, d varchar(255), primary key (c));
|
|
insert into t1 values (3,1),(3,2);
|
|
insert into t2 values (NULL, 'foo'), (NULL, 'bar');
|
|
select d, c from t1 left join t2 on b = c where a = 3 order by d;
|
|
d c
|
|
bar 2
|
|
foo 1
|
|
drop table t1, t2;
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (i INT);
|
|
LOCK TABLE t1 WRITE;
|
|
connect conn1, localhost, root,,;
|
|
CREATE TEMPORARY TABLE t1 (i INT);
|
|
The following command should not block
|
|
DROP TEMPORARY TABLE t1;
|
|
disconnect conn1;
|
|
connection default;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (i INT);
|
|
CREATE TEMPORARY TABLE t2 (i INT);
|
|
DROP TEMPORARY TABLE t2, t1;
|
|
ERROR 42S02: Unknown table 'test.t1'
|
|
SELECT * FROM t2;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist
|
|
SELECT * FROM t1;
|
|
i
|
|
DROP TABLE t1;
|
|
End of 4.1 tests.
|
|
CREATE TABLE t1 ( c FLOAT( 20, 14 ) );
|
|
INSERT INTO t1 VALUES( 12139 );
|
|
CREATE TABLE t2 ( c FLOAT(30,18) );
|
|
INSERT INTO t2 VALUES( 123456 );
|
|
SELECT AVG( c ) FROM t1 UNION SELECT 1;
|
|
AVG( c )
|
|
12139.000000000000000000
|
|
1.000000000000000000
|
|
SELECT 1 UNION SELECT AVG( c ) FROM t1;
|
|
1
|
|
1.000000000000000000
|
|
12139.000000000000000000
|
|
SELECT 1 UNION SELECT * FROM t2 UNION SELECT 1;
|
|
1
|
|
1.000000000000000000
|
|
123456.000000000000000000
|
|
SELECT c/1 FROM t1 UNION SELECT 1;
|
|
c/1
|
|
12139.000000000000000000
|
|
1.000000000000000000
|
|
DROP TABLE t1, t2;
|
|
create temporary table t1 (a int);
|
|
insert into t1 values (4711);
|
|
select * from t1;
|
|
a
|
|
4711
|
|
truncate t1;
|
|
insert into t1 values (42);
|
|
select * from t1;
|
|
a
|
|
42
|
|
drop table t1;
|
|
CREATE TEMPORARY TABLE t1(a INT, b VARCHAR(20));
|
|
INSERT INTO t1 VALUES(1, 'val1'), (2, 'val2'), (3, 'val3');
|
|
DELETE FROM t1 WHERE a=1;
|
|
SELECT count(*) FROM t1;
|
|
count(*)
|
|
2
|
|
DELETE FROM t1;
|
|
SELECT * FROM t1;
|
|
a b
|
|
DROP TABLE t1;
|
|
DROP TABLE IF EXISTS t1,t2;
|
|
DROP FUNCTION IF EXISTS f1;
|
|
CREATE TEMPORARY TABLE t1 (a INT);
|
|
CREATE TEMPORARY TABLE t2 LIKE t1;
|
|
CREATE FUNCTION f1() RETURNS INT
|
|
BEGIN
|
|
return 1;
|
|
END|
|
|
INSERT INTO t2 SELECT * FROM t1;
|
|
INSERT INTO t1 SELECT f1();
|
|
CREATE TABLE t3 SELECT * FROM t1;
|
|
INSERT INTO t1 SELECT f1();
|
|
UPDATE t1,t2 SET t1.a = t2.a;
|
|
INSERT INTO t2 SELECT f1();
|
|
DROP TABLE t1,t2,t3;
|
|
DROP FUNCTION f1;
|
|
#
|
|
# Bug #48067: A temp table with the same name as an existing table,
|
|
# makes drop database fail.
|
|
#
|
|
DROP TEMPORARY TABLE IF EXISTS bug48067.t1;
|
|
DROP DATABASE IF EXISTS bug48067;
|
|
CREATE DATABASE bug48067;
|
|
CREATE TABLE bug48067.t1 (c1 int);
|
|
INSERT INTO bug48067.t1 values (1);
|
|
CREATE TEMPORARY TABLE bug48067.t1 (c1 int);
|
|
DROP DATABASE bug48067;
|
|
DROP TEMPORARY table bug48067.t1;
|
|
End of 5.1 tests
|
|
#
|
|
# Test that admin statements work for temporary tables.
|
|
#
|
|
DROP TABLE IF EXISTS t1,t2;
|
|
CREATE TEMPORARY TABLE t1(a INT);
|
|
CREATE TEMPORARY TABLE t2(b INT);
|
|
CREATE TEMPORARY TABLE t3(c INT);
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t2 VALUES (11), (12), (13);
|
|
INSERT INTO t3 VALUES (101), (102), (103);
|
|
ANALYZE TABLE t1, t2, t3;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
test.t2 analyze status OK
|
|
test.t3 analyze status OK
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t2 VALUES (11), (12), (13);
|
|
INSERT INTO t3 VALUES (101), (102), (103);
|
|
CHECK TABLE t1, t2, t3;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
test.t2 check status OK
|
|
test.t3 check status OK
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t2 VALUES (11), (12), (13);
|
|
INSERT INTO t3 VALUES (101), (102), (103);
|
|
CHECKSUM TABLE t1, t2, t3;
|
|
Table Checksum
|
|
test.t1 xxx
|
|
test.t2 xxx
|
|
test.t3 xxx
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t2 VALUES (11), (12), (13);
|
|
INSERT INTO t3 VALUES (101), (102), (103);
|
|
OPTIMIZE TABLE t1, t2, t3;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize status OK
|
|
test.t2 optimize status OK
|
|
test.t3 optimize status OK
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t2 VALUES (11), (12), (13);
|
|
INSERT INTO t3 VALUES (101), (102), (103);
|
|
REPAIR TABLE t1, t2, t3;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair status OK
|
|
test.t2 repair status OK
|
|
test.t3 repair status OK
|
|
DROP TABLES t1, t2, t3;
|
|
CREATE TEMPORARY TABLE t1 (a int);
|
|
RENAME TABLE t1 TO t2;
|
|
DROP TABLE t2;
|
|
create temporary temporary table t1 (a int);
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'temporary table t1 (a int)' at line 1
|
|
flush status;
|
|
create table t1 (a int);
|
|
create temporary table t2 (a int);
|
|
create temporary table t3 (a int);
|
|
drop table t1;
|
|
drop table t2;
|
|
drop temporary table t3;
|
|
show status like 'com_create%table';
|
|
Variable_name Value
|
|
Com_create_table 1
|
|
Com_create_temporary_table 2
|
|
show status like 'com_drop%table';
|
|
Variable_name Value
|
|
Com_drop_table 2
|
|
Com_drop_temporary_table 1
|
|
#
|
|
# Some more generic temporary table tests
|
|
# added during MDEV-5535.
|
|
#
|
|
DROP DATABASE IF EXISTS temp_db;
|
|
CREATE DATABASE temp_db;
|
|
USE temp_db;
|
|
#
|
|
# SHOW TABLES do not list temporary tables.
|
|
#
|
|
CREATE TEMPORARY TABLE temp_t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO temp_t1 VALUES(1);
|
|
SELECT * FROM temp_t1;
|
|
i
|
|
1
|
|
SHOW TABLES;
|
|
Tables_in_temp_db
|
|
temp_t1
|
|
DROP TABLE temp_t1;
|
|
#
|
|
# Create and drop a temporary table.
|
|
#
|
|
CREATE TEMPORARY TABLE temp_t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO temp_t1 VALUES(1);
|
|
SELECT * FROM temp_t1;
|
|
i
|
|
1
|
|
DROP TABLE temp_t1;
|
|
SELECT * FROM temp_t1;
|
|
ERROR 42S02: Table 'temp_db.temp_t1' doesn't exist
|
|
#
|
|
# Create a temporary table and base table with same name and DROP TABLE.
|
|
#
|
|
CREATE TABLE t1(c1 VARCHAR(20)) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES("BASE TABLE");
|
|
CREATE TEMPORARY TABLE t1(c1 VARCHAR(20)) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES("TEMPORARY TABLE");
|
|
SELECT * FROM t1;
|
|
c1
|
|
TEMPORARY TABLE
|
|
DROP TABLE t1;
|
|
SELECT * FROM t1;
|
|
c1
|
|
BASE TABLE
|
|
DROP TABLE t1;
|
|
SELECT * FROM t1;
|
|
ERROR 42S02: Table 'temp_db.t1' doesn't exist
|
|
#
|
|
# Create a temporary table and base table with same name and DROP TEMPORARY
|
|
# TABLE.
|
|
#
|
|
CREATE TABLE t1(c1 VARCHAR(20)) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES("BASE TABLE");
|
|
CREATE TEMPORARY TABLE t1(c1 VARCHAR(20)) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES("TEMPORARY TABLE");
|
|
SELECT * FROM t1;
|
|
c1
|
|
TEMPORARY TABLE
|
|
DROP TEMPORARY TABLE t1;
|
|
SELECT * FROM t1;
|
|
c1
|
|
BASE TABLE
|
|
DROP TEMPORARY TABLE t1;
|
|
ERROR 42S02: Unknown table 'temp_db.t1'
|
|
SELECT * FROM t1;
|
|
c1
|
|
BASE TABLE
|
|
DROP TABLE t1;
|
|
#
|
|
# Create a temporary table and drop its parent database.
|
|
#
|
|
USE temp_db;
|
|
CREATE TEMPORARY TABLE temp_t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO temp_t1 VALUES (1);
|
|
DROP DATABASE temp_db;
|
|
CREATE DATABASE temp_db;
|
|
USE temp_db;
|
|
DROP TEMPORARY TABLE temp_t1;
|
|
#
|
|
# Similar to above, but this time with a base table with same name.
|
|
#
|
|
USE temp_db;
|
|
CREATE TABLE t1(i INT)ENGINE=INNODB;
|
|
CREATE TEMPORARY TABLE t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1);
|
|
DROP DATABASE temp_db;
|
|
CREATE DATABASE temp_db;
|
|
USE temp_db;
|
|
DROP TEMPORARY TABLE t1;
|
|
DROP TABLE t1;
|
|
ERROR 42S02: Unknown table 'temp_db.t1'
|
|
#
|
|
# Create a temporary table within a function.
|
|
#
|
|
USE temp_db;
|
|
CREATE FUNCTION f1() RETURNS INT
|
|
BEGIN
|
|
DROP TEMPORARY TABLE IF EXISTS temp_t1;
|
|
CREATE TEMPORARY TABLE temp_t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO `temp_t1` VALUES(1);
|
|
RETURN (SELECT COUNT(*) FROM temp_t1);
|
|
END|
|
|
SELECT f1();
|
|
f1()
|
|
1
|
|
SELECT * FROM temp_t1;
|
|
i
|
|
1
|
|
DROP TABLE temp_t1;
|
|
CREATE TEMPORARY TABLE `temp_t1`(i INT) ENGINE=INNODB;
|
|
SELECT f1();
|
|
f1()
|
|
1
|
|
SELECT * FROM temp_t1;
|
|
i
|
|
1
|
|
DROP FUNCTION f1;
|
|
#
|
|
# Create and drop a temporary table within a function.
|
|
#
|
|
CREATE FUNCTION f2() RETURNS INT
|
|
BEGIN
|
|
DROP TEMPORARY TABLE IF EXISTS temp_t1;
|
|
CREATE TEMPORARY TABLE temp_t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO temp_t1 VALUES(1);
|
|
DROP TABLE temp_t1;
|
|
RETURN 0;
|
|
END|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger
|
|
CREATE FUNCTION f2() RETURNS INT
|
|
BEGIN
|
|
DROP TEMPORARY TABLE IF EXISTS temp_t1;
|
|
CREATE TEMPORARY TABLE temp_t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO temp_t1 VALUES(1);
|
|
DROP TEMPORARY TABLE temp_t1;
|
|
RETURN 0;
|
|
END|
|
|
SELECT f2();
|
|
f2()
|
|
0
|
|
DROP FUNCTION f2;
|
|
#
|
|
# Create a temporary table within a function and select it from another
|
|
# function.
|
|
#
|
|
CREATE FUNCTION f2() RETURNS INT
|
|
BEGIN
|
|
DROP TEMPORARY TABLE IF EXISTS temp_t1;
|
|
CREATE TEMPORARY TABLE temp_t1 (i INT) ENGINE=INNODB;
|
|
INSERT INTO temp_t1 VALUES (1);
|
|
RETURN f2_1();
|
|
END|
|
|
CREATE FUNCTION f2_1() RETURNS INT
|
|
RETURN (SELECT COUNT(*) FROM temp_t1)|
|
|
SELECT f2();
|
|
f2()
|
|
1
|
|
DROP TEMPORARY TABLE temp_t1;
|
|
DROP FUNCTION f2;
|
|
#
|
|
# Create temporary table like base table.
|
|
#
|
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES(1);
|
|
CREATE TEMPORARY TABLE temp_t1 LIKE t1;
|
|
SELECT * FROM temp_t1;
|
|
i
|
|
CREATE TEMPORARY TABLE t1 LIKE t1;
|
|
ERROR 42000: Not unique table/alias: 't1'
|
|
DROP TABLE temp_t1, t1;
|
|
#
|
|
# Create temporary table as base table.
|
|
#
|
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES(1);
|
|
CREATE TEMPORARY TABLE temp_t1 AS SELECT * FROM t1;
|
|
SELECT * FROM temp_t1;
|
|
i
|
|
1
|
|
DROP TABLE temp_t1, t1;
|
|
#
|
|
# ALTER TABLE RENAME & ENABLE/DISABLE KEYS (shortcuts)
|
|
#
|
|
CREATE TEMPORARY TABLE t1(i INT PRIMARY KEY) ENGINE=MYISAM;
|
|
INSERT INTO t1 VALUES(1);
|
|
SELECT COUNT(*)=1 FROM t1;
|
|
COUNT(*)=1
|
|
1
|
|
ALTER TABLE t1 RENAME t2;
|
|
SELECT COUNT(*)=1 FROM t2;
|
|
COUNT(*)=1
|
|
1
|
|
ALTER TABLE t2 RENAME t1;
|
|
ALTER TABLE t1 DISABLE KEYS;
|
|
ALTER TABLE t1 ENABLE KEYS;
|
|
LOCK TABLES t1 WRITE;
|
|
ALTER TABLE t1 RENAME t2;
|
|
SELECT COUNT(*)=1 FROM t2;
|
|
COUNT(*)=1
|
|
1
|
|
ALTER TABLE t2 RENAME t1;
|
|
ALTER TABLE t1 DISABLE KEYS;
|
|
ALTER TABLE t1 ENABLE KEYS;
|
|
UNLOCK TABLES;
|
|
LOCK TABLES t1 READ;
|
|
ALTER TABLE t1 RENAME t2;
|
|
SELECT COUNT(*)=1 FROM t2;
|
|
COUNT(*)=1
|
|
1
|
|
ALTER TABLE t2 RENAME t1;
|
|
ALTER TABLE t1 DISABLE KEYS;
|
|
ALTER TABLE t1 ENABLE KEYS;
|
|
UNLOCK TABLES;
|
|
FLUSH TABLES WITH READ LOCK;
|
|
ALTER TABLE t1 RENAME t2;
|
|
SELECT COUNT(*)=1 FROM t2;
|
|
COUNT(*)=1
|
|
1
|
|
ALTER TABLE t2 RENAME t1;
|
|
ALTER TABLE t1 DISABLE KEYS;
|
|
ALTER TABLE t1 ENABLE KEYS;
|
|
UNLOCK TABLES;
|
|
ALTER TABLE t1 RENAME t2, LOCK SHARED;
|
|
ALTER TABLE t2 RENAME t1, LOCK EXCLUSIVE;
|
|
DROP TABLE t1;
|
|
#
|
|
# MDEV-10792: Assertion `thd->mdl_context.is_lock_owner
|
|
# (MDL_key::TABLE, table->db, table->table_name, MDL_SHARED)'
|
|
# failed in mysql_rm_table_no_locks
|
|
#
|
|
CREATE TEMPORARY TABLE t1 (i INT);
|
|
DROP TABLE nonexisting_table, t1;
|
|
ERROR 42S02: Unknown table 'temp_db.nonexisting_table'
|
|
# Cleanup
|
|
DROP DATABASE temp_db;
|
|
USE test;
|
|
#
|
|
# MDEV-17167 - InnoDB: Failing assertion: table->get_ref_count() == 0
|
|
# upon truncating a temporary table
|
|
#
|
|
CREATE TEMPORARY TABLE t1(a INT) ENGINE=InnoDB;
|
|
SELECT * FROM t1 AS t1a1, t1 AS t2a2;
|
|
a a
|
|
TRUNCATE TABLE t1;
|
|
LOCK TABLES t1 WRITE;
|
|
TRUNCATE TABLE t1;
|
|
SELECT * FROM t1;
|
|
a
|
|
UNLOCK TABLES;
|
|
LOCK TABLES t1 AS t1a1 WRITE, t1 AS t1a2 WRITE;
|
|
TRUNCATE TABLE t1;
|
|
SELECT * FROM t1 AS t1a1, t1 AS t1a2;
|
|
a a
|
|
UNLOCK TABLES;
|
|
CREATE TABLE t2(a INT) ENGINE=InnoDB;
|
|
LOCK TABLES t2 WRITE;
|
|
TRUNCATE TABLE t1;
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# MDEV-19449 1030: Got error 168 "Unknown (generic) error from engine"
|
|
# for valid TRUNCATE (temporary) TABLE
|
|
#
|
|
CREATE TEMPORARY TABLE t1 (col1 BIGINT) ENGINE = InnoDB;
|
|
INSERT INTO t1 (no_such_col) SELECT * FROM t1;
|
|
ERROR 42S22: Unknown column 'no_such_col' in 'field list'
|
|
TRUNCATE TABLE t1;
|
|
ALTER TABLE t1 CHANGE no_such_col1 col1 BIGINT NULL;
|
|
ERROR 42S22: Unknown column 'no_such_col1' in 't1'
|
|
TRUNCATE TABLE t1;
|
|
DROP TEMPORARY TABLE t1;
|
|
#
|
|
# MDEV-21695 Server crashes in TABLE::evaluate_update_default_function upon UPDATE on temporary table
|
|
#
|
|
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
|
|
CREATE TEMPORARY TABLE t1 (a DATETIME ON UPDATE CURRENT_TIMESTAMP);
|
|
ALTER TABLE t1 ADD b INT;
|
|
INSERT INTO t1 (b) VALUES (1),(2);
|
|
ALTER TABLE t1 CHANGE COLUMN x xx INT;
|
|
ERROR 42S22: Unknown column 'x' in 't1'
|
|
UPDATE t1 SET b = 3;
|
|
SELECT * FROM t1;
|
|
a b
|
|
2001-01-01 10:20:30 3
|
|
2001-01-01 10:20:30 3
|
|
DROP TEMPORARY TABLE t1;
|
|
#
|
|
# End of 10.2 tests
|
|
#
|
|
#
|
|
# MDEV-31523: Using two temporary tables in OPTIMIZE TABLE lead to crash
|
|
#
|
|
CREATE TEMPORARY TABLE t1 (c INT) ENGINE=MyISAM;
|
|
CREATE TEMPORARY TABLE t2 (c INT) ENGINE=MyISAM;
|
|
optimize TABLE t1,t2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize status Table is already up to date
|
|
test.t2 optimize status Table is already up to date
|
|
SHOW TABLES;
|
|
Tables_in_test
|
|
t2
|
|
t1
|
|
tmp
|
|
# in 11.2 and above here should be listed above used temporary tables
|
|
DROP TEMPORARY TABLE t1, t2;
|
|
#
|
|
# MDEV-33218: Assertion `active_arena->is_stmt_prepare_or_first_stmt_execute() || active_arena->state == Query_arena::STMT_SP_QUERY_ARGUMENTS' failed. in st_select_lex::fix_prepare_information
|
|
#
|
|
CREATE VIEW v1 AS SELECT 5;
|
|
CREATE PROCEDURE sp() SELECT * FROM v1;
|
|
CREATE TEMPORARY TABLE v1 as SELECT 7;
|
|
# sp() accesses the temporary table v1 that hides the view with the same name
|
|
# Therefore expected output is the row (7)
|
|
CALL sp();
|
|
7
|
|
7
|
|
DROP TEMPORARY TABLE v1;
|
|
# After the temporary table v1 has been dropped the next invocation of sp()
|
|
# accesses the view v1. So, expected output is the row (5)
|
|
CALL sp();
|
|
5
|
|
5
|
|
# Clean up
|
|
DROP VIEW v1;
|
|
DROP PROCEDURE sp;
|
|
# Another use case is when a temporary table hides a view is dropped
|
|
# inside a stored routine being called.
|
|
CREATE VIEW t1 AS SELECT 1;
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
DROP TEMPORARY TABLE t1;
|
|
END
|
|
|
|
|
CREATE FUNCTION f1() RETURNS INT
|
|
BEGIN
|
|
CALL p1();
|
|
RETURN 1;
|
|
END
|
|
|
|
|
CREATE TEMPORARY TABLE t1 AS SELECT 1 AS a;
|
|
PREPARE stmt FROM 'SELECT f1()';
|
|
EXECUTE stmt;
|
|
f1()
|
|
1
|
|
# The temporary table t1 has been dropped on first
|
|
# execution of the prepared statement 'stmt',
|
|
# next time this statement is run it results in issuing
|
|
# the error ER_BAD_TABLE_ERROR
|
|
EXECUTE stmt;
|
|
ERROR 42S02: Unknown table 'test.t1'
|
|
# Clean up
|
|
DROP VIEW t1;
|
|
DROP FUNCTION f1;
|
|
DROP PROCEDURE p1;
|
|
#
|
|
# End of 10.4 tests
|
|
#
|
|
create function f1() returns int
|
|
begin
|
|
drop temporary table t1, t2;
|
|
return 1;
|
|
end;
|
|
$$
|
|
create temporary table t1 (a int);
|
|
create temporary table t2 (a int);
|
|
insert t1 values (2);
|
|
insert t2 values (3);
|
|
select a,f1() from t1;
|
|
ERROR HY000: Can't reopen table: 't1'
|
|
drop function f1;
|
|
drop temporary table t1;
|
|
drop temporary table t2;
|
|
ERROR 42S02: Unknown table 'test.t2'
|
|
#
|
|
# End of 10.5 tests
|
|
#
|
|
#
|
|
# Record that temporary table locks are always WRITE locks
|
|
#
|
|
CREATE TEMPORARY TABLE t1 (a INT);
|
|
LOCK TABLE t1 READ;
|
|
TRUNCATE TABLE t1;
|
|
TRUNCATE TABLE t1;
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
#
|
|
# End of 10.6 tests
|
|
#
|