~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/range.test

  • Committer: Monty Taylor
  • Date: 2008-08-15 20:01:00 UTC
  • Revision ID: monty@inaugust.com-20080815200100-tht5d421maap6kjp
Updated POTFILES with local_infile.c.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
# Problem with range optimizer
3
 
#
4
 
 
5
 
--disable_warnings
6
 
drop table if exists t1, t2, t3;
7
 
--enable_warnings
8
 
 
9
 
CREATE TABLE t1 (
10
 
  event_date date NULL,
11
 
  type int DEFAULT '0' NOT NULL,
12
 
  event_id int DEFAULT '0' NOT NULL,
13
 
  PRIMARY KEY (event_date,type,event_id)
14
 
);
15
 
 
16
 
INSERT INTO t1 VALUES ('1999-07-10',100100,24), ('1999-07-11',100100,25),
17
 
('1999-07-13',100600,0), ('1999-07-13',100600,4), ('1999-07-13',100600,26),
18
 
('1999-07-14',100600,10), ('1999-07-15',100600,16), ('1999-07-15',100800,45),
19
 
('1999-07-15',101000,47), ('1999-07-16',100800,46), ('1999-07-20',100600,5),
20
 
('1999-07-20',100600,27), ('1999-07-21',100600,11), ('1999-07-22',100600,17),
21
 
('1999-07-23',100100,39), ('1999-07-24',100100,39), ('1999-07-24',100500,40),
22
 
('1999-07-25',100100,39), ('1999-07-27',100600,1), ('1999-07-27',100600,6),
23
 
('1999-07-27',100600,28), ('1999-07-28',100600,12), ('1999-07-29',100500,41),
24
 
('1999-07-29',100600,18), ('1999-07-30',100500,41), ('1999-07-31',100500,41),
25
 
('1999-08-01',100700,34), ('1999-08-03',100600,7), ('1999-08-03',100600,29),
26
 
('1999-08-04',100600,13), ('1999-08-05',100500,42), ('1999-08-05',100600,19),
27
 
('1999-08-06',100500,42), ('1999-08-07',100500,42), ('1999-08-08',100500,42),
28
 
('1999-08-10',100600,2), ('1999-08-10',100600,9), ('1999-08-10',100600,30),
29
 
('1999-08-11',100600,14), ('1999-08-12',100600,20), ('1999-08-17',100500,8),
30
 
('1999-08-17',100600,31), ('1999-08-18',100600,15), ('1999-08-19',100600,22),
31
 
('1999-08-24',100600,3), ('1999-08-24',100600,32), ('1999-08-27',100500,43),
32
 
('1999-08-31',100600,33), ('1999-09-17',100100,37), ('1999-09-18',100100,37),
33
 
('1999-09-19',100100,37), ('2000-12-18',100700,38);
34
 
 
35
 
select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date;
36
 
explain select event_date,type,event_id from t1 WHERE type = 100601 and event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date;
37
 
select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date <= "1999-07-15" AND (type=100600 OR type=100100) or event_date >= "1999-07-01" AND event_date <= "1999-07-15" AND type=100099;
38
 
drop table t1;
39
 
 
40
 
CREATE TABLE t1 (
41
 
  PAPER_ID int DEFAULT '0' NOT NULL,
42
 
  YEAR int DEFAULT '0' NOT NULL,
43
 
  ISSUE int DEFAULT '0' NOT NULL,
44
 
  CLOSED int DEFAULT '0' NOT NULL,
45
 
  ISS_DATE date,
46
 
  PRIMARY KEY (PAPER_ID,YEAR,ISSUE)
47
 
);
48
 
INSERT INTO t1 VALUES (3,1999,34,0,'1999-07-12'), (1,1999,111,0,'1999-03-23'),
49
 
                      (1,1999,222,0,'1999-03-23'), (3,1999,33,0,'1999-07-12'),
50
 
                      (3,1999,32,0,'1999-07-12'), (3,1999,31,0,'1999-07-12'),
51
 
                      (3,1999,30,0,'1999-07-12'), (3,1999,29,0,'1999-07-12'),
52
 
                      (3,1999,28,0,'1999-07-12'), (1,1999,40,1,'1999-05-01'),
53
 
                      (1,1999,41,1,'1999-05-01'), (1,1999,42,1,'1999-05-01'),
54
 
                      (1,1999,46,1,'1999-05-01'), (1,1999,47,1,'1999-05-01'),
55
 
                      (1,1999,48,1,'1999-05-01'), (1,1999,49,1,'1999-05-01'),
56
 
                      (1,1999,50,0,'1999-05-01'), (1,1999,51,0,'1999-05-01'),
57
 
                      (1,1999,200,0,'1999-06-28'), (1,1999,52,0,'1999-06-28'),
58
 
                      (1,1999,53,0,'1999-06-28'), (1,1999,54,0,'1999-06-28'),
59
 
                      (1,1999,55,0,'1999-06-28'), (1,1999,56,0,'1999-07-01'),
60
 
                      (1,1999,57,0,'1999-07-01'), (1,1999,58,0,'1999-07-01'),
61
 
                      (1,1999,59,0,'1999-07-01'), (1,1999,60,0,'1999-07-01'),
62
 
                      (3,1999,35,0,'1999-07-12');
63
 
select YEAR,ISSUE from t1 where PAPER_ID=3 and (YEAR>1999 or (YEAR=1999 and ISSUE>28))  order by YEAR,ISSUE;
64
 
check table t1;
65
 
drop table t1;
66
 
 
67
 
CREATE TABLE t1 (
68
 
  id int NOT NULL auto_increment,
69
 
  parent_id int DEFAULT '0' NOT NULL,
70
 
  level int DEFAULT '0' NOT NULL,
71
 
  PRIMARY KEY (id),
72
 
  KEY parent_id (parent_id),
73
 
  KEY level (level)
74
 
);
75
 
