~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
#---------------- Index merge test 2 -------------------------------------------
2
SET SESSION STORAGE_ENGINE = InnoDB;
3
drop table if exists t1,t2;
4
create table t1
5
(
6
key1 int not null,
7
key2 int not null,
8
INDEX i1(key1),
9
INDEX i2(key2)
10
);
11
explain select * from t1 where key1 < 5 or key2 > 197;
12
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
13
1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	8	Using sort_union(i1,i2); Using where
14
select * from t1 where key1 < 5 or key2 > 197;
15
key1	key2
16
0	200
17
1	199
18
2	198
19
3	197
20
4	196
21
explain select * from t1 where key1 < 3 or key2 > 195;
22
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
23
1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	8	Using sort_union(i1,i2); Using where
24
select * from t1 where key1 < 3 or key2 > 195;
25
key1	key2
26
0	200
27
1	199
28
2	198
29
3	197
30
4	196
764 by Brian Aker
Fixed index_merge_innodb test.
31
alter table t1 add str1 char (100) not null,
1 by brian
clean slate
32
add zeroval int not null default 0,
764 by Brian Aker
Fixed index_merge_innodb test.
33
add str2 char (100) not null,
34
add str3 char (100) not null;
1 by brian
clean slate
35
update t1 set str1='aaa', str2='bbb', str3=concat(key2, '-', key1 div 2, '_' ,if(key1 mod 2 = 0, 'a', 'A'));
36
alter table t1 add primary key (str1, zeroval, str2, str3);
37
explain select * from t1 where key1 < 5 or key2 > 197;
38
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
39
1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	8	Using sort_union(i1,i2); Using where
40
select * from t1 where key1 < 5 or key2 > 197;
41
key1	key2	str1	zeroval	str2	str3
42
4	196	aaa	0	bbb	196-2_a
43
3	197	aaa	0	bbb	197-1_A
44
2	198	aaa	0	bbb	198-1_a
45
1	199	aaa	0	bbb	199-0_A
46
0	200	aaa	0	bbb	200-0_a
47
explain select * from t1 where key1 < 3 or key2 > 195;
48
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
49
1	SIMPLE	t1	index_merge	i1,i2	i1,i2	4,4	NULL	8	Using sort_union(i1,i2); Using where
50
select * from t1 where key1 < 3 or key2 > 195;
51
key1	key2	str1	zeroval	str2	str3
52
4	196	aaa	0	bbb	196-2_a
53
3	197	aaa	0	bbb	197-1_A
54
2	198	aaa	0	bbb	198-1_a
55
1	199	aaa	0	bbb	199-0_A
56
0	200	aaa	0	bbb	200-0_a
57
drop table t1;
58
create table t1 (
59
pk    integer not null auto_increment primary key,
60
key1  integer,
61
key2  integer not null,
62
filler char  (200),
63
index (key1),
64
index (key2)
65
);
66
show warnings;
67
Level	Code	Message
68
explain select pk from t1 where key1 = 1 and key2 = 1;
69
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
70
1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,4	NULL	1	Using intersect(key1,key2); Using where; Using index
71
select pk from t1 where key2 = 1 and key1 = 1;
72
pk
73
26
74
27
75
select pk from t1 ignore index(key1,key2) where key2 = 1 and key1 = 1;
76
pk
77
26
78
27
79
drop table t1;
80
create table t1 (
81
pk int primary key auto_increment,
82
key1a  int,
83
key2a  int,
84
key1b  int,
85
key2b  int,
86
dummy1 int,
87
dummy2 int,
88
dummy3 int,
89
dummy4 int,
90
key3a  int,
91
key3b  int,
92
filler1 char (200),
93
index i1(key1a, key1b),
94
index i2(key2a, key2b),
95
index i3(key3a, key3b)
1063.9.3 by Brian Aker
Partial fix for tests for tmp
96
);
1 by brian
clean slate
97
create table t2 (a int);
98
insert into t2 values (0),(1),(2),(3),(4),(NULL);
99
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
100
select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
101
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
102
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
103
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
104
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
105
analyze table t1;
106
Table	Op	Msg_type	Msg_text
107
test.t1	analyze	status	OK
108
select count(*) from t1;
109
count(*)
110
5184
1063.9.4 by Stewart Smith
Fix index_merge2.inc for myisam temp only. Needs to be non-myisam table as there are queries which require opening the table multiple times
111
explain select count(*) from t1 where
1 by brian
clean slate
112
key1a = 2 and key1b is null and  key2a = 2 and key2b is null;
1063.9.4 by Stewart Smith
Fix index_merge2.inc for myisam temp only. Needs to be non-myisam table as there are queries which require opening the table multiple times
113
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
114
1	SIMPLE	t1	index_merge	i1,i2	i1,i2	10,10	NULL	#	Using intersect(i1,i2); Using where; Using index
1 by brian
clean slate
115
select count(*) from t1 where
116
key1a = 2 and key1b is null and key2a = 2 and key2b is null;
117
count(*)
118
4
1063.9.4 by Stewart Smith
Fix index_merge2.inc for myisam temp only. Needs to be non-myisam table as there are queries which require opening the table multiple times
119
explain select count(*) from t1 where
1 by brian
clean slate
120
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
1063.9.4 by Stewart Smith
Fix index_merge2.inc for myisam temp only. Needs to be non-myisam table as there are queries which require opening the table multiple times
121
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
122
1	SIMPLE	t1	index_merge	i1,i3	i1,i3	10,10	NULL	#	Using intersect(i1,i3); Using where; Using index
1 by brian
clean slate
123
select count(*) from t1 where
124
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
125
count(*)
126
4
127
drop table t1,t2;
128
create table t1 (
129
id1 int,
130
id2 date ,
131
index idx2 (id1,id2),
132
index idx1 (id2)
133
);
134
insert into t1 values(1,'20040101'), (2,'20040102');
135
select * from t1  where id1 = 1  and id2= '20040101';
136
id1	id2
137
1	2004-01-01
138
drop table t1;
139
create table t1
140
(
141
key1 int not null, 
142
key2 int not null default 0,
143
key3 int not null default 0
144
);
145
insert into t1(key1) values (1),(2),(3),(4),(5),(6),(7),(8);
146
set @d=8;
910.4.13 by Stewart Smith
batch up more INSERTs into transactions to help tests run quicker.
147
begin;
148
insert into t1 (key1) select key1+@d from t1;
149
set @d=@d*2;
150
insert into t1 (key1) select key1+@d from t1;
151
set @d=@d*2;
152
insert into t1 (key1) select key1+@d from t1;
153
set @d=@d*2;
154
insert into t1 (key1) select key1+@d from t1;
155
set @d=@d*2;
156
insert into t1 (key1) select key1+@d from t1;
157
set @d=@d*2;
158
insert into t1 (key1) select key1+@d from t1;
159
set @d=@d*2;
160
insert into t1 (key1) select key1+@d from t1;
161
set @d=@d*2;
162
commit;
1 by brian
clean slate
163
alter table t1 add index i2(key2);
164
alter table t1 add index i3(key3);
165
update t1 set key2=key1,key3=key1;
166
explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
167
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
168
1	SIMPLE	t1	index_merge	i2,i3	i3,i2	4,4	NULL	9	Using sort_union(i3,i2); Using where
169
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
170
key1	key2	key3
171
31	31	31
172
32	32	32
173
33	33	33
174
34	34	34
175
35	35	35
176
36	36	36
177
37	37	37
178
38	38	38
179
39	39	39
180
drop table t1;
181
#---------------- 2-sweeps read Index merge test 2 -------------------------------
182
SET SESSION STORAGE_ENGINE = InnoDB;
183
drop table if exists t1;
184
create table t1 (
185
pk int primary key,
186
key1 int,
187
key2 int,
188
filler char(200),
189
filler2 char(200),
190
index(key1),
191
index(key2)
192
);
193
select * from t1 where (key1 >= 2 and key1 <= 10) or (pk >= 4 and pk <=8 );
194
pk	key1	key2	filler	filler2
195
2	2	2	filler-data	filler-data-2
196
3	3	3	filler-data	filler-data-2
197
9	9	9	filler-data	filler-data-2
198
10	10	10	filler-data	filler-data-2
199
4	4	4	filler-data	filler-data-2
200
5	5	5	filler-data	filler-data-2
201
6	6	6	filler-data	filler-data-2
202
7	7	7	filler-data	filler-data-2
203
8	8	8	filler-data	filler-data-2
204
set @maxv=1000;
205
select * from t1 where
206
(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk > @maxv-10)
207
or key1=18 or key1=60;
208
pk	key1	key2	filler	filler2
209
18	18	18	filler-data	filler-data-2
210
60	60	60	filler-data	filler-data-2
211
1	1	1	filler-data	filler-data-2
212
2	2	2	filler-data	filler-data-2
213
3	3	3	filler-data	filler-data-2
214
4	4	4	filler-data	filler-data-2
215
11	11	11	filler-data	filler-data-2
216
12	12	12	filler-data	filler-data-2
217
13	13	13	filler-data	filler-data-2
218
14	14	14	filler-data	filler-data-2
219
50	50	50	filler-data	filler-data-2
220
51	51	51	filler-data	filler-data-2
221
52	52	52	filler-data	filler-data-2
222
53	53	53	filler-data	filler-data-2
223
54	54	54	filler-data	filler-data-2
224
991	991	991	filler-data	filler-data-2
225
992	992	992	filler-data	filler-data-2
226
993	993	993	filler-data	filler-data-2
227
994	994	994	filler-data	filler-data-2
228
995	995	995	filler-data	filler-data-2
229
996	996	996	filler-data	filler-data-2
230
997	997	997	filler-data	filler-data-2
231
998	998	998	filler-data	filler-data-2
232
999	999	999	filler-data	filler-data-2
233
1000	1000	1000	filler-data	filler-data-2
234
select * from t1 where
235
(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk > @maxv-10)
236
or key1 < 3 or key1 > @maxv-11;
237
pk	key1	key2	filler	filler2
238
990	990	990	filler-data	filler-data-2
239
1	1	1	filler-data	filler-data-2
240
2	2	2	filler-data	filler-data-2
241
3	3	3	filler-data	filler-data-2
242
4	4	4	filler-data	filler-data-2
243
11	11	11	filler-data	filler-data-2
244
12	12	12	filler-data	filler-data-2
245
13	13	13	filler-data	filler-data-2
246
14	14	14	filler-data	filler-data-2
247
50	50	50	filler-data	filler-data-2
248
51	51	51	filler-data	filler-data-2
249
52	52	52	filler-data	filler-data-2
250
53	53	53	filler-data	filler-data-2
251
54	54	54	filler-data	filler-data-2
252
991	991	991	filler-data	filler-data-2
253
992	992	992	filler-data	filler-data-2
254
993	993	993	filler-data	filler-data-2
255
994	994	994	filler-data	filler-data-2
256
995	995	995	filler-data	filler-data-2
257
996	996	996	filler-data	filler-data-2
258
997	997	997	filler-data	filler-data-2
259
998	998	998	filler-data	filler-data-2
260
999	999	999	filler-data	filler-data-2
261
1000	1000	1000	filler-data	filler-data-2
262
select * from t1 where
263
(pk < 5) or (pk > 10 and pk < 15) or (pk >= 50 and pk < 55 ) or (pk > @maxv-10)
264
or
265
(key1 < 5) or (key1 > 10 and key1 < 15) or (key1 >= 50 and key1 < 55 ) or (key1 > @maxv-10);
266
pk	key1	key2	filler	filler2
267
1	1	1	filler-data	filler-data-2
268
2	2	2	filler-data	filler-data-2
269
3	3	3	filler-data	filler-data-2
270
4	4	4	filler-data	filler-data-2
271
11	11	11	filler-data	filler-data-2
272
12	12	12	filler-data	filler-data-2
273
13	13	13	filler-data	filler-data-2
274
14	14	14	filler-data	filler-data-2
275
50	50	50	filler-data	filler-data-2
276
51	51	51	filler-data	filler-data-2
277
52	52	52	filler-data	filler-data-2
278
53	53	53	filler-data	filler-data-2
279
54	54	54	filler-data	filler-data-2
280
991	991	991	filler-data	filler-data-2
281
992	992	992	filler-data	filler-data-2
282
993	993	993	filler-data	filler-data-2
283
994	994	994	filler-data	filler-data-2
284
995	995	995	filler-data	filler-data-2
285
996	996	996	filler-data	filler-data-2
286
997	997	997	filler-data	filler-data-2
287
998	998	998	filler-data	filler-data-2
288
999	999	999	filler-data	filler-data-2
289
1000	1000	1000	filler-data	filler-data-2
290
select * from t1 where
291
(pk > 10 and pk < 15) or (pk >= 50 and pk < 55 )
292
or
293
(key1 < 5) or (key1 > @maxv-10);
294
pk	key1	key2	filler	filler2
295
1	1	1	filler-data	filler-data-2
296
2	2	2	filler-data	filler-data-2
297
3	3	3	filler-data	filler-data-2
298
4	4	4	filler-data	filler-data-2
299
991	991	991	filler-data	filler-data-2
300
992	992	992	filler-data	filler-data-2
301
993	993	993	filler-data	filler-data-2
302
994	994	994	filler-data	filler-data-2
303
995	995	995	filler-data	filler-data-2
304
996	996	996	filler-data	filler-data-2
305
997	997	997	filler-data	filler-data-2
306
998	998	998	filler-data	filler-data-2
307
999	999	999	filler-data	filler-data-2
308
1000	1000	1000	filler-data	filler-data-2
309
11	11	11	filler-data	filler-data-2
310
12	12	12	filler-data	filler-data-2
311
13	13	13	filler-data	filler-data-2
312
14	14	14	filler-data	filler-data-2
313
50	50	50	filler-data	filler-data-2
314
51	51	51	filler-data	filler-data-2
315
52	52	52	filler-data	filler-data-2
316
53	53	53	filler-data	filler-data-2
317
54	54	54	filler-data	filler-data-2
318
drop table t1;
319
#---------------- Clustered PK ROR-index_merge tests -----------------------------
320
SET SESSION STORAGE_ENGINE = InnoDB;
321
drop table if exists  t1;
322
create table t1
323
(
324
pk1 int not null,
325
pk2 int not null,
326
key1 int not null,
327
key2 int not null,
328
pktail1ok  int not null,
329
pktail2ok  int not null,
330
pktail3bad int not null,
331
pktail4bad int not null,
332
pktail5bad int not null,
333
pk2copy int not null,
334
badkey  int not null,
335
filler1 char (200),
336
filler2 char (200),
337
key (key1),
338
key (key2),
339
/* keys with tails from CPK members */
340
key (pktail1ok, pk1),
341
key (pktail2ok, pk1, pk2),
342
key (pktail3bad, pk2, pk1),
343
key (pktail4bad, pk1, pk2copy),
344
key (pktail5bad, pk1, pk2, pk2copy),
345
primary key (pk1, pk2)
346
);
347
explain select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
348
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
349
1	SIMPLE	t1	range	PRIMARY,key1	PRIMARY	8	NULL	9	Using where
350
select * from t1 where pk1 = 1 and pk2 < 80  and key1=0;
351
pk1	pk2	key1	key2	pktail1ok	pktail2ok	pktail3bad	pktail4bad	pktail5bad	pk2copy	badkey	filler1	filler2
352
1	10	0	0	0	0	0	0	0	10	0	filler-data-10	filler2
353
1	11	0	0	0	0	0	0	0	11	0	filler-data-11	filler2
354
1	12	0	0	0	0	0	0	0	12	0	filler-data-12	filler2
355
1	13	0	0	0	0	0	0	0	13	0	filler-data-13	filler2
356
1	14	0	0	0	0	0	0	0	14	0	filler-data-14	filler2
357
1	15	0	0	0	0	0	0	0	15	0	filler-data-15	filler2
358
1	16	0	0	0	0	0	0	0	16	0	filler-data-16	filler2
359
1	17	0	0	0	0	0	0	0	17	0	filler-data-17	filler2
360
1	18	0	0	0	0	0	0	0	18	0	filler-data-18	filler2
361
1	19	0	0	0	0	0	0	0	19	0	filler-data-19	filler2
362
explain select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
363
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
364
1	SIMPLE	t1	index_merge	key1,key2	key1,key2	4,4	NULL	1	Using intersect(key1,key2); Using where; Using index
365
select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1;
366
pk1	pk2
367
95	50
368
95	51
369
95	52
370
95	53
371
95	54
372
95	55
373
95	56
374
95	57
375
95	58
376
95	59
377
explain select * from t1 where badkey=1 and key1=10;
378
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
379
1	SIMPLE	t1	ref	key1	key1	4	const	100	Using where
380
explain select * from t1 where pk1 < 7500 and key1 = 10;
381
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
382
1	SIMPLE	t1	index_merge	PRIMARY,key1	key1,PRIMARY	4,4	NULL	ROWS	Using intersect(key1,PRIMARY); Using where
383
explain select * from t1 where pktail1ok=1 and key1=10;
384
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
385
1	SIMPLE	t1	index_merge	key1,pktail1ok	key1,pktail1ok	4,4	NULL	1	Using intersect(key1,pktail1ok); Using where
386
explain select * from t1 where pktail2ok=1 and key1=10;
387
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
388
1	SIMPLE	t1	index_merge	key1,pktail2ok	key1,pktail2ok	4,4	NULL	1	Using intersect(key1,pktail2ok); Using where
389
explain select * from t1 where (pktail2ok=1 and pk1< 50000) or key1=10;
390
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
391
1	SIMPLE	t1	index_merge	PRIMARY,key1,pktail2ok	pktail2ok,key1	8,4	NULL	199	Using sort_union(pktail2ok,key1); Using where
392
explain select * from t1 where pktail3bad=1 and key1=10;
393
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
394
1	SIMPLE	t1	ref	key1,pktail3bad	key1	4	const	100	Using where
395
explain select * from t1 where pktail4bad=1 and key1=10;
396
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
397
1	SIMPLE	t1	ref	key1,pktail4bad	key1	4	const	100	Using where
398
explain select * from t1 where pktail5bad=1 and key1=10;
399
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
400
1	SIMPLE	t1	ref	key1,pktail5bad	key1	4	const	100	Using where
401
explain select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
402
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
403
1	SIMPLE	t1	index_merge	key1,key2	key1,key2	4,4	NULL	1	Using intersect(key1,key2); Using where; Using index
404
select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10;
405
pk1	pk2	key1	key2
406
95	50	10	10
407
95	51	10	10
408
95	52	10	10
409
95	53	10	10
410
95	54	10	10
411
95	55	10	10
412
95	56	10	10
413
95	57	10	10
414
95	58	10	10
415
95	59	10	10
416
drop table t1;
417
create table t1
418
(
419
RUNID varchar(22),
420
SUBMITNR varchar(5),
421
ORDERNR char(1),
422
PROGRAMM varchar(8),
423
TESTID varchar(4),
424
UCCHECK char(1),
425
ETEXT varchar(80),
426
ETEXT_TYPE char(1),
427
INFO char(1),
764 by Brian Aker
Fixed index_merge_innodb test.
428
SEVERITY int,
1 by brian
clean slate
429
TADIRFLAG char(1),
430
PRIMARY KEY  (RUNID,SUBMITNR,ORDERNR,PROGRAMM,TESTID,UCCHECK),
431
KEY `TVERM~KEY`  (PROGRAMM,TESTID,UCCHECK)
764 by Brian Aker
Fixed index_merge_innodb test.
432
);
1 by brian
clean slate
433
update t1 set `ETEXT` = '', `ETEXT_TYPE`='', `INFO`='', `SEVERITY`='', `TADIRFLAG`=''
434
WHERE
435
`RUNID`= '' AND `SUBMITNR`= '' AND `ORDERNR`='' AND `PROGRAMM`='' AND
436
`TESTID`='' AND `UCCHECK`='';
437
drop table t1;