temp_table.test 4.72 KB
Newer Older
1 2
# mysqltest should be fixed
-- source include/not_embedded.inc
3 4 5 6
#
# Test of temporary tables
#

7
--disable_warnings
8
drop table if exists t1,t2;
unknown's avatar
unknown committed
9
drop view if exists v1;
10 11
--enable_warnings

12 13 14 15 16 17 18 19 20 21
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;
select * from t2;
CREATE TABLE t2 (x int not null, y int not null);
alter table t2 rename t1;
select * from t1;
unknown's avatar
unknown committed
22 23
create TEMPORARY TABLE t2 engine=heap select * from t1;
create TEMPORARY TABLE IF NOT EXISTS t2 (a int) engine=heap;
24 25

# This should give errors
26 27 28 29
--error 1050
CREATE TEMPORARY TABLE t1 (a int not null, b char (10) not null);
--error 1050
ALTER TABLE t1 RENAME t2;
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

select * from t2;
alter table t2 add primary key (a,b);
drop table t1,t2;
select * from t1;
drop table t2;
create temporary table t1 select *,2 as "e" from t1;
select * from t1;
drop table t1;
drop table t1;

#
# Test CONCAT_WS with temporary tables
#

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;
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;

#
# Problem with ELT
#
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);

# put in some initial values
insert into t1 values (1),(2),(4);
insert into t2 values (1,1),(2,1),(3,1),(4,2);

# do a query using ELT, a join and an ORDER BY.
select one.id, two.val, elt(two.val,'one','two') from t1 one, t2 two where two.id=one.id order by one.id;
drop table t1,t2;
70

unknown's avatar
unknown committed
71 72 73
#
# Test of failed ALTER TABLE on temporary table
#
74 75 76 77 78
create temporary table t1 (a int not null);
insert into t1 values (1),(1);
-- error 1062
alter table t1 add primary key (a);
drop table t1;
unknown's avatar
unknown committed
79

80 81 82 83 84 85
#
# In MySQL 4.0.4 doing a GROUP BY on a NULL column created a disk based
# temporary table when a memory based one would be good enough.

CREATE TABLE t1 (
  d datetime default NULL
unknown's avatar
unknown committed
86
) ENGINE=MyISAM;
87 88 89 90 91 92 93 94


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;
show status like "created_tmp%tables";
drop table t1;
95 96

# Fix for BUG#8921: Check that temporary table is ingored by view commands.
unknown's avatar
unknown committed
97 98 99 100 101 102 103 104 105 106 107 108
create temporary table v1 as select 'This is temp. table' A;
create view v1 as select 'This is view' A;
select * from v1;
show create table v1;
show create view v1;
drop view v1;
select * from v1;
create view v1 as select 'This is view again' A;
select * from v1;
drop table v1;
select * from v1;
drop view v1;
109

110 111 112 113 114 115 116 117
# Bug #8497: tmpdir with extra slashes would cause failures
#
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;
drop table t1, t2;
118

119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165

#
# BUG#21096: locking issue ; temporary table conflicts.
#
# The problem was that on DROP TEMPORARY table name lock was acquired,
# which should not be done.
#
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings

CREATE TABLE t1 (i INT);

LOCK TABLE t1 WRITE;

connect (conn1, localhost, root,,);

CREATE TEMPORARY TABLE t1 (i INT);

--echo The following command should not block
DROP TEMPORARY TABLE t1;

disconnect conn1;
connection default;

DROP TABLE t1;

#
# Check that it's not possible to drop a base table with
# DROP TEMPORARY statement.
#
CREATE TABLE t1 (i INT);
CREATE TEMPORARY TABLE t2 (i INT);

--error 1051
DROP TEMPORARY TABLE t2, t1;

# Table t2 should have been dropped.
--error 1146
SELECT * FROM t2;
# But table t1 should still be there.
SELECT * FROM t1;

DROP TABLE t1;


--echo End of 4.1 tests.
166

unknown's avatar
unknown committed
167 168 169 170 171 172 173 174 175 176 177 178

#
# Test truncate with temporary tables
#

create temporary table t1 (a int);
insert into t1 values (4711);
select * from t1;
truncate t1;
insert into t1 values (42);
select * from t1;
drop table t1;