INSERT INTO t1 VALUES (1,0,0), (3,1,1), (4,1,1), (8,2,2), (9,2,2), (17,3,2),
76
 
(22,4,2), (24,4,2), (28,5,2), (29,5,2), (30,5,2), (31,6,2), (32,6,2), (33,6,2),
77
 
(203,7,2), (202,7,2), (20,3,2), (157,0,0), (193,5,2), (40,7,2), (2,1,1),
78
 
(15,2,2), (6,1,1), (34,6,2), (35,6,2), (16,3,2), (7,1,1), (36,7,2), (18,3,2),
79
 
(26,5,2), (27,5,2), (183,4,2), (38,7,2), (25,5,2), (37,7,2), (21,4,2),
80
 
(19,3,2), (5,1,1), (179,5,2);
81
 
SELECT * FROM t1 WHERE level = 1 AND parent_id = 1;
82
 
# The following select returned 0 rows in 3.23.8
83
 
SELECT * FROM t1 WHERE level = 1 AND parent_id = 1 order by id;
84
 
drop table t1;
85
 
 
86
 
#
87
 
# Testing of bug in range optimizer with many key parts and > and <
88
 
#
89
 
 
90
 
create table t1(
91
 
                Satellite               varchar(25)     not null,
92
 
                SensorMode              varchar(25)     not null,
93
 
                FullImageCornersUpperLeftLongitude      double  not null,
94
 
                FullImageCornersUpperRightLongitude     double  not null,
95
 
                FullImageCornersUpperRightLatitude      double  not null,
96
 
                FullImageCornersLowerRightLatitude      double  not null,
97
 
                index two (Satellite, SensorMode, FullImageCornersUpperLeftLongitude, FullImageCornersUpperRightLongitude, FullImageCornersUpperRightLatitude, FullImageCornersLowerRightLatitude));
98
 
 
99
 
insert into t1 values("OV-3","PAN1",91,-92,40,50);
100
 
insert into t1 values("OV-4","PAN1",91,-92,40,50);
101
 
 
102
 
select * from t1 where t1.Satellite = "OV-3" and t1.SensorMode = "PAN1" and t1.FullImageCornersUpperLeftLongitude > -90.000000 and t1.FullImageCornersUpperRightLongitude < -82.000000;
103
 
drop table t1;
104
 
 
105
 
create table t1 ( aString char(100) not null default "", key aString (aString(10)) );
106
 
insert t1 (aString) values ( "believe in myself" ), ( "believe" ), ("baaa" ), ( "believe in love");
107
 
select * from t1 where aString < "believe in myself" order by aString;
108
 
select * from t1 where aString > "believe in love" order by aString;
109
 
alter table t1 drop key aString;
110
 
select * from t1 where aString < "believe in myself" order by aString;
111
 
select * from t1 where aString > "believe in love" order by aString;
112
 
drop table t1;
113
 
 
114
 
#
115
 
# Problem with binary strings
116
 
#
117
 
 
118
 
CREATE TEMPORARY TABLE t1 (
119
 
  t1ID int NOT NULL auto_increment,
120
 
  art varbinary(1) NOT NULL default '',
121
 
  KNR char(5) NOT NULL default '',
122
 
  RECHNR char(6) NOT NULL default '',
123
 
  POSNR char(2) NOT NULL default '',
124
 
  ARTNR char(10) NOT NULL default '',
125
 
  TEX char(70) NOT NULL default '',
126
 
  PRIMARY KEY  (t1ID),
127
 
  KEY IdxArt (art),
128
 
  KEY IdxKnr (KNR),
129
 
  KEY IdxArtnr (ARTNR)
130
 
) ENGINE=MyISAM;
131
 
 
132
 
