~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
# Initialize
2
drop table if exists t1,t2,t3;
3
4
select * from (select 2) b;
5
-- error 1054
6
SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b;
7
-- error 1054
8
SELECT 1 as a FROM (SELECT a UNION SELECT 1) b;
9
CREATE TABLE t1 (a int not null, b char (10) not null);
10
insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c');
11
CREATE TABLE t2 (a int not null, b char (10) not null);
12
insert into t2 values (3,'c'),(4,'d'),(5,'f'),(6,'e');
13
select t1.a,t3.y from t1,(select a as y from t2  where b='c') as t3  where t1.a = t3.y;
14
select t1.a,t3.a from t1,(select * from t2  where b='c') as t3  where t1.a = t3.a;
15
CREATE TABLE t3 (a int not null, b char (10) not null);
16
insert into t3 values (3,'f'),(4,'y'),(5,'z'),(6,'c');
17
select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3.a>3) as t5  where t2.b=t5.b) as t4  where t1.a = t4.y;
18
--error 1054
19
SELECT a FROM (SELECT 1 FROM (SELECT 1) a HAVING a=1) b;
20
--error 1052
21
SELECT a,b as a FROM (SELECT '1' as a,'2' as b) b  HAVING a=1;
22
SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=2;
23
SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=1;
24
--error 1054
25
SELECT 1 FROM (SELECT 1) a WHERE a=2;
26
--error 1054
27
SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1  HAVING a=1) as a;
28
select * from t1 as x1, (select * from t1) as x2;
29
explain select * from t1 as x1, (select * from t1) as x2;
30
drop table if exists  t2,t3;
31
select * from (select 1) as a;
32
select a from (select 1 as a) as b;
33
select 1 from (select 1) as a;
34
select * from (select * from t1 union select * from t1) a;
35
select * from (select * from t1 union all select * from t1) a;
36
select * from (select * from t1 union all select * from t1 limit 2) a;
37
explain select * from (select * from t1 union select * from t1) a;
38
explain select * from (select * from t1 union all select * from t1) a;
39
CREATE TABLE t2 (a int not null);
40
insert into t2 values(1);
41
select * from (select * from t1 where t1.a=(select a from t2 where t2.a=t1.a)) a;
42
select * from (select * from t1 where t1.a=(select t2.a from t2 where t2.a=t1.a) union select t1.a, t1.b from t1) a;
43
explain select * from (select t1.*, t2.a as t2a from t1,t2 where t1.a=t2.a) t1;
44
drop table t1, t2;
45
create table t1(a int not null, t char(8), index(a));
46
disable_query_log;
910.4.12 by Stewart Smith
dramatically speed up derived test.
47
begin;
1 by brian
clean slate
48
let $1 = 10000;
49
while ($1)
50
 {
51
  eval insert into t1 values ($1,'$1'); 
52
  dec $1;
53
 }
