1
by brian
clean slate |
1 |
# Initialise
|
2 |
--disable_warnings |
|
3 |
drop table if exists t1, t2; |
|
4 |
--enable_warnings |
|
5 |
#
|
|
6 |
# test of IN (NULL)
|
|
7 |
#
|
|
8 |
||
9 |
select 1 in (1,2,3); |
|
10 |
select 10 in (1,2,3); |
|
11 |
select NULL in (1,2,3); |
|
12 |
select 1 in (1,NULL,3); |
|
13 |
select 3 in (1,NULL,3); |
|
14 |
select 10 in (1,NULL,3); |
|
15 |
select 1.5 in (1.5,2.5,3.5); |
|
16 |
select 10.5 in (1.5,2.5,3.5); |
|
17 |
select NULL in (1.5,2.5,3.5); |
|
18 |
select 1.5 in (1.5,NULL,3.5); |
|
19 |
select 3.5 in (1.5,NULL,3.5); |
|
20 |
select 10.5 in (1.5,NULL,3.5); |
|
21 |
||
22 |
CREATE TABLE t1 (a int, b int, c int); |
|
23 |
insert into t1 values (1,2,3), (1,NULL,3); |
|
24 |
select 1 in (a,b,c) from t1; |
|
25 |
select 3 in (a,b,c) from t1; |
|
26 |
select 10 in (a,b,c) from t1; |
|
27 |
select NULL in (a,b,c) from t1; |
|
28 |
drop table t1; |
|
29 |
CREATE TABLE t1 (a float, b float, c float); |
|
30 |
insert into t1 values (1.5,2.5,3.5), (1.5,NULL,3.5); |
|
31 |
select 1.5 in (a,b,c) from t1; |
|
32 |
select 3.5 in (a,b,c) from t1; |
|
33 |
select 10.5 in (a,b,c) from t1; |
|
34 |
drop table t1; |
|
35 |
CREATE TABLE t1 (a varchar(10), b varchar(10), c varchar(10)); |
|
36 |
insert into t1 values ('A','BC','EFD'), ('A',NULL,'EFD'); |
|
37 |
select 'A' in (a,b,c) from t1; |
|
38 |
select 'EFD' in (a,b,c) from t1; |
|
39 |
select 'XSFGGHF' in (a,b,c) from t1; |
|
40 |
drop table t1; |
|
41 |
||
42 |
CREATE TABLE t1 (field char(1)); |
|
43 |
INSERT INTO t1 VALUES ('A'),(NULL); |
|
44 |
SELECT * from t1 WHERE field IN (NULL); |
|
45 |
SELECT * from t1 WHERE field NOT IN (NULL); |
|
46 |
SELECT * from t1 where field = field; |
|
47 |
SELECT * from t1 where field <=> field; |
|
48 |
DELETE FROM t1 WHERE field NOT IN (NULL); |
|
49 |
SELECT * FROM t1; |
|
50 |
drop table t1; |
|
51 |
||
512
by Brian Aker
Adding back more test cases. |
52 |
create table t1 (id int primary key); |
1
by brian
clean slate |
53 |
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9); |
54 |
select * from t1 where id in (2,5,9); |
|
55 |
drop table t1; |
|
56 |
||
57 |
create table t1 ( |
|
512
by Brian Aker
Adding back more test cases. |
58 |
a char(1), |
59 |
b char(1), |
|
60 |
c char(1) |
|
1
by brian
clean slate |
61 |
);
|
62 |
insert into t1 values ('A','B','C'); |
|
63 |
insert into t1 values ('a','c','c'); |
|
64 |
select * from t1 where a in (b); |
|
65 |
select * from t1 where a in (b,c); |
|
66 |
select * from t1 where 'a' in (a,b,c); |
|
67 |
select * from t1 where 'a' in (a); |
|
68 |
select * from t1 where a in ('a'); |
|
512
by Brian Aker
Adding back more test cases. |
69 |
select * from t1 where 'a' collate utf8_general_ci in (a,b,c); |
70 |
select * from t1 where 'a' collate utf8_bin in (a,b,c); |
|
71 |
select * from t1 where 'a' in (a,b,c collate utf8_bin); |
|
72 |
explain extended select * from t1 where 'a' in (a,b,c collate utf8_bin); |
|
1
by brian
clean slate |
73 |
drop table t1; |
74 |
||
75 |
# Bug#7834 Illegal mix of collations in IN operator
|
|
512
by Brian Aker
Adding back more test cases. |
76 |
create table t1 (a char(10) not null); |
1
by brian
clean slate |
77 |
insert into t1 values ('a'),('b'),('c'); |
78 |
select a from t1 where a IN ('a','b','c') order by a; |
|
79 |
drop table t1; |
|
80 |
||
81 |
select '1.0' in (1,2); |
|
82 |
select 1 in ('1.0',2); |
|
83 |
select 1 in (1,'2.0'); |
|
84 |
select 1 in ('1.0',2.0); |
|
85 |
select 1 in (1.0,'2.0'); |
|
86 |
select 1 in ('1.1',2); |
|
87 |
select 1 in ('1.1',2.0); |
|
88 |
||
89 |
# Test case for bug #6365
|
|
90 |
||
512
by Brian Aker
Adding back more test cases. |
91 |
create table t1 (a char(2)); |
1
by brian
clean slate |
92 |
insert into t1 values ('aa'), ('bb'); |
93 |
select * from t1 where a in (NULL, 'aa'); |
|
94 |
drop table t1; |
|
95 |
||
96 |
# BUG#13419
|
|
97 |
create table t1 (id int, key(id)); |
|
98 |
insert into t1 values (1),(2),(3); |
|
99 |
select count(*) from t1 where id not in (1); |
|
100 |
select count(*) from t1 where id not in (1,2); |
|
101 |
drop table t1; |
|
102 |
||
103 |
||
104 |
#
|
|
105 |
# BUG#17047: CHAR() and IN() can return NULL without signaling NULL
|
|
106 |
# result
|
|
107 |
#
|
|
108 |
# The problem was in the IN() function that ignored maybe_null flags
|
|
109 |
# of all arguments except the first (the one _before_ the IN
|
|
110 |
# keyword, '1' in the test case below).
|
|
111 |
#
|
|
112 |
--disable_warnings |
|
113 |
DROP TABLE IF EXISTS t1; |
|
114 |
--enable_warnings |
|
115 |
||
116 |
CREATE TABLE t1 SELECT 1 IN (2, NULL); |
|
117 |
--echo SELECT should return NULL. |
|
118 |
SELECT * FROM t1; |
|
119 |
||
120 |
DROP TABLE t1; |
|
121 |
||
122 |
||
123 |
--echo End of 4.1 tests |
|
124 |
||
125 |
||
126 |
#
|
|
127 |
# Bug #11885: WHERE condition with NOT IN (one element)
|
|
128 |
#
|
|
129 |
||
130 |
CREATE TABLE t1 (a int PRIMARY KEY); |
|
131 |
INSERT INTO t1 VALUES (44), (45), (46); |
|
132 |
||
133 |
SELECT * FROM t1 WHERE a IN (45); |
|
134 |
SELECT * FROM t1 WHERE a NOT IN (0, 45); |
|
135 |
SELECT * FROM t1 WHERE a NOT IN (45); |
|
136 |
||
137 |
DROP TABLE t1; |
|
138 |
||
139 |
# BUG#15872: Excessive memory consumption of range analysis of NOT IN
|
|
1063.9.3
by Brian Aker
Partial fix for tests for tmp |
140 |
# I have disabled the EXPLAIN because we must use Innodb with this test.
|
141 |
create table t1 (a int); |
|
1
by brian
clean slate |
142 |
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); |
1063.9.51
by Stewart Smith
fix func_in test to include explain for some MRR queries again. |
143 |
create temporary table t2 (a int, filler char(200), key(a)) engine=myisam; |
1
by brian
clean slate |
144 |
|
145 |
insert into t2 select C.a*2, 'no' from t1 A, t1 B, t1 C; |
|
146 |
insert into t2 select C.a*2+1, 'yes' from t1 C; |
|
147 |
||
1063.9.51
by Stewart Smith
fix func_in test to include explain for some MRR queries again. |
148 |
explain
|
149 |
select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18); |
|
1
by brian
clean slate |
150 |
select * from t2 where a NOT IN (0, 2,4,6,8,10,12,14,16,18); |
151 |
||
1063.9.3
by Brian Aker
Partial fix for tests for tmp |
152 |
#
|
1063.9.51
by Stewart Smith
fix func_in test to include explain for some MRR queries again. |
153 |
explain select * from t2 force index(a) where a NOT IN (2,2,2,2,2,2); |
154 |
explain select * from t2 force index(a) where a <> 2; |
|
1
by brian
clean slate |
155 |
|
156 |
drop table t2; |
|
157 |
||
158 |
#
|
|
159 |
# Repeat the test for DATETIME
|
|
160 |
#
|
|
161 |
create table t2 (a datetime, filler char(200), key(a)); |
|
162 |
||
163 |
insert into t2 select '2006-04-25 10:00:00' + interval C.a minute, |
|
164 |
'no' from t1 A, t1 B, t1 C where C.a % 2 = 0; |
|
165 |
||
166 |
insert into t2 select '2006-04-25 10:00:00' + interval C.a*2+1 minute, |
|
167 |
'yes' from t1 C; |
|
168 |
||
169 |
explain
|
|
170 |
select * from t2 where a NOT IN ( |
|
171 |
'2006-04-25 10:00:00','2006-04-25 10:02:00','2006-04-25 10:04:00', |
|
172 |
'2006-04-25 10:06:00', '2006-04-25 10:08:00'); |
|
173 |
select * from t2 where a NOT IN ( |
|
174 |
'2006-04-25 10:00:00','2006-04-25 10:02:00','2006-04-25 10:04:00', |
|
175 |
'2006-04-25 10:06:00', '2006-04-25 10:08:00'); |
|
176 |
drop table t2; |
|
177 |
||
178 |
#
|
|
179 |
# Repeat the test for CHAR(N)
|
|
180 |
#
|
|
181 |
create table t2 (a varchar(10), filler char(200), key(a)); |
|
182 |
||
183 |
insert into t2 select 'foo', 'no' from t1 A, t1 B; |
|
184 |
insert into t2 select 'barbar', 'no' from t1 A, t1 B; |
|
185 |
insert into t2 select 'bazbazbaz', 'no' from t1 A, t1 B; |
|
186 |
||
187 |
insert into t2 values ('fon', '1'), ('fop','1'), ('barbaq','1'), |
|
188 |
('barbas','1'), ('bazbazbay', '1'),('zz','1'); |
|
189 |
||
190 |
explain select * from t2 where a not in('foo','barbar', 'bazbazbaz'); |
|
191 |
||
192 |
drop table t2; |
|
193 |
||
194 |
#
|
|
195 |
# Repeat for DECIMAL
|
|
196 |
#
|
|
197 |
create table t2 (a decimal(10,5), filler char(200), key(a)); |
|
198 |
||
199 |
insert into t2 select 345.67890, 'no' from t1 A, t1 B; |
|
200 |
insert into t2 select 43245.34, 'no' from t1 A, t1 B; |
|
201 |
insert into t2 select 64224.56344, 'no' from t1 A, t1 B; |
|
202 |
||
203 |
insert into t2 values (0, '1'), (22334.123,'1'), (33333,'1'), |
|
204 |
(55555,'1'), (77777, '1'); |
|
205 |
||
206 |
explain
|
|
207 |
select * from t2 where a not in (345.67890, 43245.34, 64224.56344); |
|
208 |
select * from t2 where a not in (345.67890, 43245.34, 64224.56344); |
|
209 |
||
210 |
drop table t2; |
|
211 |
||
212 |
# Try a very big IN-list
|
|
213 |
create table t2 (a int, key(a), b int); |
|
214 |
insert into t2 values (1,1),(2,2); |
|
215 |
||
216 |
set @cnt= 1; |
|
217 |
set @str="update t2 set b=1 where a not in ("; |
|
218 |
select count(*) from ( |
|
219 |
select @str:=concat(@str, @cnt:=@cnt+1, ",") |
|
220 |
from t1 A, t1 B, t1 C, t1 D) Z; |
|
221 |
||
222 |
set @str:=concat(@str, "10000)"); |
|
223 |
select substr(@str, 1, 50); |
|
224 |
set @str=NULL; |
|
225 |
||
226 |
drop table t2; |
|
227 |
drop table t1; |
|
228 |
||
229 |
# BUG#19618: Crash in range optimizer for
|
|
230 |
# "unsigned_keypart NOT IN(negative_number,...)"
|
|
231 |
# (introduced in fix BUG#15872)
|
|
232 |
create table t1 ( |
|
512
by Brian Aker
Adding back more test cases. |
233 |
some_id int, |
1
by brian
clean slate |
234 |
key (some_id) |
235 |
);
|
|
236 |
insert into t1 values (1),(2); |
|
237 |
select some_id from t1 where some_id not in(2,-1); |
|
238 |
select some_id from t1 where some_id not in(-4,-1,-4); |
|
239 |
select some_id from t1 where some_id not in(-4,-1,3423534,2342342); |
|
240 |
||
241 |
#
|
|
413.2.2
by Brian Aker
Removed UNSIGNED from parser. |
242 |
# BUG#24261: crash when WHERE contains NOT IN ('<negative value>') for column type
|
1
by brian
clean slate |
243 |
#
|
244 |
||
245 |
select some_id from t1 where some_id not in('-1', '0'); |
|
246 |
||
247 |
drop table t1; |
|
248 |
||
249 |
#
|
|
250 |
# BUG#20420: optimizer reports wrong keys on left join with IN
|
|
251 |
#
|
|
252 |
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a)); |
|
253 |
INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1); |
|
254 |
||
255 |
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a)); |
|
256 |
INSERT INTO t2 VALUES (3,2),(4,2),(100,100),(101,201),(102,102); |
|
257 |
||
258 |
CREATE TABLE t3 (a int PRIMARY KEY); |
|
259 |
INSERT INTO t3 VALUES (1),(2),(3),(4); |
|
260 |
||
261 |
CREATE TABLE t4 (a int PRIMARY KEY,b int); |
|
262 |
INSERT INTO t4 VALUES (1,1),(2,2),(1000,1000),(1001,1001),(1002,1002), |
|
263 |
(1003,1003),(1004,1004); |
|
264 |
||
265 |
EXPLAIN SELECT STRAIGHT_JOIN * FROM t3 |
|
266 |
JOIN t1 ON t3.a=t1.a |
|
267 |
JOIN t2 ON t3.a=t2.a |
|
268 |
JOIN t4 WHERE t4.a IN (t1.b, t2.b); |
|
269 |
||
270 |
SELECT STRAIGHT_JOIN * FROM t3 |
|
271 |
JOIN t1 ON t3.a=t1.a |
|
272 |
JOIN t2 ON t3.a=t2.a |
|
273 |
JOIN t4 WHERE t4.a IN (t1.b, t2.b); |
|
274 |
||
275 |
EXPLAIN SELECT STRAIGHT_JOIN |
|
276 |
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b)) |
|
277 |
FROM t3, t1, t2 |
|
278 |
WHERE t3.a=t1.a AND t3.a=t2.a; |
|
279 |
||
280 |
SELECT STRAIGHT_JOIN |
|
281 |
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b)) |
|
282 |
FROM t3, t1, t2 |
|
283 |
WHERE t3.a=t1.a AND t3.a=t2.a; |
|
284 |
||
285 |
DROP TABLE t1,t2,t3,t4; |
|
286 |
||
287 |
#
|
|
413.2.2
by Brian Aker
Removed UNSIGNED from parser. |
288 |
# BUG#19342: IN works incorrectly for BIGINT values
|
1
by brian
clean slate |
289 |
#
|
512
by Brian Aker
Adding back more test cases. |
290 |
CREATE TABLE t1(a BIGINT); |
291 |
INSERT INTO t1 VALUES (0x0FFFFFFFFFFFFFFF); |
|
1
by brian
clean slate |
292 |
|
293 |
SELECT * FROM t1 WHERE a=-1 OR a=-2 ; |
|
294 |
SELECT * FROM t1 WHERE a IN (-1, -2); |
|
295 |
||
512
by Brian Aker
Adding back more test cases. |
296 |
CREATE TABLE t2 (a BIGINT); |
1
by brian
clean slate |
297 |
insert into t2 values(13491727406643098568), |
512
by Brian Aker
Adding back more test cases. |
298 |
(0x0fffffefffffffff), |
299 |
(0x0ffffffeffffffff), |
|
300 |
(0x0fffffffefffffff), |
|
301 |
(0x0ffffffffeffffff), |
|
302 |
(0x0fffffffffefffff), |
|
303 |
(0x0ffffffffffeffff), |
|
304 |
(0x0fffffffffffefff), |
|
305 |
(0x0ffffffffffffeff), |
|
306 |
(0x0fffffffffffffef), |
|
307 |
(0x0ffffffffffffffe), |
|
308 |
(0x0fffffffffffffff), |
|
309 |
(0x2000000000000000), |
|
310 |
(0x2000000000000001), |
|
311 |
(0x2000000000000002), |
|
312 |
(0x2000000000000300), |
|
313 |
(0x2000000000000400), |
|
314 |
(0x2000000000000401), |
|
315 |
(0x2000000000004001), |
|
316 |
(0x2000000000040001), |
|
317 |
(0x2000000000400001), |
|
318 |
(0x2000000004000001), |
|
319 |
(0x2000000040000001), |
|
320 |
(0x2000000400000001), |
|
321 |
(0x2000004000000001), |
|
322 |
(0x2000040000000001); |
|
1
by brian
clean slate |
323 |
|
512
by Brian Aker
Adding back more test cases. |
324 |
SELECT HEX(a) FROM t2 WHERE a IN (0xBB3C3E98175D33C8, 42); |
1
by brian
clean slate |
325 |
|
326 |
SELECT HEX(a) FROM t2 WHERE a IN |
|
512
by Brian Aker
Adding back more test cases. |
327 |
(0xBB3C3E98175D33C8, |
328 |
0x2fffffffffffffff, |
|
329 |
0x2000000000000000, |
|
330 |
0x2000000000000400, |
|
331 |
0x2000000000000401, |
|
1
by brian
clean slate |
332 |
42); |
333 |
||
334 |
SELECT HEX(a) FROM t2 WHERE a IN |
|
512
by Brian Aker
Adding back more test cases. |
335 |
(0x7fffffffffffffff, |
336 |
0x2000000000000001); |
|
337 |
SELECT HEX(a) FROM t2 WHERE a IN |
|
338 |
(0x2ffffffffffffffe, |
|
339 |
0x2fffffffffffffff); |
|
340 |
SELECT HEX(a) FROM t2 WHERE a IN |
|
341 |
(0x2ffffffffffffffe, |
|
342 |
0x2fffffffffffffff, |
|
1
by brian
clean slate |
343 |
'abc'); |
344 |
||
512
by Brian Aker
Adding back more test cases. |
345 |
CREATE TABLE t3 (a BIGINT); |
1
by brian
clean slate |
346 |
INSERT INTO t3 VALUES (9223372036854775551); |
347 |
||
348 |
SELECT HEX(a) FROM t3 WHERE a IN (9223372036854775807, 42); |
|
349 |
||
350 |
CREATE TABLE t4 (a DATE); |
|
351 |
INSERT INTO t4 VALUES ('1972-02-06'), ('1972-07-29'); |
|
352 |
SELECT * FROM t4 WHERE a IN ('1972-02-06','19772-07-29'); |
|
353 |
||
354 |
DROP TABLE t1,t2,t3,t4; |
|
355 |
||
356 |
#
|
|
357 |
# BUG#27362: IN with a decimal expression that may return NULL
|
|
358 |
#
|
|
359 |
||
360 |
CREATE TABLE t1 (id int not null); |
|
361 |
INSERT INTO t1 VALUES (1),(2); |
|
362 |
||
363 |
SELECT id FROM t1 WHERE id IN(4564, (SELECT IF(1=0,1,1/0)) ); |
|
364 |
||
365 |
DROP TABLE t1; |
|
366 |
||
367 |
--echo End of 5.0 tests |
|
368 |
||
369 |
||
370 |
#
|
|
371 |
# Bug#18360: Type aggregation for IN and CASE may lead to a wrong result
|
|
372 |
#
|
|
1063.9.3
by Brian Aker
Partial fix for tests for tmp |
373 |
create TEMPORARY table t1(f1 char(1)) ENGINE=MYISAM; |
1
by brian
clean slate |
374 |
insert into t1 values ('a'),('b'),('1'); |
375 |
select f1 from t1 where f1 in ('a',1); |
|
376 |
select f1, case f1 when 'a' then '+' when 1 then '-' end from t1; |
|
377 |
create index t1f1_idx on t1(f1); |
|
378 |
select f1 from t1 where f1 in ('a',1); |
|
379 |
explain select f1 from t1 where f1 in ('a',1); |
|
380 |
select f1 from t1 where f1 in ('a','b'); |
|
381 |
explain select f1 from t1 where f1 in ('a','b'); |
|
382 |
select f1 from t1 where f1 in (2,1); |
|
383 |
explain select f1 from t1 where f1 in (2,1); |
|
1063.9.3
by Brian Aker
Partial fix for tests for tmp |
384 |
create TEMPORARY table t2(f2 int, index t2f2(f2)) ENGINE=MYISAM; |
1
by brian
clean slate |
385 |
insert into t2 values(0),(1),(2); |
386 |
select f2 from t2 where f2 in ('a',2); |
|
387 |
explain select f2 from t2 where f2 in ('a',2); |
|
388 |
select f2 from t2 where f2 in ('a','b'); |
|
389 |
explain select f2 from t2 where f2 in ('a','b'); |
|
390 |
select f2 from t2 where f2 in (1,'b'); |
|
391 |
explain select f2 from t2 where f2 in (1,'b'); |
|
392 |
drop table t1, t2; |
|
393 |
||
394 |
#
|
|
395 |
# Bug #31075: crash in get_func_mm_tree
|
|
396 |
#
|
|
397 |
||
896.5.1
by Jay Pipes
Removes the TIME column type and related time functions. |
398 |
create table t1 (a datetime, key(a)); |
1
by brian
clean slate |
399 |
insert into t1 values (),(),(),(),(),(),(),(),(),(); |
400 |
select a from t1 where a not in (a,a,a) group by a; |
|
401 |
drop table t1; |
|
402 |
||
403 |
--echo End of 5.1 tests |