INSERT INTO t1 (art) VALUES ('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
133
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
134
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
135
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
136
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
137
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
138
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
139
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
140
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
141
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
142
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
143
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
144
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
145
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
146
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
147
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
148
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
149
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
150
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
151
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
152
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
153
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
154
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
155
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
156
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
157
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
158
 
('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),('j'),('J'),
159
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
160
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
161
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
162
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
163
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
164
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
165
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
166
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
167
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
168
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),
169
 
('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j');
170
 
select count(*) from t1 where upper(art) = 'J';
171
 
select count(*) from t1 where art = 'J' or art = 'j';
172
 
select count(*) from t1 where art = 'j' or art = 'J';
173
 
select count(*) from t1 where art = 'j';
174
 
select count(*) from t1 where art = 'J';
175
 
drop table t1;
176
 
#
177
 
# BETWEEN problems
178
 
#
179
 
create table t1 (x int, y int, index(x), index(y));
180
 
insert into t1 (x) values (1),(2),(3),(4),(5),(6),(7),(8),(9);
181
 
update t1 set y=x;
182
 
# between with only one end fixed
183
 
explain select * from t1, t1 t2 where t1.y = 8 and t2.x between 7 and t1.y+0;
184
 
explain select * from t1, t1 t2 where t1.y = 8 and t2.x >= 7 and t2.x <= t1.y+0;
185
 
# between with both expressions on both ends
186
 
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between t1.y-1 and t1.y+1;
187
 
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= t1.y-1 and t2.x <= t1.y+1;
188
 
# equation propagation
189
 
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 0 and t1.y;
190
 
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 0 and t2.x <= t1.y;
191
 
# testing IN
192
 
explain select count(*) from t1 where x in (1);
193
 
explain select count(*) from t1 where x in (1,2);
194
 
drop table t1;
195
 
 
196
 
#
197
 
# bug #1172: "Force index" option caused server crash
198
 
#
199
 
CREATE TABLE t1 (key1 int NOT NULL default '0', KEY i1 (key1));
200
 
INSERT INTO t1 VALUES (0),(0),(0),(0),(0),(1),(1);
201
 
CREATE TABLE t2 (keya int NOT NULL default '0', KEY j1 (keya));
202
 
INSERT INTO t2 VALUES (0),(0),(1),(1),(2),(2);
203
 
explain select * from t1, t2 where (t1.key1 <t2.keya + 1) and t2.keya=3;
204
 
explain select * from t1 force index(i1), t2 force index(j1) where 
205
 
 (t1.key1 <t2.keya + 1) and t2.keya=3;
206
 
DROP TABLE t1,t2;
207
 
 
208
 
#
209
 
# bug #1724: use RANGE on more selective column instead of REF on less
210
 
# selective
211
 
 
212
 
CREATE TEMPORARY TABLE t1 (
213
 
  a int default NULL,
214
 
  b int default NULL,
215
 
  KEY a (a),
216
 
  KEY b (b)
217
 
) ENGINE=MyISAM;
218
 
 
219
 
 
220
 
INSERT INTO t1 VALUES
221
 
(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(10,2),
222
 
(13,2),(14,2),(15,2),(16,2),(17,3),(17,3),(16,3),(17,3),(19,3),(20,3),
223
 
(21,4),(22,5),(23,5),(24,5),(25,5),(26,5),(30,5),(31,5),(32,5),(33,5),
224
 
(33,5),(33,5),(33,5),(33,5),(34,5),(35,5);
225
 
 
226
 
# we expect that optimizer will choose index on A
227
 
EXPLAIN SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
228
 
SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
229
 
DROP TABLE t1;
230
 
 
231
 
#
232
 
# Test problem with range optimzer and sub ranges
233
 
#
234
 
 
235
 
CREATE TABLE t1 (a int, b int, c int, INDEX (c,a,b));
236
 
INSERT INTO t1 VALUES (1,0,0),(1,0,0),(1,0,0);
237
 
INSERT INTO t1 VALUES (0,1,0),(0,1,0),(0,1,0);
238
 
# -- First reports 3; second reports 6
239
 
SELECT COUNT(*) FROM t1 WHERE (c=0 and a=1) or (c=0 and b=1);
240
 
SELECT COUNT(*) FROM t1 WHERE (c=0 and b=1) or (c=0 and a=1);
241
 
DROP TABLE t1;
242
 
 
243
 
#
244
 
# Test problem with range optimization over overlapping ranges (#2448)
245
 
#
246
 
 
247
 
CREATE TABLE t1 ( a int not null, b int not null, INDEX ab(a,b) );
248
 
INSERT INTO t1 VALUES (47,1), (70,1), (15,1), (15, 4);
249
 
SELECT * FROM t1
250
 
WHERE
251
 
(
252
 
    ( b =1 AND a BETWEEN 14 AND 21 ) OR
253
 
    ( b =2 AND a BETWEEN 16 AND 18 ) OR
254
 
    ( b =3 AND a BETWEEN 15 AND 19 ) OR
255
 
    (a BETWEEN 19 AND 47)
256
 
);
257
 
DROP TABLE t1;
258
 
 
259
 
#
260
 
# Test of problem with IN on many different keyparts. (Bug #4157)
261
 
#
262
 
 
263
 
CREATE TEMPORARY TABLE t1 (
264
 
id int NOT NULL AUTO_INCREMENT ,
265
 
line int NOT NULL default '0',
266
 
columnid int NOT NULL default '0',
267
 
owner int NOT NULL default '0',
268
 
ordinal int NOT NULL default '0',
269
 
showid int NOT NULL default '1',
270
 
tableid int NOT NULL default '1',
271
 
content int NOT NULL default '188',
272
 
PRIMARY KEY ( owner, id ) ,
273
 
KEY menu( owner, showid, columnid ) ,
274
 
KEY `COLUMN` ( owner, columnid, line ) ,
275
 
KEY `LINES` ( owner, tableid, content, id ) ,
276
 
KEY recount( owner, line ) 
277
 
) ENGINE = MYISAM;
278
 
 
279
 
INSERT into t1 (owner,id,columnid,line) values (11,15,15,1),(11,13,13,5);
280
 
 
281
 
SELECT id, columnid, tableid, content, showid, line, ordinal FROM t1 WHERE owner=11 AND ((columnid IN ( 15, 13, 14 ) AND line IN ( 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 31 )) OR (columnid IN ( 13, 14 ) AND line IN ( 15 ))) LIMIT 0 , 30;
282
 
drop table t1;
283
 
 
284
 
#
285
 
# test for a bug with in() and unique key
286
 
#
287
 
 
288
 
create  table t1 (id int primary key);
289
 
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9);
290
 
 
291
 
select id from t1 where id in (2,5,9) ;
292
 
select id from t1 where id=2 or id=5 or id=9 ;
293
 
drop table t1;
294
 
create table t1 ( id1 int not null, id2 int not null, idnull int null, c char(20), primary key (id1,id2));
295
 
insert into t1 values (0,1,NULL,"aaa"), (1,1,NULL,"aaa"), (2,1,NULL,"aaa"),
296
 
                      (3,1,NULL,"aaa"), (4,1,NULL,"aaa"), (5,1,NULL,"aaa"),
297
 
                      (6,1,NULL,"aaa"), (7,1,NULL,"aaa"), (8,1,NULL,"aaa"),
298
 
                      (9,1,NULL,"aaa"), (10,1,NULL,"aaa"), (11,1,NULL,"aaa"),
299
 
                      (12,1,NULL,"aaa"), (13,1,NULL,"aaa"), (14,1,NULL,"aaa"),
300
 
                      (15,1,NULL,"aaa"), (16,1,NULL,"aaa"), (17,1,NULL,"aaa"),
301
 
                      (18,1,NULL,"aaa"), (19,1,NULL,"aaa"), (20,1,NULL,"aaa");
302
 
select a.id1, b.idnull from t1 as a, t1 as b where a.id2=1 and a.id1=1 and b.id1=a.idnull order by b.id2 desc limit 1;
303
 
drop table t1;
304
 
 
305
 
 
306
 
#
307
 
# Problem with optimizing !=
308
 
#
309
 
 
310
 
create table t1 (
311
 
  id int not null auto_increment,
312
 
  name char(1) not null,
313
 
  uid int not null,
314
 
  primary key (id),
315
 
  index uid_index (uid));
316
 
  
317
 
create table t2 (
318
 
  id int not null auto_increment,
319
 
  name char(1) not null,
320
 
  uid int not null,
321
 
  primary key (id),
322
 
  index uid_index (uid));
323
 
  
324
 
insert into t1(id, uid, name) values(1, 0, ' ');
325
 
insert into t1(uid, name) values(0, ' ');
326
 
 
327
 
insert into t2(uid, name) select uid, name from t1;
328
 
insert into t1(uid, name) select uid, name from t2;
329
 
insert into t2(uid, name) select uid, name from t1;
330
 
insert into t1(uid, name) select uid, name from t2;
331
 
insert into t2(uid, name) select uid, name from t1;
332
 
insert into t1(uid, name) select uid, name from t2;
333
 
insert into t2(uid, name) select uid, name from t1;
334
 
insert into t1(uid, name) select uid, name from t2;
335
 
insert into t2(uid, name) select uid, name from t1;
336
 
insert into t1(uid, name) select uid, name from t2;
337
 
insert into t2(uid, name) select uid, name from t1;
338
 
insert into t2(uid, name) select uid, name from t1;
339
 
insert into t2(uid, name) select uid, name from t1;
340
 
insert into t2(uid, name) select uid, name from t1;
341
 
insert into t1(uid, name) select uid, name from t2;
342
 
 
343
 
delete from t2;
344
 
insert into t2(uid, name) values 
345
 
  (1, CHAR(64+1)),
346
 
  (2, CHAR(64+2)),
347
 
  (3, CHAR(64+3)),
348
 
  (4, CHAR(64+4)),
349
 
  (5, CHAR(64+5)),
350
 
  (6, CHAR(64+6)),
351
 
  (7, CHAR(64+7)),
352
 
  (8, CHAR(64+8)),
353
 
  (9, CHAR(64+9)),
354
 
  (10, CHAR(64+10)),
355
 
  (11, CHAR(64+11)),
356
 
  (12, CHAR(64+12)),
357
 
  (13, CHAR(64+13)),
358
 
  (14, CHAR(64+14)),
359
 
  (15, CHAR(64+15)),
360
 
  (16, CHAR(64+16)),
361
 
  (17, CHAR(64+17)),
362
 
  (18, CHAR(64+18)),
363
 
  (19, CHAR(64+19)),
364
 
  (20, CHAR(64+20)),
365
 
  (21, CHAR(64+21)),
366
 
  (22, CHAR(64+22)),
367
 
  (23, CHAR(64+23)),
368
 
  (24, CHAR(64+24)),
369
 
  (25, CHAR(64+25)),
370
 
  (26, CHAR(64+26));
371
 
 
372
 
insert into t1(uid, name) select uid, name from t2 order by uid;
373
 
 
374
 
delete from t2;
375
 
insert into t2(id, uid, name) select id, uid, name from t1;
376
 
 
377
 
select count(*) from t1;  
378
 
select count(*) from t2;
379
 
 
380
 
analyze table t1,t2;
381
 
 
382
 
--replace_column 9 #
383
 
explain select * from t1, t2  where t1.uid=t2.uid AND t1.uid > 0;
384
 
--replace_column 9 #
385
 
explain select * from t1, t2  where t1.uid=t2.uid AND t2.uid > 0;
386
 
--replace_column 9 #
387
 
explain select * from t1, t2  where t1.uid=t2.uid AND t1.uid != 0;
388
 
--replace_column 9 #
389
 
explain select * from t1, t2  where t1.uid=t2.uid AND t2.uid != 0;
390
 
 
391
 
select * from t1, t2  where t1.uid=t2.uid AND t1.uid > 0;
392
 
select * from t1, t2  where t1.uid=t2.uid AND t1.uid != 0;
393
 
 
394
 
drop table t1,t2;
395
 
 
396
 
# Fix for bug#4488 
397
 
#
398
 
create table t1 (x bigint not null);
399
 
insert into t1(x) values (0x0ffffffffffffff0);
400
 
insert into t1(x) values (0x0ffffffffffffff1);
401
 
select * from t1;
402
 
select count(*) from t1 where x>0;
403
 
select count(*) from t1 where x=0;
404
 
select count(*) from t1 where x<0;
405
 
select count(*) from t1 where x < -16;
406
 
select count(*) from t1 where x = -16;
407
 
select count(*) from t1 where x > -16;
408
 
select count(*) from t1 where x = 18446744073709551601;
409
 
 
410
 
 
411
 
create table t2 (x bigint not null);
412
 
insert into t2(x) values (-16);
413
 
insert into t2(x) values (-15);
414
 
select * from t2;
415
 
select count(*) from t2 where x>0;
416
 
select count(*) from t2 where x=0;
417
 
select count(*) from t2 where x<0;
418
 
select count(*) from t2 where x < -16;
419
 
select count(*) from t2 where x = -16;
420
 
select count(*) from t2 where x > -16;
421
 
select count(*) from t2 where x = 18446744073709551601;
422
 
drop table t1,t2;
423
 
 
424
 
--disable_warnings
425
 
create table t1 (x bigint not null primary key) engine=innodb;
426
 
--enable_warnings
427
 
insert into t1(x) values (0x0ffffffffffffff0);
428
 
insert into t1(x) values (0x0ffffffffffffff1);
429
 
select * from t1;
430
 
select count(*) from t1 where x>0;
431
 
select count(*) from t1 where x=0;
432
 
select count(*) from t1 where x<0;
433
 
select count(*) from t1 where x < -16;
434
 
select count(*) from t1 where x = -16;
435
 
select count(*) from t1 where x > -16;
436
 
select count(*) from t1 where x = 18446744073709551601;
437
 
 
438
 
drop table t1;
439
 
 
440
 
#
441
 
# Bug #11185 incorrect comparison of int to signed constant
442
 
#
443
 
create table t1 (a bigint);
444
 
create index t1i on t1(a);
445
 
insert into t1 select 18446744073709551615;
446
 
insert into t1 select 18446744073709551614;
447
 
 
448
 
explain select * from t1 where a <> -1;
449
 
select * from t1 where a <> -1;
450
 
explain select * from t1 where a > -1 or a < -1;
451
 
select * from t1 where a > -1 or a < -1;
452
 
explain select * from t1 where a > -1;
453
 
select * from t1 where a > -1;
454
 
explain select * from t1 where a < -1;
455
 
select * from t1 where a < -1;
456
 
 
457
 
drop table t1;
458
 
 
459
 
#
460
 
# Bug #6045: Binary Comparison regression in MySQL 4.1
461
 
# Binary searches didn't use a case insensitive index.
462
 
#
463
 
create table t1 (a char(10), b text, key (a));
464
 
INSERT INTO t1 (a) VALUES
465
 
('111'),('222'),('222'),('222'),('222'),('444'),('aaa'),('AAA'),('bbb');
466
 
# all these three can be optimized
467
 
explain select * from t1 where a='aaa';
468
 
explain select * from t1 where a=binary 'aaa';
469
 
explain select * from t1 where a='aaa' collate utf8_bin;
470
 
drop table t1;
471
 
 
472
 
# Test for BUG#9348 "result for WHERE A AND (B OR C) differs from WHERE a AND (C OR B)"
473
 
--disable_warnings
474
 
CREATE TABLE t1 (
475
 
  `CLIENT` char(3) collate utf8_bin NOT NULL default '000',
476
 
  `ARG1` char(3) collate utf8_bin NOT NULL default '',
477
 
  `ARG2` char(3) collate utf8_bin NOT NULL default '',
478
 
  `FUNCTION` varchar(10) collate utf8_bin NOT NULL default '',
479
 
  `FUNCTINT` int NOT NULL default '0',
480
 
  KEY `VERI_CLNT~2` (`ARG1`)
481
 
) ENGINE=InnoDB;
482
 
--enable_warnings
483
 
 
484
 
INSERT INTO t1 VALUES ('000',' 0',' 0','Text 001',0), ('000',' 0',' 1','Text 002',0),
485
 
  ('000',' 1',' 2','Text 003',0), ('000',' 2',' 3','Text 004',0),
486
 
  ('001',' 3',' 0','Text 017',0);
487
 
 
488
 
SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 1' OR ARG1 != ' 2');
489
 
 
490
 
SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 2' OR ARG1 != ' 1');
491
 
drop table t1;
492
 
 
493
 
# BUG#16168: Wrong range optimizer results, "Use_count: Wrong count ..."
494
 
#            warnings in server stderr.
495
 
create table t1 (a int);
496
 
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
497
 
 
498
 
CREATE TABLE t2 (
499
 
  pk1 int NOT NULL,
500
 
  pk2 int NOT NULL,
501
 
  pk3 int NOT NULL,
502
 
  pk4 int NOT NULL,
503
 
  filler char(82),
504
 
  PRIMARY KEY (pk1,pk2,pk3,pk4)
505
 
);
506
 
 
507
 
insert into t2 select 1, A.a+10*B.a, 432, 44, 'fillerZ' from t1 A, t1 B;
508
 
INSERT INTO t2 VALUES (2621, 2635, 0, 0,'filler'), (2621, 2635, 1, 0,'filler'),
509
 
  (2621, 2635, 10, 0,'filler'), (2621, 2635, 11, 0,'filler'),
510
 
  (2621, 2635, 14, 0,'filler'), (2621, 2635, 1000015, 0,'filler');
511
 
 
512
 
SELECT * FROM t2
513
 
WHERE ((((pk4 =0) AND (pk1 =2621) AND (pk2 =2635)))
514
 
OR ((pk4 =1) AND (((pk1 IN ( 7, 2, 1 ))) OR (pk1 =522)) AND ((pk2 IN ( 0, 2635))))
515
 
) AND (pk3 >=1000000);
516
 
drop table t1, t2;
517
 
 
518
 
#
519
 
# Bug #20732: Partial index and long sjis search with '>' fails sometimes
520
 
#
521
 
 
522
 
create table t1(a char(2), key(a(1)));
523
 
insert into t1 values ('x'), ('xx');
524
 
explain select a from t1 where a > 'x';
525
 
select a from t1 where a > 'x';
526
 
drop table t1;
527
 
 
528
 
#
529
 
# Bug #24776: assertion abort for 'range checked for each record' 
530
 
#
531
 
 
532
 
CREATE TABLE t1 (
533
 
  OXID varchar(32) NOT NULL DEFAULT '',
534
 
  OXPARENTID varchar(32) NOT NULL DEFAULT 'oxrootid',
535
 
  OXLEFT int NOT NULL DEFAULT '0',
536
 
  OXRIGHT int NOT NULL DEFAULT '0',
537
 
  OXROOTID varchar(32) NOT NULL DEFAULT '',
538
 
  PRIMARY KEY  (OXID),
539
 
  KEY OXNID (OXID),
540
 
  KEY OXLEFT (OXLEFT),
541
 
  KEY OXRIGHT (OXRIGHT),
542
 
  KEY OXROOTID (OXROOTID)
543
 
);
544
 
 
545
 
INSERT INTO t1 VALUES
546
 
('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'),
547
 
('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3,
548
 
 'd8c4177d09f8b11f5.52725521'),
549
 
('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5,
550
 
 'd8c4177d09f8b11f5.52725521'),
551
 
('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7,
552
 
 'd8c4177d09f8b11f5.52725521'),
553
 
('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9,
554
 
 'd8c4177d09f8b11f5.52725521'),
555
 
('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11,
556
 
 'd8c4177d09f8b11f5.52725521');
557
 
 
558
 
--replace_column 9 #
559
 
EXPLAIN
560
 
SELECT s.oxid FROM t1 v, t1 s 
561
 
  WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
562
 
        v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
563
 
        s.oxleft > v.oxleft AND s.oxleft < v.oxright;
564
 
 
565
 
SELECT s.oxid FROM t1 v, t1 s 
566
 
  WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
567
 
        v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
568
 
        s.oxleft > v.oxleft AND s.oxleft < v.oxright;
569
 
 
570
 
DROP TABLE t1;
571
 
 
572
 
# BUG#26624 high mem usage (crash) in range optimizer (depends on order of fields in where)
573
 
create table t1 (
574
 
  c1  char(10), c2  char(10), c3  char(10), c4  char(10),
575
 
  c5  char(10), c6  char(10), c7  char(10), c8  char(10),
576
 
  c9  char(10), c10 char(10), c11 char(10), c12 char(10),
577
 
  c13 char(10), c14 char(10), c15 char(10), c16 char(10),
578
 
  index(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,c13,c14,c15,c16)
579
 
);
580
 
insert into t1 (c1) values ('1'),('1'),('1'),('1');
581
 
 
582
 
# This must run without crash and fast:
583
 
select * from t1 where
584
 
     c1 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
585
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
586
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
587
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
588
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4",
589
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
590
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
591
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
592
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
593
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
594
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
595
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
596
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
597
 
 and c2 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
598
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
599
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
600
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
601
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
602
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
603
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
604
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
605
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
606
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
607
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
608
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
609
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
610
 
 and c3 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
611
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
612
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
613
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
614
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
615
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
616
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
617
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
618
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
619
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
620
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
621
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
622
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
623
 
 and c4 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
624
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
625
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
626
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
627
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
628
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5", 
629
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
630
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
631
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
632
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
633
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
634
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
635
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
636
 
 and c5 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
637
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
638
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
639
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
640
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4",
641
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
642
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
643
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
644
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
645
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
646
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
647
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
648
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
649
 
 and c6 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
650
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
651
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
652
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
653
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4",
654
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
655
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
656
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
657
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
658
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
659
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
660
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
661
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
662
 
 and c7 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
663
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
664
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
665
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
666
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
667
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
668
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
669
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
670
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
671
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
672
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
673
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
674
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
675
 
 and c8 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
676
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
677
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
678
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
679
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
680
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
681
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
682
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
683
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
684
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
685
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
686
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
687
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
688
 
 and c9 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
689
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
690
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
691
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
692
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
693
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
694
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
695
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
696
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
697
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
698
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
699
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
700
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
701
 
 and c10 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", 
702
 
            "abcdefg1", "123456781", "qwertyui1", "asddfg1", 
703
 
            "abcdefg2", "123456782", "qwertyui2", "asddfg2", 
704
 
            "abcdefg3", "123456783", "qwertyui3", "asddfg3", 
705
 
            "abcdefg4", "123456784", "qwertyui4", "asddfg4", 
706
 
            "abcdefg5", "123456785", "qwertyui5", "asddfg5",
707
 
            "abcdefg6", "123456786", "qwertyui6", "asddfg6",
708
 
            "abcdefg7", "123456787", "qwertyui7", "asddfg7",
709
 
            "abcdefg8", "123456788", "qwertyui8", "asddfg8",
710
 
            "abcdefg9", "123456789", "qwertyui9", "asddfg9",
711
 
            "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
712
 
            "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
713
 
            "abcdefgC", "12345678C", "qwertyuiC", "asddfgC");