910.4.12 by Stewart Smith
dramatically speed up derived test.
54
commit;
1 by brian
clean slate
55
enable_query_log;
56
SELECT * FROM (SELECT * FROM t1) as b ORDER BY a  ASC LIMIT 0,20;
722.2.32 by Monty Taylor
Fixed non-deterministic innodb explain output.
57
--replace_column 9 X
1 by brian
clean slate
58
explain select count(*) from t1 as tt1, (select * from t1) as tt2;
59
drop table t1;
60
SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a) as a )) as b;
61
select * from (select 1 as a) b  left join (select 2 as a) c using(a);
62
--error 1054
63
SELECT * FROM (SELECT 1 UNION SELECT a) b;
64
--error 1054
65
SELECT 1 as a FROM (SELECT a UNION SELECT 1) b;
66
--error 1054
67
SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b;
68
--error 1054
69
select 1 from  (select 2) a order by 0;
70
71
#
72
# Test of explain (bug #251)
73
#
74
75
create table t1 (id int);
76
insert into t1 values (1),(2),(3);
77
describe select * from (select * from t1 group by id) bar;
78
drop table t1;
79
80
#
81
# test->used_keys test for derived tables
82
#
722.2.27 by Monty Taylor
Enabled derived test.
83
create table t1 (mat_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, matintnum CHAR(6) NOT NULL, test INT NULL);
84
create table t2 (mat_id INT NOT NULL, pla_id INT NOT NULL);
1 by brian
clean slate
85
insert into t1 values (NULL, 'a', 1), (NULL, 'b', 2), (NULL, 'c', 3), (NULL, 'd', 4), (NULL, 'e', 5), (NULL, 'f', 6), (NULL, 'g', 7), (NULL, 'h', 8), (NULL, 'i', 9);
86
insert into t2 values (1, 100), (1, 101), (1, 102), (2, 100), (2, 103), (2, 104), (3, 101), (3, 102), (3, 105);
87
88
SELECT STRAIGHT_JOIN d.pla_id, m2.mat_id FROM t1 m2 INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
89
SELECT STRAIGHT_JOIN d.pla_id, m2.test FROM t1 m2  INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
90
91
explain SELECT STRAIGHT_JOIN d.pla_id, m2.mat_id FROM t1 m2 INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
92
explain SELECT STRAIGHT_JOIN d.pla_id, m2.test FROM t1 m2  INNER JOIN (SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id) d ON d.matintnum=m2.matintnum;
93
drop table t1,t2;
94
95
#
96
# derived table reference
97
#
98
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
99
100
#
101
# UPDATE/DELETE/INSERT of derived tables
102
#
103
create table t1 (a int);
104
insert into t1 values (1),(2),(3);
105
-- error 1288
106
update (select * from t1) as t1 set a = 5;
107
-- error 1064
108
delete from (select * from t1);
109
-- error 1064
110
insert into  (select * from t1) values (5);
111
drop table t1;
112
113
#
114
# deived tables with subquery inside all by one table
115
#
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
116
create table t1 (E1 INTEGER NOT NULL, E2 INTEGER NOT NULL, E3 INTEGER NOT NULL, PRIMARY KEY(E1)
1 by brian
clean slate
117
);
118
insert into t1 VALUES(1,1,1), (2,2,1);
119
select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A WHERE A.E3 = (SELECT MAX(B.E3) FROM t1 AS B WHERE A.E2 = B.E2)) AS THEMAX ON t1.E1 = THEMAX.E2 AND t1.E1 = t1.E2;
120
explain select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A WHERE A.E3 = (SELECT MAX(B.E3) FROM t1 AS B WHERE A.E2 = B.E2)) AS THEMAX ON t1.E1 = THEMAX.E2 AND t1.E1 = t1.E2;
121
drop table t1;
122
123
create table t1 (a int);
124
insert into t1 values (1),(2);
125
select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b;
126
explain select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b;
127
drop table t1;
128
129
#
130
# multi-update & multi-delete with derived tables
131
#
132
CREATE TABLE `t1` (
722.2.27 by Monty Taylor
Enabled derived test.
133
  `N` int NOT NULL default '0',
134
  `M` int default '0'
1063.9.3 by Brian Aker
Partial fix for tests for tmp
135
);
1 by brian
clean slate
136
INSERT INTO `t1` (N, M) VALUES (1, 0),(1, 0),(1, 0),(2, 0),(2, 0),(3, 0);
137
UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2;
138
select * from t1;
139
-- error 1288
722.2.27 by Monty Taylor
Enabled derived test.
140
# TODO: Bug lp:311109
141
#UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2, P2.N = 2;
1 by brian
clean slate
142
-- error 1054
143
UPDATE `t1` AS P1 INNER JOIN (SELECT aaaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2;
144
delete P1.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
145
select * from t1;
146
--replace_result P2 p2
722.2.27 by Monty Taylor
Enabled derived test.
147
# TODO: Bug lp:311111
148
#--error ER_NON_UPDATABLE_TABLE
149
#delete P1.*,P2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
1 by brian
clean slate
150
-- error 1054
151
delete P1.* from `t1` AS P1 INNER JOIN (SELECT aaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
152
drop table t1;
153
154
#
155
# correct lex->current_select
156
#
1063.9.3 by Brian Aker
Partial fix for tests for tmp
157
CREATE TEMPORARY TABLE t1 (
722.2.27 by Monty Taylor
Enabled derived test.
158
  OBJECTID int NOT NULL default 0,
159
  SORTORDER int NOT NULL auto_increment,
1 by brian
clean slate
160
  KEY t1_SortIndex (SORTORDER),
161
  KEY t1_IdIndex (OBJECTID)
722.2.27 by Monty Taylor
Enabled derived test.
162
) ENGINE=MyISAM;
1063.9.3 by Brian Aker
Partial fix for tests for tmp
163
CREATE TEMPORARY TABLE t2 (
722.2.27 by Monty Taylor
Enabled derived test.
164
  ID int default NULL,
165
  PARID int default NULL,
1 by brian
clean slate
166
  UNIQUE KEY t2_ID_IDX (ID),
167
  KEY t2_PARID_IDX (PARID)
722.2.27 by Monty Taylor
Enabled derived test.
168
) engine=MyISAM;
1 by brian
clean slate
169
INSERT INTO t2 VALUES (1000,0),(1001,0),(1002,0),(1003,0),(1008,1),(1009,1),(1010,1),(1011,1),(1016,2);
1063.9.3 by Brian Aker
Partial fix for tests for tmp
170
CREATE TEMPORARY TABLE t3 (
722.2.27 by Monty Taylor
Enabled derived test.
171
  ID int default NULL,
1 by brian
clean slate
172
  DATA decimal(10,2) default NULL,
173
  UNIQUE KEY t3_ID_IDX (ID)
722.2.27 by Monty Taylor
Enabled derived test.
174
) engine=MyISAM;
1 by brian
clean slate
175
INSERT INTO t3 VALUES (1000,0.00),(1001,0.25),(1002,0.50),(1003,0.75),(1008,1.00),(1009,1.25),(1010,1.50),(1011,1.75);
176
select 497, TMP.ID, NULL from (select 497 as ID, MAX(t3.DATA) as DATA      from t1 join t2 on (t1.ObjectID = t2.ID) join t3 on (t1.ObjectID = t3.ID) group by t2.ParID order by DATA DESC) as TMP;
177
drop table t1, t2, t3;
178
179
#
180
# explain derived
181
#
722.2.27 by Monty Taylor
Enabled derived test.
182
CREATE TABLE t1 (name char(1) default NULL, val int default NULL);
1 by brian
clean slate
183
INSERT INTO t1 VALUES ('a',1),  ('a',2),  ('a',2),  ('a',2),  ('a',3),  ('a',6), ('a',7), ('a',11), ('a',11), ('a',12), ('a',13), ('a',13), ('a',20), ('b',2), ('b',3), ('b',4), ('b',5);
184
SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
185
explain SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
186
drop table t1;
187
188
#
189
# "Using index" in explain
190
#
191
create table t2 (a int, b int, primary key (a));
192
insert into t2 values (1,7),(2,7);
193
explain select a from t2 where a>1;
194
explain select a from (select a from t2 where a>1) tt;
195
drop table t2;
196
197
#
198
# select list counter
199
#
722.2.27 by Monty Taylor
Enabled derived test.
200
CREATE TABLE `t1` ( `itemid` int NOT NULL default 0, `grpid` varchar(15) NOT NULL default '', `vendor` int NOT NULL default 0, `date_` date NOT NULL default '1900-01-01', `price` decimal(12,2) NOT NULL default '0.00', PRIMARY KEY  (`itemid`,`grpid`,`vendor`,`date_`), KEY `itemid` (`itemid`,`vendor`), KEY `itemid_2` (`itemid`,`date_`));
1 by brian
clean slate
201
insert into t1 values (128, 'rozn', 2, curdate(), 10),
202
  (128, 'rozn', 1, curdate(), 10);
203
SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MAX(concat(date_,";",price)), 12) price FROM t1 WHERE itemid=128 AND  grpid='rozn' GROUP BY itemid, grpid, vendor) lastprices;
204
DROP TABLE t1;
205
206
#
207
# DISTINCT over grouped select on subquery in the FROM clause
208
#
209
create table t1 (a integer, b integer);
210
insert into t1 values (1,4), (2,2),(2,2), (4,1),(4,1),(4,1),(4,1);
211
select distinct sum(b) from t1 group by a;
212
select distinct sum(b) from (select a,b from t1) y group by a;
213
drop table t1;
214
215
216
#
217
# Test for bug #7413 "Subquery with non-scalar results participating in
218
# select list of derived table crashes server" aka "VIEW with sub query can
219
# cause the MySQL server to crash". If we have encountered problem during
220
# filling of derived table we should report error and perform cleanup
221
# properly.
222
#
223
CREATE TABLE t1 (a char(10), b char(10));
224
INSERT INTO t1 VALUES ('root','localhost'), ('root','%');
225
--error 1242
226
SELECT * FROM (SELECT (SELECT a.a FROM t1 AS a WHERE a.a = b.a) FROM t1 AS b) AS c;
227
DROP TABLE t1;
228
#
229
# test of union subquery in the FROM clause with complex distinct/all (BUG#6565)
230
#
231
create table t1(a int);
232
create table t2(a int);
233
create table t3(a int);
234
insert into t1 values(1),(1);
235
insert into t2 values(2),(2);
236
insert into t3 values(3),(3);
237
select * from t1 union distinct select * from t2 union all select * from t3;
238
select * from (select * from t1 union distinct select * from t2 union all select * from t3) X;
239
drop table t1, t2, t3;
240
241
#
242
# Bug #11864 non unique names are allowed in subquery
243
#
244
create table t1 (a int);
245
create table t2 (a int);
246
select * from (select * from t1,t2) foo;
247
drop table t1,t2;
248
249
#
250
# Bug#10586 - query works with 4.1.8, but not with 4.1.11
251
#
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
252
create table t1 (ID int not null auto_increment,
1 by brian
clean slate
253
                 DATA varchar(5) not null, primary key (ID));
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
254
create table t2 (ID int not null auto_increment,
255
                 DATA varchar(5) not null, FID int not null,
1 by brian
clean slate
256
                 primary key (ID));
257
select A.* from (t1 inner join (select * from t2) as A on t1.ID = A.FID);
258
select t2.* from ((select * from t1) as A inner join t2 on A.ID = t2.FID);
259
select t2.* from (select * from t1) as A inner join t2 on A.ID = t2.FID;
260
drop table t1, t2;
261