2 # Problem with range optimizer
6 drop
table if exists t1, t2, t3;
10 event_date date DEFAULT
'0000-00-00' NOT NULL,
11 type int(11) DEFAULT
'0' NOT NULL,
12 event_id
int(11) DEFAULT
'0' NOT NULL,
13 PRIMARY
KEY (event_date,
type,event_id)
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);
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;
41 PAPER_ID smallint(6) DEFAULT '0' NOT NULL,
42 YEAR smallint(6) DEFAULT '0' NOT NULL,
43 ISSUE smallint(6) DEFAULT '0' NOT NULL,
44 CLOSED tinyint(4) DEFAULT '0' NOT NULL,
45 ISS_DATE date DEFAULT '0000-00-00' NOT NULL,
46 PRIMARY
KEY (PAPER_ID,YEAR,ISSUE)
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;
69 id int(11) NOT NULL auto_increment,
70 parent_id
int(11) DEFAULT '0' NOT NULL,
71 level tinyint(4) DEFAULT '0' NOT NULL,
73 KEY parent_id (parent_id),
76 INSERT INTO t1 VALUES (1,0,0), (3,1,1), (4,1,1), (8,2,2), (9,2,2), (17,3,2),
77 (22,4,2), (24,4,2), (28,5,2), (29,5,2), (30,5,2), (31,6,2), (32,6,2), (33,6,2),
78 (203,7,2), (202,7,2), (20,3,2), (157,0,0), (193,5,2), (40,7,2), (2,1,1),
79 (15,2,2), (6,1,1), (34,6,2), (35,6,2), (16,3,2), (7,1,1), (36,7,2), (18,3,2),
80 (26,5,2), (27,5,2), (183,4,2), (38,7,2), (25,5,2), (37,7,2), (21,4,2),
81 (19,3,2), (5,1,1), (179,5,2);
82 SELECT * FROM t1 WHERE level = 1 AND parent_id = 1;
83 # The following select returned 0 rows in 3.23.8
84 SELECT * FROM t1 WHERE level = 1 AND parent_id = 1 order by
id;
88 # Testing of bug in range optimizer with many key parts and > and <
92 Satellite varchar(25) not null,
93 SensorMode varchar(25) not null,
94 FullImageCornersUpperLeftLongitude
double not null,
95 FullImageCornersUpperRightLongitude
double not null,
96 FullImageCornersUpperRightLatitude
double not null,
97 FullImageCornersLowerRightLatitude
double not null,
98 index two (Satellite, SensorMode, FullImageCornersUpperLeftLongitude, FullImageCornersUpperRightLongitude, FullImageCornersUpperRightLatitude, FullImageCornersLowerRightLatitude));
100 insert into t1 values(
"OV-3",
"PAN1",91,-92,40,50);
101 insert into t1 values(
"OV-4",
"PAN1",91,-92,40,50);
103 select * from t1 where t1.Satellite =
"OV-3" and t1.SensorMode =
"PAN1" and t1.FullImageCornersUpperLeftLongitude > -90.000000 and t1.FullImageCornersUpperRightLongitude < -82.000000;
106 create
table t1 ( aString
char(100) not null
default "", key aString (aString(10)) );
107 insert t1 (aString) values ( "believe in myself" ), ( "believe" ), ("baaa" ), ( "believe in love");
108 select * from t1 where aString < "believe in myself" order by aString;
109 select * from t1 where aString > "believe in love" order by aString;
110 alter
table t1 drop key aString;
111 select * from t1 where aString < "believe in myself" order by aString;
112 select * from t1 where aString > "believe in love" order by aString;
116 # Problem with binary strings
120 t1ID
int(10)
unsigned NOT NULL auto_increment,
121 art binary(1) NOT NULL
default '',
122 KNR
char(5) NOT NULL
default '',
123 RECHNR
char(6) NOT NULL
default '',
124 POSNR
char(2) NOT NULL
default '',
125 ARTNR
char(10) NOT NULL
default '',
126 TEX
char(70) NOT NULL
default '',
133 INSERT INTO t1 (art) VALUES ('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 ('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j'),('j');
171 select count(*) from t1 where upper(art) = 'J';
172 select count(*) from t1 where art = 'J' or art = 'j';
173 select count(*) from t1 where art = 'j' or art = 'J';
174 select count(*) from t1 where art = 'j';
175 select count(*) from t1 where art = 'J';
181 insert into t1 (x) values (1),(2),(3),(4),(5),(6),(7),(8),(9);
183 # between with only one end fixed
184 explain select * from t1, t1 t2 where t1.y = 8 and t2.x between 7 and t1.y+0;
185 explain select * from t1, t1 t2 where t1.y = 8 and t2.x >= 7 and t2.x <= t1.y+0;
186 # between with both expressions on both ends
187 explain select * from t1, t1 t2 where t1.y = 2 and t2.x between t1.y-1 and t1.y+1;
188 explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= t1.y-1 and t2.x <= t1.y+1;
189 # equation propagation
190 explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 0 and t1.y;
191 explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 0 and t2.x <= t1.y;
193 explain select count(*) from t1 where x in (1);
194 explain select count(*) from t1 where x in (1,2);
198 # bug #1172: "Force index" option caused server crash
200 CREATE
TABLE t1 (key1
int(11) NOT NULL
default '0',
KEY i1 (key1));
201 INSERT INTO t1 VALUES (0),(0),(0),(0),(0),(1),(1);
202 CREATE
TABLE t2 (keya
int(11) NOT NULL
default '0',
KEY j1 (keya));
203 INSERT INTO t2 VALUES (0),(0),(1),(1),(2),(2);
204 explain select * from t1, t2 where (t1.key1 <t2.keya + 1) and t2.keya=3;
205 explain select * from t1 force
index(i1), t2 force
index(j1) where
206 (t1.key1 <t2.keya + 1) and t2.keya=3;
210 # bug #1724: use RANGE on more selective column instead of REF on less
214 a
int(11)
default NULL,
215 b
int(11)
default NULL,
221 INSERT INTO t1 VALUES
222 (1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(10,2),
223 (13,2),(14,2),(15,2),(16,2),(17,3),(17,3),(16,3),(17,3),(19,3),(20,3),
224 (21,4),(22,5),(23,5),(24,5),(25,5),(26,5),(30,5),(31,5),(32,5),(33,5),
225 (33,5),(33,5),(33,5),(33,5),(34,5),(35,5);
227 # we expect that optimizer will choose index on A
228 EXPLAIN SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
229 SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
233 # Test problem with range optimzer and sub ranges
236 CREATE
TABLE t1 (a
int, b
int, c
int, INDEX (c,a,b));
237 INSERT INTO t1 VALUES (1,0,0),(1,0,0),(1,0,0);
238 INSERT INTO t1 VALUES (0,1,0),(0,1,0),(0,1,0);
239 # -- First reports 3; second reports 6
240 SELECT COUNT(*) FROM t1 WHERE (c=0 and a=1) or (c=0 and b=1);
241 SELECT COUNT(*) FROM t1 WHERE (c=0 and b=1) or (c=0 and a=1);
245 # Test problem with range optimization over overlapping ranges (#2448)
248 CREATE
TABLE t1 ( a
int not null, b
int not null, INDEX ab(a,b) );
249 INSERT INTO t1 VALUES (47,1), (70,1), (15,1), (15, 4);
253 ( b =1 AND a BETWEEN 14 AND 21 ) OR
254 ( b =2 AND a BETWEEN 16 AND 18 ) OR
255 ( b =3 AND a BETWEEN 15 AND 19 ) OR
256 (a BETWEEN 19 AND 47)
261 # Test of problem with IN on many different keyparts. (Bug #4157)
265 id int( 11 )
unsigned NOT NULL AUTO_INCREMENT ,
266 line
int( 5 )
unsigned NOT NULL
default '0',
267 columnid
int( 3 )
unsigned NOT NULL
default '0',
268 owner
int( 3 )
unsigned NOT NULL
default '0',
269 ordinal
int( 3 )
unsigned NOT NULL
default '0',
270 showid smallint( 6 )
unsigned NOT NULL
default '1',
271 tableid
int( 1 )
unsigned NOT NULL
default '1',
272 content
int( 5 )
unsigned NOT NULL
default '188',
273 PRIMARY
KEY ( owner,
id ) ,
274 KEY menu( owner, showid, columnid ) ,
275 KEY `COLUMN` ( owner, columnid, line ) ,
276 KEY `LINES` ( owner, tableid, content,
id ) ,
277 KEY recount( owner, line )
280 INSERT into t1 (owner,
id,columnid,line) values (11,15,15,1),(11,13,13,5);
282 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;
286 # test for a bug with in() and unique key
289 create
table t1 (
id int(10) primary key);
290 insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9);
292 select
id from t1 where
id in (2,5,9) ;
293 select
id from t1 where
id=2 or
id=5 or
id=9 ;
295 create
table t1 ( id1
int not null, id2
int not null, idnull
int null, c
char(20), primary key (id1,id2));
296 insert into t1 values (0,1,NULL,
"aaa"), (1,1,NULL,
"aaa"), (2,1,NULL,
"aaa"),
297 (3,1,NULL,
"aaa"), (4,1,NULL,
"aaa"), (5,1,NULL,
"aaa"),
298 (6,1,NULL,
"aaa"), (7,1,NULL,
"aaa"), (8,1,NULL,
"aaa"),
299 (9,1,NULL,
"aaa"), (10,1,NULL,
"aaa"), (11,1,NULL,
"aaa"),
300 (12,1,NULL,
"aaa"), (13,1,NULL,
"aaa"), (14,1,NULL,
"aaa"),
301 (15,1,NULL,
"aaa"), (16,1,NULL,
"aaa"), (17,1,NULL,
"aaa"),
302 (18,1,NULL,
"aaa"), (19,1,NULL,
"aaa"), (20,1,NULL,
"aaa");
303 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;
308 # Problem with optimizing !=
312 id int not null auto_increment,
313 name char(1) not null,
316 index uid_index (uid));
319 id int not null auto_increment,
320 name char(1) not null,
323 index uid_index (uid));
325 insert into t1(
id, uid,
name) values(1, 0, ' ');
326 insert into t1(uid,
name) values(0, ' ');
328 insert into t2(uid,
name) select uid,
name from t1;
329 insert into t1(uid,
name) select uid,
name from t2;
330 insert into t2(uid,
name) select uid,
name from t1;
331 insert into t1(uid,
name) select uid,
name from t2;
332 insert into t2(uid,
name) select uid,
name from t1;
333 insert into t1(uid,
name) select uid,
name from t2;
334 insert into t2(uid,
name) select uid,
name from t1;
335 insert into t1(uid,
name) select uid,
name from t2;
336 insert into t2(uid,
name) select uid,
name from t1;
337 insert into t1(uid,
name) select uid,
name from t2;
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 t2(uid,
name) select uid,
name from t1;
342 insert into t1(uid,
name) select uid,
name from t2;
345 insert into t2(uid,
name) values
373 insert into t1(uid,
name) select uid,
name from t2 order by uid;
376 insert into t2(
id, uid,
name) select
id, uid,
name from t1;
378 select count(*) from t1;
379 select count(*) from t2;
383 explain select * from t1, t2 where t1.uid=t2.uid AND t1.uid > 0;
384 explain select * from t1, t2 where t1.uid=t2.uid AND t2.uid > 0;
385 explain select * from t1, t2 where t1.uid=t2.uid AND t1.uid != 0;
386 explain select * from t1, t2 where t1.uid=t2.uid AND t2.uid != 0;
388 select * from t1, t2 where t1.uid=t2.uid AND t1.uid > 0;
389 select * from t1, t2 where t1.uid=t2.uid AND t1.uid != 0;
395 create
table t1 (x bigint
unsigned not null);
396 insert into t1(x) values (0xfffffffffffffff0);
397 insert into t1(x) values (0xfffffffffffffff1);
399 select count(*) from t1 where x>0;
400 select count(*) from t1 where x=0;
401 select count(*) from t1 where x<0;
402 select count(*) from t1 where x < -16;
403 select count(*) from t1 where x = -16;
404 select count(*) from t1 where x > -16;
405 select count(*) from t1 where x = 18446744073709551601;
408 create
table t2 (x bigint not null);
409 insert into t2(x) values (-16);
410 insert into t2(x) values (-15);
412 select count(*) from t2 where x>0;
413 select count(*) from t2 where x=0;
414 select count(*) from t2 where x<0;
415 select count(*) from t2 where x < -16;
416 select count(*) from t2 where x = -16;
417 select count(*) from t2 where x > -16;
418 select count(*) from t2 where x = 18446744073709551601;
422 create
table t1 (x bigint
unsigned not null primary key) engine=innodb;
424 insert into t1(x) values (0xfffffffffffffff0);
425 insert into t1(x) values (0xfffffffffffffff1);
427 select count(*) from t1 where x>0;
428 select count(*) from t1 where x=0;
429 select count(*) from t1 where x<0;
430 select count(*) from t1 where x < -16;
431 select count(*) from t1 where x = -16;
432 select count(*) from t1 where x > -16;
433 select count(*) from t1 where x = 18446744073709551601;
438 # Bug #11185 incorrect comparison of unsigned int to signed constant
440 create
table t1 (a bigint
unsigned);
441 create
index t1i on t1(a);
442 insert into t1 select 18446744073709551615;
443 insert into t1 select 18446744073709551614;
445 explain select * from t1 where a <> -1;
446 select * from t1 where a <> -1;
447 explain select * from t1 where a > -1 or a < -1;
448 select * from t1 where a > -1 or a < -1;
449 explain select * from t1 where a > -1;
450 select * from t1 where a > -1;
451 explain select * from t1 where a < -1;
452 select * from t1 where a < -1;
457 # Bug #6045: Binary Comparison regression in MySQL 4.1
458 # Binary searches didn't use a case insensitive index.
461 create
table t1 (a
char(10), b text, key (a)) character set latin1;
462 INSERT INTO t1 (a) VALUES
463 ('111'),('222'),('222'),('222'),('222'),('444'),('aaa'),('AAA'),('bbb');
464 # all these three can be optimized
465 explain select * from t1 where a=
'aaa';
466 explain select * from t1 where a=binary
'aaa';
467 explain select * from t1 where a=
'aaa' collate latin1_bin;
469 explain select * from t1 where a=
'aaa' collate latin1_german1_ci;
472 # Test for BUG#9348 "result for WHERE A AND (B OR C) differs from WHERE a AND (C OR B)"
475 `CLIENT`
char(3) character
set latin1 collate latin1_bin NOT NULL
default '000',
476 `ARG1`
char(3) character
set latin1 collate latin1_bin NOT NULL
default '',
477 `ARG2`
char(3) character
set latin1 collate latin1_bin NOT NULL
default '',
478 `FUNCTION` varchar(10) character
set latin1 collate latin1_bin NOT NULL
default '',
479 `FUNCTINT`
int(11) NOT NULL
default '0',
480 KEY `VERI_CLNT~2` (`ARG1`)
481 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
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);
488 SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 1' OR ARG1 != ' 2');
490 SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 2' OR ARG1 != ' 1');
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);
499 pk1
int(11) NOT NULL,
500 pk2
int(11) NOT NULL,
501 pk3
int(11) NOT NULL,
502 pk4
int(11) NOT NULL,
504 PRIMARY
KEY (pk1,pk2,pk3,pk4)
505 ) DEFAULT CHARSET=latin1;
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');
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);
519 # Bug #20732: Partial index and long sjis search with '>' fails sometimes
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';
529 # Bug #24776: assertion abort for 'range checked for each record'
533 OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT
'',
534 OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT
'oxrootid',
535 OXLEFT
int NOT NULL DEFAULT
'0',
536 OXRIGHT
int NOT NULL DEFAULT
'0',
537 OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT
'',
541 KEY OXRIGHT (OXRIGHT),
542 KEY OXROOTID (OXROOTID)
543 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
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');
559 SELECT s.oxid FROM t1 v, t1 s
560 WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
561 v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
562 s.oxleft > v.oxleft AND s.oxleft < v.oxright;
564 SELECT s.oxid FROM t1 v, t1 s
565 WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
566 v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
567 s.oxleft > v.oxleft AND s.oxleft < v.oxright;
571 # BUG#26624 high mem usage (crash) in range optimizer (depends on order of fields in where)
573 c1
char(10), c2
char(10), c3
char(10), c4
char(10),
574 c5
char(10), c6
char(10), c7
char(10), c8
char(10),
575 c9
char(10), c10
char(10), c11
char(10), c12
char(10),
576 c13
char(10), c14
char(10), c15
char(10), c16
char(10),
577 index(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,c13,c14,c15,c16)
579 insert into t1 (c1) values ('1'),('1'),('1'),('1');
581 # This must run without crash and fast:
582 select * from t1 where
583 c1 in (
"abcdefgh",
"123456789",
"qwertyuio",
"asddfgh",
584 "abcdefg1",
"123456781",
"qwertyui1",
"asddfg1",
585 "abcdefg2",
"123456782",
"qwertyui2",
"asddfg2",
586 "abcdefg3",
"123456783",
"qwertyui3",
"asddfg3",
587 "abcdefg4",
"123456784",
"qwertyui4",
"asddfg4",
588 "abcdefg5",
"123456785",
"qwertyui5",
"asddfg5",
589 "abcdefg6",
"123456786",
"qwertyui6",
"asddfg6",
590 "abcdefg7",
"123456787",
"qwertyui7",
"asddfg7",
591 "abcdefg8",
"123456788",
"qwertyui8",
"asddfg8",
592 "abcdefg9",
"123456789",
"qwertyui9",
"asddfg9",
593 "abcdefgA",
"12345678A",
"qwertyuiA",
"asddfgA",
594 "abcdefgB",
"12345678B",
"qwertyuiB",
"asddfgB",
595 "abcdefgC",
"12345678C",
"qwertyuiC",
"asddfgC")
596 and c2 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
597 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
598 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
599 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
600 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
601 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
602 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
603 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
604 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
605 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
606 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
607 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
608 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
609 and c3 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
610 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
611 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
612 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
613 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
614 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
615 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
616 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
617 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
618 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
619 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
620 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
621 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
622 and c4 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
623 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
624 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
625 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
626 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
627 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
628 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
629 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
630 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
631 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
632 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
633 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
634 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
635 and c5 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
636 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
637 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
638 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
639 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
640 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
641 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
642 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
643 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
644 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
645 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
646 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
647 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
648 and c6 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
649 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
650 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
651 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
652 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
653 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
654 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
655 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
656 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
657 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
658 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
659 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
660 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
661 and c7 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
662 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
663 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
664 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
665 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
666 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
667 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
668 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
669 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
670 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
671 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
672 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
673 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
674 and c8 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
675 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
676 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
677 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
678 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
679 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
680 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
681 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
682 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
683 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
684 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
685 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
686 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
687 and c9 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
688 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
689 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
690 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
691 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
692 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
693 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
694 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
695 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
696 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
697 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
698 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
699 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC")
700 and c10 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh",
701 "abcdefg1", "123456781", "qwertyui1", "asddfg1",
702 "abcdefg2", "123456782", "qwertyui2", "asddfg2",
703 "abcdefg3", "123456783", "qwertyui3", "asddfg3",
704 "abcdefg4", "123456784", "qwertyui4", "asddfg4",
705 "abcdefg5", "123456785", "qwertyui5", "asddfg5",
706 "abcdefg6", "123456786", "qwertyui6", "asddfg6",
707 "abcdefg7", "123456787", "qwertyui7", "asddfg7",
708 "abcdefg8", "123456788", "qwertyui8", "asddfg8",
709 "abcdefg9", "123456789", "qwertyui9", "asddfg9",
710 "abcdefgA", "12345678A", "qwertyuiA", "asddfgA",
711 "abcdefgB", "12345678B", "qwertyuiB", "asddfgB",
712 "abcdefgC", "12345678C", "qwertyuiC", "asddfgC");
714 --echo End of 4.1 tests
717 # Test for optimization request #10561: to use keys for
718 # NOT IN (c1,...,cn) and NOT BETWEEN c1 AND c2
722 id int(11) NOT NULL auto_increment,
728 INSERT INTO t1 VALUES
729 (1,
'B'), (2,
'B'), (3,
'B'), (4,
'B'), (5,
'B'), (6,
'B'),
730 (7,
'B'), (8,
'B'), (9,
'B'), (10,
'B'), (11,
'B'), (12,
'B'),
731 (13,
'B'), (14,
'B'), (15,
'B'), (16,
'B'), (17,
'B'), (18,
'B'),
732 (19,
'B'), (20,
'B'), (21,
'B'), (22,
'B'), (23,
'B'), (24,
'B'),
733 (25,
'A'), (26,
'A'), (27,
'A'), (28,
'A'), (29,
'A'), (30,
'A'),
734 (31,
'A'), (32,
'A'), (33,
'A'), (34,
'A'), (35,
'A'), (36,
'A'),
735 (37,
'A'), (38,
'A'), (39,
'A'), (40,
'A'), (41,
'A'), (42,
'A'),
736 (43,
'A'), (44,
'A'), (45,
'A'), (46,
'A'), (47,
'A'), (48,
'A'),
737 (49,
'A'), (50,
'A'), (51,
'A'), (52,
'A'), (53,
'C'), (54,
'C'),
738 (55,
'C'), (56,
'C'), (57,
'C'), (58,
'C'), (59,
'C'), (60,
'C');
740 EXPLAIN SELECT * FROM t1 WHERE status <>
'A' AND status <>
'B';
741 EXPLAIN SELECT * FROM t1 WHERE status NOT IN (
'A',
'B');
743 SELECT * FROM t1 WHERE status <>
'A' AND status <>
'B';
744 SELECT * FROM t1 WHERE status NOT IN (
'A',
'B');
746 EXPLAIN SELECT status FROM t1 WHERE status <>
'A' AND status <>
'B';
747 EXPLAIN SELECT status FROM t1 WHERE status NOT IN (
'A',
'B');
749 EXPLAIN SELECT * FROM t1 WHERE status NOT BETWEEN
'A' AND
'B';
750 EXPLAIN SELECT * FROM t1 WHERE status < 'A' OR status >
'B';
752 SELECT * FROM t1 WHERE status NOT BETWEEN
'A' AND
'B';
753 SELECT * FROM t1 WHERE status < 'A' OR status >
'B';
758 # Test for bug #10031: range to be used over a view
761 CREATE
TABLE t1 (a
int, b
int, primary key(a,b));
763 INSERT INTO t1 VALUES
764 (1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3),(4,1),(4,2),(4,3);
766 CREATE VIEW v1 as SELECT a,b FROM t1 WHERE b=3;
768 EXPLAIN SELECT a,b FROM t1 WHERE a < 2 and b=3;
769 EXPLAIN SELECT a,b FROM v1 WHERE a < 2 and b=3;
771 EXPLAIN SELECT a,b FROM t1 WHERE a < 2;
772 EXPLAIN SELECT a,b FROM v1 WHERE a < 2;
774 SELECT a,b FROM t1 WHERE a < 2 and b=3;
775 SELECT a,b FROM v1 WHERE a < 2 and b=3;
781 # Bug #11853: DELETE statement with a NOT (LIKE/<=>) where condition
782 # for an indexed attribute
786 INSERT INTO t1 VALUES (
'Betty'), (
'Anna');
789 DELETE FROM t1 WHERE
name NOT LIKE
'A%a';
794 CREATE
TABLE t1 (a
int,
KEY idx(a));
795 INSERT INTO t1 VALUES (NULL), (1), (2), (3);
798 DELETE FROM t1 WHERE NOT(a <=> 2);
804 # BUG#13317: range optimization doesn't work for IN over VIEW.
806 create
table t1 (a
int, b
int, primary key(a,b));
807 create
view v1 as select a, b from t1;
809 INSERT INTO `t1` VALUES
810 (0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2)
811 ,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3);
814 explain select * from t1 where a in (3,4) and b in (1,2,3);
816 explain select * from v1 where a in (3,4) and b in (1,2,3);
818 explain select * from t1 where a between 3 and 4 and b between 1 and 2;
820 explain select * from v1 where a between 3 and 4 and b between 1 and 2;
826 create
table t3 (a
int);
827 insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
829 create
table t1 (a varchar(10), filler
char(200), key(a)) charset=binary;
830 insert into t1 values ('a','');
831 insert into t1 values ('a ','');
832 insert into t1 values ('a ', '');
833 insert into t1 select concat('a', 1000 + A.a + 10 * (B.a + 10 * C.a)), ''
834 from t3 A, t3 B, t3 C;
836 create
table t2 (a varchar(10), filler
char(200), key(a));
837 insert into t2 select * from t1;
840 explain select * from t1 where a between
'a' and
'a ';
842 explain select * from t1 where a =
'a' or a=
'a ';
845 explain select * from t2 where a between
'a' and
'a ';
847 explain select * from t2 where a =
'a' or a=
'a ';
849 update t1
set a=
'b' where a<>
'a';
851 explain select * from t1 where a not between
'b' and
'b';
852 select a, hex(filler) from t1 where a not between 'b' and 'b';
859 create
table t1 (a
int);
860 insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
861 create
table t2 (a
int, key(a));
862 insert into t2 select 2*(A.a + 10*(B.a + 10*C.a)) from t1 A, t1 B, t1 C;
864 set @a="select * from t2 force
index (a) where a NOT IN(0";
865 select count(*) from (select @a:=concat(@a, ',', a) from t2 ) Z;
866 set @a=concat(@a, ')');
868 insert into t2 values (11),(13),(15);
870 set @b= concat("explain ", @a);
872 prepare stmt1 from @b;
875 prepare stmt1 from @a;
881 # Bug #18165: range access for BETWEEN with a constant for the first argument
885 id int NOT NULL DEFAULT
'0',
886 b
int NOT NULL DEFAULT
'0',
887 c
int NOT NULL DEFAULT
'0',
888 INDEX idx1(b,c), INDEX idx2(c));
890 INSERT INTO t1(
id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
892 INSERT INTO t1(b,c) VALUES (3,4), (3,4);
894 SELECT * FROM t1 WHERE b<=3 AND 3<=c;
895 SELECT * FROM t1 WHERE 3 BETWEEN b AND c;
897 EXPLAIN SELECT * FROM t1 WHERE b<=3 AND 3<=c;
898 EXPLAIN SELECT * FROM t1 WHERE 3 BETWEEN b AND c;
900 SELECT * FROM t1 WHERE 0 < b OR 0 > c;
901 SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c;
903 EXPLAIN SELECT * FROM t1 WHERE 0 < b OR 0 > c;
904 EXPLAIN SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c;
909 # Bug #16249: different results for a range with an without index
910 # when a range condition use an invalid datetime constant
914 item
char(20) NOT NULL
default '',
915 started datetime NOT NULL
default '0000-00-00 00:00:00',
916 price decimal(16,3) NOT NULL
default '0.000',
917 PRIMARY
KEY (item,started)
920 INSERT INTO t1 VALUES
921 ('A1','2005-11-01 08:00:00',1000),
922 ('A1','2005-11-15 00:00:00',2000),
923 ('A1','2005-12-12 08:00:00',3000),
924 ('A2','2005-12-01 08:00:00',1000);
926 EXPLAIN SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 24:00:00';
927 SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 24:00:00';
928 SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-02 00:00:00';
930 DROP INDEX `PRIMARY` ON t1;
932 EXPLAIN SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 24:00:00';
933 SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-01 24:00:00';
934 SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-02 00:00:00';
939 --echo BUG
#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
942 id int(11) NOT NULL auto_increment,
943 dateval date
default NULL,
945 KEY dateval (dateval)
946 ) AUTO_INCREMENT=173;
948 INSERT INTO t1 VALUES
949 (1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'),
950 (5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'),
951 (9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11');
953 --echo This must use range access:
954 explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '2007-01-02 23:59:59';
959 # Bug #33833: different or-ed predicates were erroneously merged into one that
960 # resulted in ref access instead of range access and a wrong result set
964 a varchar(32),
index (a)
965 ) DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
967 INSERT INTO t1 VALUES
968 ('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A');
970 SELECT a FROM t1 WHERE a='b' OR a='B';
971 EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
976 # Bug #34731: highest possible value for INT erroneously filtered by WHERE
979 # test UNSIGNED. only occurs when indexed.
980 CREATE
TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY
KEY (f1));
982 INSERT INTO t1 VALUES (127),(254),(0),(1),(255);
986 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256;
987 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0;
989 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255;
991 # show we don't fiddle with lower bound on UNSIGNED
993 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1;
995 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1;
1000 # test signed. only occurs when index.
1001 CREATE
TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY
KEY (f1));
1003 INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127);
1007 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128;
1008 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0;
1010 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127;
1014 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129;
1015 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0;
1017 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128;
1023 # BUG#22393 fix: Adjust 'ref' estimate if we have 'range' estimate for
1024 # a smaller scan interval
1025 create
table t1 (a
int);
1026 insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
1028 create
table t2 (a
int, b
int, filler
char(100));
1029 insert into t2 select A.a + 10 * (B.a + 10 * C.a), 10,
'filler' from t1 A,
1030 t1 B, t1 C where A.a < 5;
1032 insert into t2 select 1000, b,
'filler' from t2;
1035 # ( 1 , 10, 'filler')
1036 # ( 2 , 10, 'filler')
1037 # ( 3 , 10, 'filler')
1038 # (... , 10, 'filler')
1040 # (1000, 10, 'filler') - 500 times
1044 select
'In following EXPLAIN the access method should be ref or range, #rows~=500 (and not 2)' Z;
1045 explain select * from t2 where a=1000 and b<11;
1050 # Bug#42846: wrong result returned for range scan when using covering index
1052 CREATE
TABLE t1( a INT, b INT,
KEY( a, b ) );
1054 CREATE
TABLE t2( a INT, b INT,
KEY( a, b ) );
1056 CREATE
TABLE t3( a INT, b INT,
KEY( a, b ) );
1058 INSERT INTO t1( a, b )
1059 VALUES (0, 1), (1, 2), (1, 4), (2, 3), (5, 0), (9, 7);
1061 INSERT INTO t2( a, b )
1062 VALUES ( 1, 1), ( 2, 1), ( 3, 1), ( 4, 1), ( 5, 1),
1063 ( 6, 1), ( 7, 1), ( 8, 1), ( 9, 1), (10, 1),
1064 (11, 1), (12, 1), (13, 1), (14, 1), (15, 1),
1065 (16, 1), (17, 1), (18, 1), (19, 1), (20, 1);
1067 INSERT INTO t2 SELECT a, 2 FROM t2 WHERE b = 1;
1068 INSERT INTO t2 SELECT a, 3 FROM t2 WHERE b = 1;
1070 # To make range scan compelling to the optimizer
1071 INSERT INTO t2 SELECT -1, -1 FROM t2;
1072 INSERT INTO t2 SELECT -1, -1 FROM t2;
1073 INSERT INTO t2 SELECT -1, -1 FROM t2;
1076 VALUES (1, 0), (2, 0), (3, 0), (4, 0), (5, 0),
1077 (6, 0), (7, 0), (8, 0), (9, 0), (10, 0);
1079 # To make range scan compelling to the optimizer
1080 INSERT INTO t3 SELECT * FROM t3 WHERE a = 10;
1081 INSERT INTO t3 SELECT * FROM t3 WHERE a = 10;
1085 # Problem#1 Test queries. Will give missing results unless Problem#1 is fixed.
1086 # With one exception, they are independent of Problem#2.
1088 SELECT * FROM t1 WHERE
1094 SELECT * FROM t1 WHERE
1099 # Query below: Tests both Problem#1 and Problem#2 (EXPLAIN differs as well)
1100 SELECT * FROM t1 WHERE
1106 SELECT * FROM t1 WHERE
1111 SELECT * FROM t1 WHERE
1112 3 <= a AND a <= 5 OR
1117 SELECT * FROM t1 WHERE
1118 3 <= a AND a <= 5 OR
1122 SELECT * FROM t1 WHERE
1123 3 <= a AND a <= 5 OR
1127 SELECT * FROM t1 WHERE
1128 3 <= a AND a <= 5 OR
1132 # Problem#2 Test queries.
1133 # These queries will give missing results if Problem#1 is fixed.
1134 # But Problem#1 also hides this bug.
1136 SELECT * FROM t2 WHERE
1137 5 <= a AND a < 10 AND b = 1 OR
1138 15 <= a AND a < 20 AND b = 3
1143 SELECT * FROM t2 WHERE
1144 5 <= a AND a < 10 AND b = 1 OR
1145 15 <= a AND a < 20 AND b = 3
1149 SELECT * FROM t2 WHERE
1150 5 <= a AND a < 10 AND b = 2 OR
1151 15 <= a AND a < 20 AND b = 3
1156 SELECT * FROM t2 WHERE
1157 5 <= a AND a < 10 AND b = 2 OR
1158 15 <= a AND a < 20 AND b = 3
1162 SELECT * FROM t3 WHERE
1163 5 <= a AND a < 10 AND b = 3 OR
1168 SELECT * FROM t3 WHERE
1169 5 <= a AND a < 10 AND b = 3 OR
1173 DROP
TABLE t1, t2, t3;
1176 --echo # Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN
1180 INSERT INTO t1 VALUES (1), (NULL);
1181 SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL);
1185 --echo # Bug#47925: regression of range optimizer and date comparison in 5.1.39!
1187 CREATE
TABLE t1 ( a DATE,
KEY ( a ) );
1188 CREATE
TABLE t2 ( a DATETIME,
KEY ( a ) );
1190 --echo # Make optimizer choose range scan
1191 INSERT INTO t1 VALUES (
'2009-09-22'), (
'2009-09-22'), (
'2009-09-22');
1192 INSERT INTO t1 VALUES (
'2009-09-23'), (
'2009-09-23'), (
'2009-09-23');
1194 INSERT INTO t2 VALUES (
'2009-09-22 12:00:00'), (
'2009-09-22 12:00:00'),
1195 (
'2009-09-22 12:00:00');
1196 INSERT INTO t2 VALUES (
'2009-09-23 12:00:00'), (
'2009-09-23 12:00:00'),
1197 (
'2009-09-23 12:00:00');
1199 --echo # DATE vs DATE
1200 --replace_column 1 X 2 X 3 X 7 X 8 X 9 X 10 X
1202 SELECT * FROM t1 WHERE a >=
'2009/09/23';
1203 SELECT * FROM t1 WHERE a >=
'2009/09/23';
1204 SELECT * FROM t1 WHERE a >=
'20090923';
1205 SELECT * FROM t1 WHERE a >= 20090923;
1206 SELECT * FROM t1 WHERE a >=
'2009-9-23';
1207 SELECT * FROM t1 WHERE a >=
'2009.09.23';
1208 SELECT * FROM t1 WHERE a >=
'2009:09:23';
1210 --echo # DATE vs DATETIME
1211 --replace_column 1 X 2 X 3 X 7 X 8 X 9 X 10 X
1213 SELECT * FROM t2 WHERE a >=
'2009/09/23';
1214 SELECT * FROM t2 WHERE a >=
'2009/09/23';
1215 SELECT * FROM t2 WHERE a >=
'2009/09/23';
1216 SELECT * FROM t2 WHERE a >=
'20090923';
1217 SELECT * FROM t2 WHERE a >= 20090923;
1218 SELECT * FROM t2 WHERE a >=
'2009-9-23';
1219 SELECT * FROM t2 WHERE a >=
'2009.09.23';
1220 SELECT * FROM t2 WHERE a >=
'2009:09:23';
1222 --echo # DATETIME vs DATETIME
1223 --replace_column 1 X 2 X 3 X 7 X 8 X 9 X 10 X
1225 SELECT * FROM t2 WHERE a >=
'2009/09/23 12:00:00';
1226 SELECT * FROM t2 WHERE a >=
'2009/09/23 12:00:00';
1227 SELECT * FROM t2 WHERE a >=
'20090923120000';
1228 SELECT * FROM t2 WHERE a >= 20090923120000;
1229 SELECT * FROM t2 WHERE a >=
'2009-9-23 12:00:00';
1230 SELECT * FROM t2 WHERE a >=
'2009.09.23 12:00:00';
1231 SELECT * FROM t2 WHERE a >=
'2009:09:23 12:00:00';
1233 --echo # DATETIME vs DATE
1234 --replace_column 1 X 2 X 3 X 7 X 8 X 9 X 10 X
1236 SELECT * FROM t1 WHERE a >=
'2009/09/23 00:00:00';
1237 SELECT * FROM t1 WHERE a >=
'2009/09/23 00:00:00';
1238 SELECT * FROM t1 WHERE a >=
'2009/09/23 00:00:00';
1239 SELECT * FROM t1 WHERE a >=
'20090923000000';
1240 SELECT * FROM t1 WHERE a >= 20090923000000;
1241 SELECT * FROM t1 WHERE a >=
'2009-9-23 00:00:00';
1242 SELECT * FROM t1 WHERE a >=
'2009.09.23 00:00:00';
1243 SELECT * FROM t1 WHERE a >=
'2009:09:23 00:00:00';
1245 --echo #
Test of the
new get_date_from_str implementation
1246 --echo # Behavior differs slightly between the trunk and mysql-pe.
1247 --echo # The former may give
errors for the truncated values,
while the latter
1248 --echo # gives warnings. The purpose of
this test is not
to interfere, and only
1249 --echo # preserve existing behavior.
1250 SELECT str_to_date(
'2007-10-00',
'%Y-%m-%d') >=
'' AND
1251 str_to_date(
'2007-10-00',
'%Y-%m-%d') <=
'2007/10/20';
1253 SELECT str_to_date(
'2007-20-00',
'%Y-%m-%d') >=
'2007/10/20' AND
1254 str_to_date(
'2007-20-00',
'%Y-%m-%d') <=
'';
1256 SELECT str_to_date(
'2007-10-00',
'%Y-%m-%d') BETWEEN '' AND '2007/10/20';
1257 SELECT str_to_date('2007-20-00', '%Y-%m-%d') BETWEEN '2007/10/20' AND '';
1259 SELECT str_to_date('', '%Y-%m-%d');
1264 --echo # Bug#48459: valgrind
errors with
query using 'Range checked for each
1273 KEY ( d, a, b ( 2 ) ),
1277 INSERT INTO t1 VALUES ( NULL,
'a', 1, 2 ), ( NULL,
'a', 1, 2 ),
1278 ( 1,
'a', 1, 2 ), ( 1,
'a', 1, 2 );
1287 INSERT INTO t2 VALUES ( 1, 1, NULL ), ( 1, 1, NULL );
1289 --echo # Should not give Valgrind warnings
1292 WHERE t1.d <>
'1' AND t1.b >
'1'
1293 AND t1.a = t2.a AND t1.c = t2.c;
1298 --echo # Bug #48665: sql-bench
's insert test fails due to wrong result
1301 CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a));
1303 INSERT INTO t1 VALUES (0,0), (1,1);
1305 --replace_column 1 @ 2 @ 3 @ 5 @ 6 @ 7 @ 8 @ 9 @ 10 @
1307 SELECT * FROM t1 FORCE INDEX (PRIMARY)
1308 WHERE (a>=1 AND a<=2) OR (a>=4 AND a<=5) OR (a>=0 AND a <=10);
1310 --echo # Should return 2 rows
1311 SELECT * FROM t1 FORCE INDEX (PRIMARY)
1312 WHERE (a>=1 AND a<=2) OR (a>=4 AND a<=5) OR (a>=0 AND a <=10);
1317 --echo # Bug #54802: 'NOT BETWEEN
' evaluation is incorrect
1320 CREATE TABLE t1 (c_key INT, c_notkey INT, KEY(c_key));
1321 INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
1323 EXPLAIN SELECT * FROM t1 WHERE 2 NOT BETWEEN c_notkey AND c_key;
1324 SELECT * FROM t1 WHERE 2 NOT BETWEEN c_notkey AND c_key;
1329 --echo # Bug #57030: 'BETWEEN
' evaluation is incorrect
1332 # Test some BETWEEN predicates which does *not* follow the
1333 # 'normal
' pattern of <field> BETWEEN <low const> AND <high const>
1335 CREATE TABLE t1(pk INT PRIMARY KEY, i4 INT);
1336 CREATE UNIQUE INDEX i4_uq ON t1(i4);
1338 INSERT INTO t1 VALUES (1,10), (2,20), (3,30);
1341 SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 10;
1342 SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 10;
1345 SELECT * FROM t1 WHERE 10 BETWEEN i4 AND i4;
1346 SELECT * FROM t1 WHERE 10 BETWEEN i4 AND i4;
1349 SELECT * FROM t1 WHERE 10 BETWEEN 10 AND i4;
1350 SELECT * FROM t1 WHERE 10 BETWEEN 10 AND i4;
1353 SELECT * FROM t1 WHERE 10 BETWEEN i4 AND 10;
1354 SELECT * FROM t1 WHERE 10 BETWEEN i4 AND 10;
1357 SELECT * FROM t1 WHERE 10 BETWEEN 10 AND 10;
1358 SELECT * FROM t1 WHERE 10 BETWEEN 10 AND 10;
1361 SELECT * FROM t1 WHERE 10 BETWEEN 11 AND 11;
1362 SELECT * FROM t1 WHERE 10 BETWEEN 11 AND 11;
1365 SELECT * FROM t1 WHERE 10 BETWEEN 100 AND 0;
1366 SELECT * FROM t1 WHERE 10 BETWEEN 100 AND 0;
1369 SELECT * FROM t1 WHERE i4 BETWEEN 100 AND 0;
1370 SELECT * FROM t1 WHERE i4 BETWEEN 100 AND 0;
1373 SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 99999999999999999;
1374 SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 99999999999999999;
1377 SELECT * FROM t1 WHERE i4 BETWEEN 999999999999999 AND 30;
1378 SELECT * FROM t1 WHERE i4 BETWEEN 999999999999999 AND 30;
1381 SELECT * FROM t1 WHERE i4 BETWEEN 10 AND '20
';
1382 SELECT * FROM t1 WHERE i4 BETWEEN 10 AND '20
';
1384 #Should detect the EQ_REF 't2.pk=t1.i4
'
1386 SELECT * FROM t1, t1 as t2 WHERE t2.pk BETWEEN t1.i4 AND t1.i4;
1387 SELECT * FROM t1, t1 as t2 WHERE t2.pk BETWEEN t1.i4 AND t1.i4;
1390 SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
1391 SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
1396 --echo # BUG#13519696 - 62940: SELECT RESULTS VARY WITH VERSION AND
1397 --echo # WITH/WITHOUT INDEX RANGE SCAN
1400 create table t1 (id int unsigned not null auto_increment primary key);
1401 insert into t1 values (null);
1402 insert into t1 select null from t1;
1403 insert into t1 select null from t1;
1404 insert into t1 select null from t1;
1405 insert into t1 select null from t1;
1406 insert into t1 select null from t1;
1407 insert into t1 select null from t1;
1408 insert into t1 select null from t1;
1409 insert into t1 select null from t1;
1411 id int unsigned not null auto_increment,
1412 val decimal(5,3) not null,
1413 primary key (id,val),
1414 unique key (val,id),
1417 insert into t2 select null,id*0.0009 from t1;
1420 select count(val) from t2 ignore index (val) where val > 0.1155;
1421 select count(val) from t2 force index (val) where val > 0.1155;
1426 --echo # BUG#13453382 - REGRESSION SINCE 5.1.39, RANGE OPTIMIZER WRONG
1427 --echo # RESULTS WITH DECIMAL CONVERSION
1430 create table t1 (a int,b int,c int,primary key (a,c));
1431 insert into t1 values (1,1,2),(1,1,3),(1,1,4);
1432 # show that the integer 3 is bigger than the decimal 2.9,
1433 # which should also apply to comparing "c" with 2.9
1435 select convert(3, signed integer) > 2.9;
1436 select * from t1 force index (primary) where a=1 and c>= 2.9;
1437 select * from t1 ignore index (primary) where a=1 and c>= 2.9;
1438 select * from t1 force index (primary) where a=1 and c> 2.9;
1439 select * from t1 ignore index (primary) where a=1 and c> 2.9;
1443 --echo # BUG#13463488 - 63437: CHAR & BETWEEN WITH INDEX RETURNS WRONG
1444 --echo # RESULT AFTER MYSQL 5.1.
1448 F1 CHAR(5) NOT NULL,
1449 F2 CHAR(5) NOT NULL,
1450 F3 CHAR(5) NOT NULL,
1455 INSERT INTO t1 VALUES
1456 ('A
','A
','A
'),('AA
','AA
','AA
'),('AAA
','AAA
','AAA
'),
1457 ('AAAA
','AAAA
','AAAA
'),('AAAAA
','AAAAA
','AAAAA
');
1459 SELECT * FROM t1 WHERE F1 = 'A
';
1460 SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 = 'A
';
1461 SELECT * FROM t1 WHERE F1 >= 'A
';
1462 SELECT * FROM t1 WHERE F1 > 'A
';
1463 SELECT * FROM t1 WHERE F1 BETWEEN 'A
' AND 'AAAAA
';
1464 SELECT * FROM t1 WHERE F2 BETWEEN 'A
' AND 'AAAAA
';
1465 SELECT * FROM t1 WHERE F3 BETWEEN 'A
' AND 'AAAAA
';
1466 SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 BETWEEN 'A
' AND
1471 --echo End of 5.1 tests
1474 # BUG#32262 fix: crash with decimal column...
1477 CREATE TABLE t1 (c1 DECIMAL(10,0),INDEX(c1));
1478 INSERT INTO t1 VALUES (1),(2),(3);
1479 SELECT c1 FROM t1 WHERE c1 >= 'A
' GROUP BY 1;
1483 # BUG#32229: Range optimizer crashes for 'range checked
for each record' query
1485 create table t1 (a int,b int,key (b),key (a),key (b,a));
1486 insert into t1(a,b) values (1,2),(3,4),(5,6),(7,8);
1487 create table t2 (c int);
1488 insert into t2(c) values (1),(5),(6),(7),(8);
1489 select 1 from (select c from t1,t2 where b >= 1 and a <=> c group by 1 limit 1) as d1;
1493 --echo # Bug #26106: Wrong plan may be chosen when there are several possible
1494 --echo # range and ref accesses
1496 --echo # Note: The fix for this bug has been reverted. The code will no longer
1497 --echo # select the optimal plan for the two following test queries. This is
1498 --echo # not due to a bug but due to minor differences in range estimates
1499 --echo # produced by the storage engine.
1508 INSERT INTO t1(a) VALUES (1);
1510 VALUES (2,3),(2,3),(2,3),(2,3),(2,3),(2,3),(2,3),(2,3),(2,3),(2,3);
1511 INSERT INTO t1 SELECT 3, 4 FROM t1 WHERE a = 2 AND b = 3;
1512 INSERT INTO t1 SELECT 4, 1 FROM t1 WHERE a = 2 AND b = 3;
1514 INSERT INTO t1 VALUES (1, 2);
1515 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 2
1516 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 4
1517 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 8
1518 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 16
1519 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 32
1520 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 64
1521 INSERT INTO t1 SELECT a, b FROM t1 WHERE a=1 AND b=2; # 128
1522 --echo # This must use range over index l, not k.
1523 --echo # Update: Due to patch being reverted and minor differences in
1524 --echo # range estimates k is selected.
1525 EXPLAIN SELECT * FROM t1 WHERE a = 1 AND b >= 2;
1537 INSERT INTO t2(a) VALUES (1);
1539 VALUES (2,3,3),(2,3,3),(2,3,3),(2,3,3),(2,3,3),
1540 (2,3,3),(2,3,3),(2,3,3),(2,3,3),(2,3,3);
1541 INSERT INTO t2 SELECT 3, 4, 4 FROM t2 WHERE a = 2 AND b = 3;
1542 INSERT INTO t2 SELECT 4, 1, 1 FROM t2 WHERE a = 2 AND b = 3;
1544 INSERT INTO t2 VALUES (1, 2, 2);
1545 INSERT INTO t2 SELECT a, b, c FROM t2 WHERE a=1 AND b=2; # 2
1546 INSERT INTO t2 SELECT a, b, c FROM t2 WHERE a=1 AND b=2; # 4
1547 INSERT INTO t2 SELECT a, b, c FROM t2 WHERE a=1 AND b=2; # 8
1548 INSERT INTO t2 SELECT a, b, c FROM t2 WHERE a=1 AND b=2; # 16
1549 INSERT INTO t2 SELECT a, b, c FROM t2 WHERE a=1 AND b=2; # 32
1550 INSERT INTO t2 SELECT a, b, c FROM t2 WHERE a=1 AND b=2; # 64
1551 INSERT INTO t2 VALUES (1, 1, 2);
1553 --echo # This must use range over index l, not n.
1554 --echo # Update: Due to patch being reverted and minor differences in
1555 --echo # range estimates k is selected.
1556 EXPLAIN SELECT * FROM t2 WHERE a = 1 AND b >= 2 AND c >= 2;
1561 --echo # BUG#11765831: 'RANGE ACCESS
' MAY INCORRECTLY FILTER
1562 --echo # AWAY QUALIFYING ROWS
1566 K INT NOT NULL AUTO_INCREMENT,
1571 INSERT INTO t10(I,J) VALUES (6,1),(6,2),(6,3),(6,4),(6,5),
1572 (6,6),(6,7),(6,8),(6,9),(6,0);
1574 CREATE TABLE t100 LIKE t10;
1575 INSERT INTO t100(I,J) SELECT X.I, X.K+(10*Y.K) FROM t10 AS X,t10 AS Y;
1577 # Insert offending value:
1578 INSERT INTO t100(I,J) VALUES(8,26);
1580 let $query= SELECT * FROM t100 WHERE I <> 6 OR (I <> 8 AND J = 5);
1582 #Verify that 'range
' access will be used
1584 --eval EXPLAIN $query
1586 # Only row 101,8,26 should be returned
1590 DROP TABLE t10,t100;
1593 --echo # BUG#12698916 - JOIN QUERY GIVES WRONG RESULT AT 2ND EXEC. OR
1594 --echo # AFTER FLUSH TABLES [-INT VS NULL]
1596 CREATE TABLE t1 (col_int INT, pk INT) ENGINE=InnoDB STATS_PERSISTENT=0;
1598 INSERT INTO t1 VALUES (-100,1),(1,6);
1602 col_varchar VARCHAR(100) NOT NULL DEFAULT "DEFAULT",
1606 ) ENGINE=InnoDB STATS_PERSISTENT=0;
1608 INSERT INTO t2 VALUES
1609 (1,"GOOD",1),(100,"",2),(200,"",3),(300,"",4),(400,"",5),(500,"",8);
1611 let $query=SELECT t1.*,t2.* FROM t1 straight_join t2
1612 ON t2.col_int_key = t1.col_int WHERE t2.pk < t1.pk;
1614 eval EXPLAIN $query;
1616 --echo # need FLUSH so that InnoDB statistics change and thus plan changes
1618 eval EXPLAIN $query;
1624 --echo # Bug#12694872 -
1625 --echo # VALGRIND: 18,816 BYTES IN 196 BLOCKS ARE DEFINITELY LOST IN UNIQUE::GET
1629 pk INTEGER AUTO_INCREMENT,
1630 col_int_nokey INTEGER NOT NULL,
1631 col_int_key INTEGER NOT NULL,
1633 col_date_key DATE NOT NULL,
1635 col_varchar_key VARCHAR(1) NOT NULL,
1636 col_varchar_nokey VARCHAR(1) NOT NULL,
1641 KEY (col_varchar_key, col_int_key)
1651 (0, 4, '2011-08-25
', 'j
', 'j
'),
1652 (8, 6, '2004-09-18
', 'v
', 'v
'),
1653 (1, 3, '2009-12-01
', 'c
', 'c
'),
1654 (8, 5, '2004-12-17
', 'm
', 'm
'),
1655 (9, 3, '2000-03-14
', 'd
', 'd
'),
1656 (6, 2, '2006-05-25
', 'y
', 'y
'),
1657 (1, 9, '2008-01-23
', 't
', 't
'),
1658 (6, 3, '2007-06-18
', 'd
', 'd
'),
1659 (2, 8, '2002-10-13
', 's
', 's
'),
1660 (4, 1, '1900-01-01
', 'r
', 'r
'),
1661 (8, 8, '1959-04-25
', 'm
', 'm
'),
1662 (4, 8, '2006-03-09
', 'b
', 'b
'),
1663 (4, 5, '2001-06-05
', 'x
', 'x
'),
1664 (7, 7, '2006-05-28
', 'g
', 'g
'),
1665 (4, 5, '2001-04-19
', 'p
', 'p
'),
1666 (1, 1, '1900-01-01
', 'q
', 'q
'),
1667 (9, 6, '2004-08-20
', 'w
', 'w
'),
1668 (4, 2, '2004-10-10
', 'd
', 'd
'),
1669 (8, 9, '2000-04-02
', 'e
', 'e
')
1673 SELECT table2.col_date_key AS field1,
1674 CONCAT ( table2.col_varchar_nokey, table1.col_varchar_nokey ) AS field2
1675 FROM ( t1 AS table1 INNER JOIN t1 AS table2
1676 ON (( table2.pk <> table1.pk ) AND
1677 ( table2.pk >= table1.col_int_nokey ) ) )
1678 WHERE ( table1.pk > 226 AND
1679 table1.pk < ( 226 + 102 ) OR
1680 ( table1.col_int_key > 226 AND
1681 table1.col_int_key < ( 226 + 36 ) OR
1682 ( table1.col_varchar_key <= 'h
' OR
1683 table1.col_int_key > 226 AND
1684 table1.col_int_key < ( 226 + 227 ) )
1689 ALTER TABLE t1 DISABLE KEYS;
1692 ALTER TABLE t1 ENABLE KEYS;
1694 eval CREATE TABLE t2 $query;
1697 eval SELECT * FROM t2
1698 WHERE (field1, field2) IN ($query);
1703 --echo # BUG#12912171 - ASSERTION FAILED: QUICK->HEAD->READ_SET ==
1704 --echo # SAVE_READ_SET
1710 PRIMARY KEY (c,a), KEY (a),KEY (a)
1711 ) ENGINE=INNODB PARTITION BY KEY () PARTITIONS 2;
1712 INSERT INTO t1 VALUES (1,5,1),(2,4,1),(3,3,1),(4,2,1),(5,1,1);
1713 UPDATE t1 SET b = 0, c=1 WHERE a <=>0;
1718 --echo # BUG#13256446 - ASSERTION QUICK->HEAD->READ_SET ==
1719 --echo # SAVE_READ_SET' FAILED IN OPT_RANGE.CC:1606
1722 f1 INT AUTO_INCREMENT,
1728 CREATE ALGORITHM=MERGE VIEW v2 AS SELECT f1,f2,f3,f4 FROM t1 WHERE f2=103;
1729 INSERT INTO t1 VALUES (154,0,NULL,0),(0,NULL,9,0),
1730 (NULL,102,NULL,3),(0,3,NULL,0), (9,0,NULL,0),(0,9,NULL,157);
1732 UPDATE v2 SET f4=0, f2=NULL, f1=NULL WHERE f1 > 16
ORDER BY f1;
1738 f1 INT AUTO_INCREMENT,
1744 INSERT INTO t1 VALUES(1,NULL,NULL,0), (2,2,0,3), (9,0,107,18),
1745 (10,0,0,0), (231,0,0,0), (232,0,8,0), (234,0,0,NULL), (235,8,0,3);
1746 CREATE ALGORITHM=MERGE VIEW v3 AS SELECT f1,f2,f3,f4 FROM t1 WHERE f1<=85 ;
1748 UPDATE v3 SET f3=0, f4=4 WHERE f2=68
ORDER BY f1;
1754 --echo # BUG#13731380: RANGE OPTIMIZER CALLS RECORDS_IN_RANGE() FOR OPEN RANGE
1757 CREATE
TABLE t1 (pk INT PRIMARY
KEY);
1758 INSERT INTO t1 VALUES (1),(3),(5);
1759 SELECT * FROM t1 WHERE pk <> 3 OR pk < 4;
1763 --echo # BUG#13803810: TOO FEW ROWS RETURNED FOR RANGE ACCESS IN
1764 --echo # VARCHAR INDEX USING DATETIME VALUE
1766 CREATE
TABLE t1 (a DATETIME);
1767 INSERT INTO t1 VALUES (
'2001-01-01 00:00:00');
1768 INSERT INTO t1 VALUES (
'2001-01-01 11:22:33');
1770 CREATE
TABLE t2 (b VARCHAR(64),
KEY (b));
1771 INSERT INTO t2 VALUES (
'2001-01-01');
1772 INSERT INTO t2 VALUES (
'2001.01.01');
1773 INSERT INTO t2 VALUES (
'2001#01#01');
1774 INSERT INTO t2 VALUES (
'2001-01-01 00:00:00');
1775 INSERT INTO t2 VALUES (
'2001-01-01 11:22:33');
1778 --echo # range/ref access cannot be used
for this query
1780 EXPLAIN SELECT * FROM t2 WHERE b=CAST(
'2001-01-01' AS DATE);
1781 SELECT * FROM t2 WHERE b=CAST(
'2001-01-01' AS DATE);
1783 let $query_ab=SELECT * FROM t1, t2 WHERE a=b
ORDER BY BINARY a, BINARY b;
1784 let $query_ba=SELECT * FROM t1, t2 WHERE b=a
ORDER BY BINARY a, BINARY b;
1787 --echo # range/ref access cannot be used
for any of the queries below.
1788 --echo # See BUG#13814468 about
'Range checked for each record'
1790 eval EXPLAIN $query_ab;
1793 eval EXPLAIN $query_ba;