714
 
drop table t1;
715
 
--echo End of 4.1 tests
716
 
 
717
 
#
718
 
# Test for optimization request #10561: to use keys for
719
 
# NOT IN (c1,...,cn) and NOT BETWEEN c1 AND c2
720
 
#
721
 
 
722
 
CREATE TABLE t1 (
723
 
  id int NOT NULL auto_increment,
724
 
  status varchar(20),
725
 
  PRIMARY KEY  (id),
726
 
  KEY (status)
727
 
);
728
 
 
729
 
INSERT INTO t1 VALUES
730
 
(1,'B'), (2,'B'), (3,'B'), (4,'B'), (5,'B'), (6,'B'),
731
 
(7,'B'), (8,'B'), (9,'B'), (10,'B'), (11,'B'), (12,'B'),
732
 
(13,'B'), (14,'B'), (15,'B'), (16,'B'), (17,'B'), (18,'B'),
733
 
(19,'B'), (20,'B'), (21,'B'), (22,'B'), (23,'B'), (24,'B'), 
734
 
(25,'A'), (26,'A'), (27,'A'), (28,'A'), (29,'A'), (30,'A'),
735
 
(31,'A'), (32,'A'), (33,'A'), (34,'A'), (35,'A'), (36,'A'),
736
 
(37,'A'), (38,'A'), (39,'A'), (40,'A'), (41,'A'), (42,'A'),
737
 
