~drizzle-trunk/drizzle/development

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