(43,'A'), (44,'A'), (45,'A'), (46,'A'), (47,'A'), (48,'A'),
738
 
(49,'A'), (50,'A'), (51,'A'), (52,'A'), (53,'C'), (54,'C'),
739
 
(55,'C'), (56,'C'), (57,'C'), (58,'C'), (59,'C'), (60,'C');
740
 
 
741
 
EXPLAIN SELECT * FROM t1 WHERE status <> 'A' AND status <> 'B';
742
 
EXPLAIN SELECT * FROM t1 WHERE status NOT IN ('A','B');
743
 
 
744
 
SELECT * FROM t1 WHERE status <> 'A' AND status <> 'B';
745
 
SELECT * FROM t1 WHERE status NOT IN ('A','B');
746
 
 
747
 
EXPLAIN SELECT status FROM t1 WHERE status <> 'A' AND status <> 'B';
748
 
EXPLAIN SELECT status FROM t1 WHERE status NOT IN ('A','B');
749
 
 
750
 
EXPLAIN SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B';
751
 
EXPLAIN SELECT * FROM t1 WHERE status < 'A' OR status > 'B';
752
 
 
753
 
SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B';
754
 
SELECT * FROM t1 WHERE status < 'A' OR status > 'B';
755
 
 
756
 
DROP TABLE t1;
757
 
 
758
 
#
759
 
# Bug #11853: DELETE statement with a NOT (LIKE/<=>) where condition
760
 
#             for an indexed attribute              
761
 
#             
762
 
 
763
 
CREATE TABLE t1 (name varchar(15) NOT NULL, KEY idx(name));
764
 
INSERT INTO t1 VALUES ('Betty'), ('Anna');
765
 
 
766
 
SELECT * FROM t1;
767
 
DELETE FROM t1 WHERE name NOT LIKE 'A%a';
768
 
SELECT * FROM t1;
769
 
 
770
 
DROP TABLE t1;
771
 
 
772
 
CREATE TABLE t1 (a int, KEY idx(a));
773
 
INSERT INTO t1 VALUES (NULL), (1), (2), (3);
774
 
 
775
 
SELECT * FROM t1;
776
 
DELETE FROM t1 WHERE NOT(a <=> 2);
777
 
SELECT * FROM t1;
778
 
 
779
 
DROP TABLE t1;
780
 
 
781
 
# BUG#13455: 
782
 
create table t3 (a int);
783
 
insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
784
 
 
785
 
create table t1 (a varchar(10), filler char(200), key(a));
786
 
insert into t1 values ('a','');
787
 
insert into t1 values ('a ','');
788
 
insert into t1 values ('a  ', '');
789
 
insert into t1 select concat('a', 1000 + A.a + 10 * (B.a + 10 * C.a)), ''
790
 
  from t3 A, t3 B, t3 C;
791
 
 
792
 
create table t2 (a varchar(10), filler char(200), key(a));
793
 
insert into t2 select * from t1;
794
 
 
795
 
--replace_column 9 #
796
 
explain select * from t1 where a between 'a' and 'a '; 
797
 
--replace_column 9 #
798
 
explain select * from t1 where a = 'a' or a='a ';
799
 
 
800
 
--replace_column 9 #
801
 
explain select * from t2 where a between 'a' and 'a '; 
802
 
--replace_column 9 #
803
 
explain select * from t2 where a = 'a' or a='a ';
804
 
 
805
 
update t1 set a='b' where a<>'a';
806
 
--replace_column 9 #
807
 
explain select * from t1 where a not between 'b' and 'b'; 
808
 
select a, hex(filler) from t1 where a not between 'b' and 'b'; 
809
 
 
810
 
drop table t1,t2,t3;
811
 
 
812
 
#
813
 
# Bug #18165: range access for BETWEEN with a constant for the first argument 
814
 
#
815
 
 
816
 
CREATE TABLE t1 (
817
 
  id int NOT NULL DEFAULT '0',
818
 
  b int NOT NULL DEFAULT '0',
819
 
  c int NOT NULL DEFAULT '0', 
820
 
  INDEX idx1(b,c), INDEX idx2(c));
821
 
 
822
 
INSERT INTO t1(id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
823
 
 
824
 
INSERT INTO t1(b,c) VALUES (3,4), (3,4);
825
 
 
826
 
SELECT * FROM t1 WHERE b<=3 AND 3<=c;
827
 
SELECT * FROM t1 WHERE 3 BETWEEN b AND c;
828
 
 
829
 
EXPLAIN  SELECT * FROM t1 WHERE b<=3 AND 3<=c;
830
 
EXPLAIN  SELECT * FROM t1 WHERE 3 BETWEEN b AND c;
831
 
 
832
 
SELECT * FROM t1 WHERE 0 < b OR 0 > c;
833
 
SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c;
834
 
 
835
 
EXPLAIN SELECT * FROM t1 WHERE 0 < b OR 0 > c;
836
 
EXPLAIN SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c;
837
 
 
838
 
DROP TABLE t1;
839
 
 
840
 
#
841
 
# Bug #16249: different results for a range with an without index 
842
 
#             when a range condition use an invalid datetime constant 
843
 
#
844
 
 
845
 
CREATE TEMPORARY TABLE t1 (                                      
846
 
  item char(20) NOT NULL default '',                          
847
 
  started datetime, 
848
 
  price decimal(16,3) NOT NULL default '0.000',                 
849
 
  PRIMARY KEY (item,started)                     
850
 
) ENGINE=MyISAM;   
851
 
 
852
 
INSERT INTO t1 VALUES
853
 
('A1','2005-11-01 08:00:00',1000),
854
 
('A1','2005-11-15 00:00:00',2000),
855
 
('A1','2005-12-12 08:00:00',3000),
856
 
('A2','2005-12-01 08:00:00',1000);
857
 
 
858
 
--replace_column 9 #
859
 
EXPLAIN SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 23:59:59';
860
 
SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 23:59:59';
861
 
SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-02 00:00:00';
862
 
 
863
 
# Disabling for now, since it fails.  Likely due to only currently
864
 
# checking for bad datetimes on string conversions...
865
 
#
866
 
#DROP INDEX `PRIMARY` ON t1;
867
 
 
868
 
#EXPLAIN SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 23:59:59';
869
 
#SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 23:59:59';
870
 
#SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-02 00:00:00';
871
 
 
872
 
DROP TABLE t1;
873
 
 
874
 
--echo
875
 
--echo BUG#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
876
 
--echo
877
 
CREATE TABLE t1 (
878
 
  id int NOT NULL auto_increment,
879
 
  dateval date default NULL,
880
 
  PRIMARY KEY  (id),
881
 
  KEY dateval (dateval)
882
 
) AUTO_INCREMENT=173;
883
 
 
884
 
INSERT INTO t1 VALUES
885
 
(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'),
886
 
(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'),
887
 
(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11');
888
 
 
889
 
--echo This must use range access:
890
 
explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '2007-01-02 23:59:59';
891
 
 
892
 
drop table t1;
893
 
 
894
 
#
895
 
# Bug #33833: different or-ed predicates were erroneously merged into one that
896
 
# resulted in ref access instead of range access and  a wrong result set
897
 
#
898
 
 
899
 
CREATE TABLE t1 (
900
 
  a varchar(32), index (a)
901
 
) DEFAULT COLLATE=utf8_bin;
902
 
 
903
 
INSERT INTO t1 VALUES
904
 
  ('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A');
905
 
 
906
 
SELECT a FROM t1 WHERE a='b' OR a='B';
907
 
EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
908
 
 
909
 
DROP TABLE t1;
910
 
 
911
 
#
912
 
# Bug #34731: highest possible value for INT erroneously filtered by WHERE
913
 
#
914
 
 
915
 
# test UNSIGNED. only occurs when indexed.
916
 
CREATE TABLE t1 (f1 int NOT NULL, PRIMARY KEY (f1));
917
 
 
918
 
INSERT INTO t1 VALUES (127),(254),(0),(1),(255);
919
 
 
920
 
# test upper bound
921
 
# count 5
922
 
SELECT COUNT(*) FROM t1 WHERE f1 < 256;
923
 
SELECT COUNT(*) FROM t1 WHERE f1 < 256.0;
924
 
# count 4
925
 
SELECT COUNT(*) FROM t1 WHERE f1 < 255;
926
 
 
927
 
# show we don't fiddle with lower bound on UNSIGNED
928
 
# count 0
929
 
SELECT COUNT(*) FROM t1 WHERE f1 < -1;
930
 
# count 5
931
 
SELECT COUNT(*) FROM t1 WHERE f1 > -1;
932
 
 
933
 
DROP TABLE t1;
934
 
 
935
 
 
936
 
# test signed. only occurs when index.
937
 
CREATE TABLE t1 ( f1 int NOT NULL, PRIMARY KEY (f1));
938
 
 
939
 
INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127);
940
 
 
941
 
# test upper bound
942
 
# count 5
943
 
SELECT COUNT(*) FROM t1 WHERE f1 < 128;
944
 
SELECT COUNT(*) FROM t1 WHERE f1 < 128.0;
945
 
# count 4
946
 
SELECT COUNT(*) FROM t1 WHERE f1 < 127;
947
 
 
948
 
# test lower bound
949
 
# count 5
950
 
SELECT COUNT(*) FROM t1 WHERE f1 > -129;
951
 
SELECT COUNT(*) FROM t1 WHERE f1 > -129.0;
952
 
# count 4
953
 
SELECT COUNT(*) FROM t1 WHERE f1 > -128;
954
 
 
955
 
DROP TABLE t1;
956
 
 
957
 
# End of 5.0 tests
958
 
 
959
 
# BUG#22393 fix: Adjust 'ref' estimate if we have 'range' estimate for
960
 
#                a smaller scan interval
961
 
create table t1 (a int);
962
 
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
963
 
 
964
 
create table t2 (a int, b int, filler char(100));
965
 
insert into t2 select A.a + 10 * (B.a + 10 * C.a), 10, 'filler' from t1 A,
966
 
t1 B, t1 C where A.a < 5;
967
 
 
968
 
insert into t2 select 1000, b, 'filler' from t2;
969
 
alter table t2 add index (a,b);
970
 
# t2 values 
971
 
#  ( 1  , 10, 'filler')
972
 
#  ( 2  , 10, 'filler')
973
 
#  ( 3  , 10, 'filler')
974
 
#  (... , 10, 'filler')
975
 
#   ...
976
 
#  (1000, 10, 'filler') - 500 times
977
 
 
978
 
# 500 rows, 1 row
979
 
 
980
 
select 'In following EXPLAIN the access method should be ref, #rows~=500 (and not 2)' Z;
981
 
create temporary table t2e like t2;
982
 
alter table t2e engine=myisam;
983
 
insert into t2e select * from t2;
984
 
analyze table t2e;
985
 
explain select * from t2e where a=1000 and b<11;
986
 
 
987
 
drop table t1, t2;
988
 
 
989
 
--echo End of 5.1 tests
990
 
 
991
 
#
992
 
# BUG#32262 fix: crash with decimal column...
993
 
#
994
 
 
995
 
CREATE TABLE t1 (c1 DECIMAL(10,0),INDEX(c1));
996
 
INSERT INTO t1 VALUES (1),(2),(3);
997
 
SELECT c1 FROM t1 WHERE c1 >= 'A' GROUP BY 1;
998
 
DROP TABLE t1;
999
 
 
1000
 
#
1001
 
# BUG#32229: Range optimizer crashes for 'range checked for each record' query
1002
 
#
1003
 
create table t1 (a int,b int,key (b),key (a),key (b,a));
1004
 
insert into t1(a,b) values (1,2),(3,4),(5,6),(7,8);
1005
 
create table t2 (c int);
1006
 
insert into t2(c) values (1),(5),(6),(7),(8);
1007
 
select 1 from (select c from t1,t2 where b >= 1 and a <=> c group by 1 limit 1) as d1;
1008
 
drop table t1, t2;
1009