~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/range.test

  • Committer: Patrick Galbraith
  • Date: 2008-07-24 16:57:40 UTC
  • mto: (202.2.4 rename-mysql-to-drizzle)
  • mto: This revision was merged to the branch mainline in revision 212.
  • Revision ID: patg@ishvara-20080724165740-x58yw6zs6d9o17lf
Most everything working with client rename
mysqlslap test still fails... can't connect to the server

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 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)
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(6) DEFAULT '0' NOT NULL,
42
 
  YEAR int(6) DEFAULT '0' NOT NULL,
43
 
  ISSUE int(6) DEFAULT '0' NOT NULL,
44
 
  CLOSED int(4) DEFAULT '0' NOT NULL,
45
 
  ISS_DATE date DEFAULT '0000-00-00' NOT NULL,
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
 
repair table t1;
66
 
drop table t1;
67
 
 
68
 
CREATE TABLE t1 (
69
 
  id int(11) NOT NULL auto_increment,
70
 
  parent_id int(11) DEFAULT '0' NOT NULL,
71
 
  level int(4) DEFAULT '0' NOT NULL,
72
 
  PRIMARY KEY (id),
73
 
  KEY parent_id (parent_id),
74
 
  KEY level (level)
75
 
);
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;
85
 
drop table t1;
86
 
 
87
 
#
88
 
# Testing of bug in range optimizer with many key parts and > and <
89
 
#
90
 
 
91
 
create table t1(
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));
99
 
 
100
 
insert into t1 values("OV-3","PAN1",91,-92,40,50);
101
 
insert into t1 values("OV-4","PAN1",91,-92,40,50);
102
 
 
103
 
select * from t1 where t1.Satellite = "OV-3" and t1.SensorMode = "PAN1" and t1.FullImageCornersUpperLeftLongitude > -90.000000 and t1.FullImageCornersUpperRightLongitude < -82.000000;
104
 
drop table t1;
105
 
 
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;
113
 
drop table t1;
114
 
 
115
 
#
116
 
# Problem with binary strings
117
 
#
118
 
 
119
 
CREATE TABLE t1 (
120
 
  t1ID int(10) 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 '',
127
 
  PRIMARY KEY  (t1ID),
128
 
  KEY IdxArt (art),
129
 
  KEY IdxKnr (KNR),
130
 
  KEY IdxArtnr (ARTNR)
131
 
) ENGINE=MyISAM;
132
 
 
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';
176
 
drop table t1;
177
 
#
178
 
# BETWEEN problems
179
 
#
180
 
create table t1 (x int, y int, index(x), index(y));
181
 
insert into t1 (x) values (1),(2),(3),(4),(5),(6),(7),(8),(9);
182
 
update t1 set y=x;
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;
192
 
# testing IN
193
 
explain select count(*) from t1 where x in (1);
194
 
explain select count(*) from t1 where x in (1,2);
195
 
drop table t1;
196
 
 
197
 
#
198
 
# bug #1172: "Force index" option caused server crash
199
 
#
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;
207
 
DROP TABLE t1,t2;
208
 
 
209
 
#
210
 
# bug #1724: use RANGE on more selective column instead of REF on less
211
 
# selective
212
 
 
213
 
CREATE TABLE t1 (
214
 
  a int(11) default NULL,
215
 
  b int(11) default NULL,
216
 
  KEY a (a),
217
 
  KEY b (b)
218
 
) ENGINE=MyISAM;
219
 
 
220
 
 
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);
226
 
 
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;
230
 
DROP TABLE t1;
231
 
 
232
 
#
233
 
# Test problem with range optimzer and sub ranges
234
 
#
235
 
 
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);
242
 
DROP TABLE t1;
243
 
 
244
 
#
245
 
# Test problem with range optimization over overlapping ranges (#2448)
246
 
#
247
 
 
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);
250
 
SELECT * FROM t1
251
 
WHERE
252
 
(
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)
257
 
);
258
 
DROP TABLE t1;
259
 
 
260
 
#
261
 
# Test of problem with IN on many different keyparts. (Bug #4157)
262
 
#
263
 
 
264
 
CREATE TABLE t1 (
265
 
id int( 11 ) NOT NULL AUTO_INCREMENT ,
266
 
line int( 5 ) NOT NULL default '0',
267
 
columnid int( 3 ) NOT NULL default '0',
268
 
owner int( 3 ) NOT NULL default '0',
269
 
ordinal int( 3 ) NOT NULL default '0',
270
 
showid int( 6 ) NOT NULL default '1',
271
 
tableid int( 1 ) NOT NULL default '1',
272
 
content int( 5 ) 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 ) 
278
 
) ENGINE = MYISAM;
279
 
 
280
 
INSERT into t1 (owner,id,columnid,line) values (11,15,15,1),(11,13,13,5);
281
 
 
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;
283
 
drop table t1;
284
 
 
285
 
#
286
 
# test for a bug with in() and unique key
287
 
#
288
 
 
289
 
create  table t1 (id int(10) primary key);
290
 
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9);
291
 
 
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 ;
294
 
drop table t1;
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;
304
 
drop table t1;
305
 
 
306
 
 
307
 
#
308
 
# Problem with optimizing !=
309
 
#
310
 
 
311
 
create table t1 (
312
 
  id int not null auto_increment,
313
 
  name char(1) not null,
314
 
  uid int not null,
315
 
  primary key (id),
316
 
  index uid_index (uid));
317
 
  
318
 
create table t2 (
319
 
  id int not null auto_increment,
320
 
  name char(1) not null,
321
 
  uid int not null,
322
 
  primary key (id),
323
 
  index uid_index (uid));
324
 
  
325
 
insert into t1(id, uid, name) values(1, 0, ' ');
326
 
insert into t1(uid, name) values(0, ' ');
327
 
 
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;
343
 
 
344
 
delete from t2;
345
 
insert into t2(uid, name) values 
346
 
  (1, CHAR(64+1)),
347
 
  (2, CHAR(64+2)),
348
 
  (3, CHAR(64+3)),
349
 
  (4, CHAR(64+4)),
350
 
  (5, CHAR(64+5)),
351
 
  (6, CHAR(64+6)),
352
 
  (7, CHAR(64+7)),
353
 
  (8, CHAR(64+8)),
354
 
  (9, CHAR(64+9)),
355
 
  (10, CHAR(64+10)),
356
 
  (11, CHAR(64+11)),
357
 
  (12, CHAR(64+12)),
358
 
  (13, CHAR(64+13)),
359
 
  (14, CHAR(64+14)),
360
 
  (15, CHAR(64+15)),
361
 
  (16, CHAR(64+16)),
362
 
  (17, CHAR(64+17)),
363
 
  (18, CHAR(64+18)),
364
 
  (19, CHAR(64+19)),
365
 
  (20, CHAR(64+20)),
366
 
  (21, CHAR(64+21)),
367
 
  (22, CHAR(64+22)),
368
 
  (23, CHAR(64+23)),
369
 
  (24, CHAR(64+24)),
370
 
  (25, CHAR(64+25)),
371
 
  (26, CHAR(64+26));
372
 
 
373
 
insert into t1(uid, name) select uid, name from t2 order by uid;
374
 
 
375
 
delete from t2;
376
 
insert into t2(id, uid, name) select id, uid, name from t1;
377
 
 
378
 
select count(*) from t1;  
379
 
select count(*) from t2;
380
 
 
381
 
analyze table t1,t2;
382
 
 
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;
387
 
 
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;
390
 
 
391
 
drop table t1,t2;
392
 
 
393
 
# Fix for bug#4488 
394
 
#
395
 
create table t1 (x bigint not null);
396
 
insert into t1(x) values (0xfffffffffffffff0);
397
 
insert into t1(x) values (0xfffffffffffffff1);
398
 
select * from t1;
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;
406
 
 
407
 
 
408
 
create table t2 (x bigint not null);
409
 
insert into t2(x) values (-16);
410
 
insert into t2(x) values (-15);
411
 
select * from t2;
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;
419
 
drop table t1,t2;
420
 
 
421
 
--disable_warnings
422
 
create table t1 (x bigint not null primary key) engine=innodb;
423
 
--enable_warnings
424
 
insert into t1(x) values (0xfffffffffffffff0);
425
 
insert into t1(x) values (0xfffffffffffffff1);
426
 
select * from t1;
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;
434
 
 
435
 
drop table t1;
436
 
 
437
 
#
438
 
# Bug #11185 incorrect comparison of int to signed constant
439
 
#
440
 
create table t1 (a bigint);
441
 
create index t1i on t1(a);
442
 
insert into t1 select 18446744073709551615;
443
 
insert into t1 select 18446744073709551614;
444
 
 
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;
453
 
 
454
 
drop table t1;
455
 
 
456
 
#
457
 
# Bug #6045: Binary Comparison regression in MySQL 4.1
458
 
# Binary searches didn't use a case insensitive index.
459
 
#
460
 
set names latin1;
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;
468
 
# this one cannot:
469
 
explain select * from t1 where a='aaa' collate latin1_german1_ci;
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) 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;
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(11) NOT NULL,
500
 
  pk2 int(11) NOT NULL,
501
 
  pk3 int(11) NOT NULL,
502
 
  pk4 int(11) NOT NULL,
503
 
  filler char(82),
504
 
  PRIMARY KEY (pk1,pk2,pk3,pk4)
505
 
) DEFAULT CHARSET=latin1;
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) 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 '',
538
 
  PRIMARY KEY  (OXID),
539
 
  KEY OXNID (OXID),
540
 
  KEY OXLEFT (OXLEFT),
541
 
  KEY OXRIGHT (OXRIGHT),
542
 
  KEY OXROOTID (OXROOTID)
543
 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
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
 
EXPLAIN
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;
563
 
 
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;
568
 
 
569
 
DROP TABLE t1;
570
 
 
571
 
# BUG#26624 high mem usage (crash) in range optimizer (depends on order of fields in where)
572
 
create table t1 (
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)
578
 
);
579
 
insert into t1 (c1) values ('1'),('1'),('1'),('1');
580
 
 
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");
713
 
drop table t1;
714
 
--echo End of 4.1 tests
715
 
 
716
 
#
717
 
# Test for optimization request #10561: to use keys for
718
 
# NOT IN (c1,...,cn) and NOT BETWEEN c1 AND c2
719
 
#
720
 
 
721
 
CREATE TABLE t1 (
722
 
  id int(11) NOT NULL auto_increment,
723
 
  status varchar(20),
724
 
  PRIMARY KEY  (id),
725
 
  KEY (status)
726
 
);
727
 
 
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');
739
 
 
740
 
EXPLAIN SELECT * FROM t1 WHERE status <> 'A' AND status <> 'B';
741
 
EXPLAIN SELECT * FROM t1 WHERE status NOT IN ('A','B');
742
 
 
743
 
SELECT * FROM t1 WHERE status <> 'A' AND status <> 'B';
744
 
SELECT * FROM t1 WHERE status NOT IN ('A','B');
745
 
 
746
 
EXPLAIN SELECT status FROM t1 WHERE status <> 'A' AND status <> 'B';
747
 
EXPLAIN SELECT status FROM t1 WHERE status NOT IN ('A','B');
748
 
 
749
 
EXPLAIN SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B';
750
 
EXPLAIN SELECT * FROM t1 WHERE status < 'A' OR status > 'B';
751
 
 
752
 
SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B';
753
 
SELECT * FROM t1 WHERE status < 'A' OR status > 'B';
754
 
 
755
 
DROP TABLE t1;
756
 
 
757
 
#
758
 
# Test for bug #10031: range to be used over a view
759
 
#
760
 
 
761
 
CREATE TABLE  t1 (a int, b int, primary key(a,b));
762
 
 
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);
765
 
 
766
 
CREATE VIEW v1 as SELECT a,b FROM t1 WHERE b=3;
767
 
 
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;
770
 
 
771
 
EXPLAIN SELECT a,b FROM t1 WHERE a < 2;
772
 
EXPLAIN SELECT a,b FROM v1 WHERE a < 2;
773
 
 
774
 
SELECT a,b FROM t1 WHERE a < 2 and b=3;
775
 
SELECT a,b FROM v1 WHERE a < 2 and b=3; 
776
 
 
777
 
DROP VIEW v1;
778
 
DROP TABLE t1;
779
 
 
780
 
#
781
 
# Bug #11853: DELETE statement with a NOT (LIKE/<=>) where condition
782
 
#             for an indexed attribute              
783
 
#             
784
 
 
785
 
CREATE TABLE t1 (name varchar(15) NOT NULL, KEY idx(name));
786
 
INSERT INTO t1 VALUES ('Betty'), ('Anna');
787
 
 
788
 
SELECT * FROM t1;
789
 
DELETE FROM t1 WHERE name NOT LIKE 'A%a';
790
 
SELECT * FROM t1;
791
 
 
792
 
DROP TABLE t1;
793
 
 
794
 
CREATE TABLE t1 (a int, KEY idx(a));
795
 
INSERT INTO t1 VALUES (NULL), (1), (2), (3);
796
 
 
797
 
SELECT * FROM t1;
798
 
DELETE FROM t1 WHERE NOT(a <=> 2);
799
 
SELECT * FROM t1;
800
 
 
801
 
DROP TABLE t1;
802
 
 
803
 
#
804
 
# BUG#13317: range optimization doesn't work for IN over VIEW.
805
 
#
806
 
create table t1 (a int, b int, primary key(a,b));
807
 
create view v1 as select a, b from t1;
808
 
 
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);
812
 
 
813
 
--replace_column 9 #
814
 
explain select * from t1 where a in (3,4)  and b in (1,2,3);
815
 
--replace_column 9 #
816
 
explain select * from v1 where a in (3,4)  and b in (1,2,3);
817
 
--replace_column 9 #
818
 
explain select * from t1 where a between 3 and 4 and b between 1 and 2;
819
 
--replace_column 9 #
820
 
explain select * from v1 where a between 3 and 4 and b between 1 and 2;
821
 
 
822
 
drop view v1;
823
 
drop table t1;
824
 
 
825
 
# BUG#13455: 
826
 
create table t3 (a int);
827
 
insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
828
 
 
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;
835
 
 
836
 
create table t2 (a varchar(10), filler char(200), key(a));
837
 
insert into t2 select * from t1;
838
 
 
839
 
--replace_column 9 #
840
 
explain select * from t1 where a between 'a' and 'a '; 
841
 
--replace_column 9 #
842
 
explain select * from t1 where a = 'a' or a='a ';
843
 
 
844
 
--replace_column 9 #
845
 
explain select * from t2 where a between 'a' and 'a '; 
846
 
--replace_column 9 #
847
 
explain select * from t2 where a = 'a' or a='a ';
848
 
 
849
 
update t1 set a='b' where a<>'a';
850
 
--replace_column 9 #
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'; 
853
 
 
854
 
drop table t1,t2,t3;
855
 
 
856
 
#
857
 
# BUG#21282
858
 
#
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;
863
 
 
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, ')');
867
 
 
868
 
insert into t2 values (11),(13),(15);
869
 
 
870
 
set @b= concat("explain ", @a);
871
 
 
872
 
prepare stmt1 from @b;
873
 
execute stmt1;
874
 
 
875
 
prepare stmt1 from @a;
876
 
execute stmt1;
877
 
 
878
 
drop table t1, t2;
879
 
 
880
 
#
881
 
# Bug #18165: range access for BETWEEN with a constant for the first argument 
882
 
#
883
 
 
884
 
CREATE TABLE t1 (
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));
889
 
 
890
 
INSERT INTO t1(id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
891
 
 
892
 
INSERT INTO t1(b,c) VALUES (3,4), (3,4);
893
 
 
894
 
SELECT * FROM t1 WHERE b<=3 AND 3<=c;
895
 
SELECT * FROM t1 WHERE 3 BETWEEN b AND c;
896
 
 
897
 
EXPLAIN  SELECT * FROM t1 WHERE b<=3 AND 3<=c;
898
 
EXPLAIN  SELECT * FROM t1 WHERE 3 BETWEEN b AND c;
899
 
 
900
 
SELECT * FROM t1 WHERE 0 < b OR 0 > c;
901
 
SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c;
902
 
 
903
 
EXPLAIN SELECT * FROM t1 WHERE 0 < b OR 0 > c;
904
 
EXPLAIN SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c;
905
 
 
906
 
DROP TABLE t1;
907
 
 
908
 
#
909
 
# Bug #16249: different results for a range with an without index 
910
 
#             when a range condition use an invalid datetime constant 
911
 
#
912
 
 
913
 
CREATE TABLE t1 (                                      
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)                     
918
 
) ENGINE=MyISAM;   
919
 
 
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);
925
 
 
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';
929
 
 
930
 
DROP INDEX `PRIMARY` ON t1;
931
 
 
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';
935
 
 
936
 
DROP TABLE t1;
937
 
 
938
 
--echo
939
 
--echo BUG#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
940
 
--echo
941
 
CREATE TABLE t1 (
942
 
  id int(11) NOT NULL auto_increment,
943
 
  dateval date default NULL,
944
 
  PRIMARY KEY  (id),
945
 
  KEY dateval (dateval)
946
 
) AUTO_INCREMENT=173;
947
 
 
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');
952
 
 
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';
955
 
 
956
 
drop table t1;
957
 
 
958
 
#
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
961
 
#
962
 
 
963
 
CREATE TABLE t1 (
964
 
  a varchar(32), index (a)
965
 
) DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
966
 
 
967
 
INSERT INTO t1 VALUES
968
 
  ('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A');
969
 
 
970
 
SELECT a FROM t1 WHERE a='b' OR a='B';
971
 
EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
972
 
 
973
 
DROP TABLE t1;
974
 
 
975
 
#
976
 
# Bug #34731: highest possible value for INT erroneously filtered by WHERE
977
 
#
978
 
 
979
 
# test UNSIGNED. only occurs when indexed.
980
 
CREATE TABLE t1 (f1 int(11) NOT NULL, PRIMARY KEY (f1));
981
 
 
982
 
INSERT INTO t1 VALUES (127),(254),(0),(1),(255);
983
 
 
984
 
# test upper bound
985
 
# count 5
986
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256;
987
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0;
988
 
# count 4
989
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255;
990
 
 
991
 
# show we don't fiddle with lower bound on UNSIGNED
992
 
# count 0
993
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1;
994
 
# count 5
995
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1;
996
 
 
997
 
DROP TABLE t1;
998
 
 
999
 
 
1000
 
# test signed. only occurs when index.
1001
 
CREATE TABLE t1 ( f1 int(11) NOT NULL, PRIMARY KEY (f1));
1002
 
 
1003
 
INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127);
1004
 
 
1005
 
# test upper bound
1006
 
# count 5
1007
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128;
1008
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0;
1009
 
# count 4
1010
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127;
1011
 
 
1012
 
# test lower bound
1013
 
# count 5
1014
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129;
1015
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0;
1016
 
# count 4
1017
 
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128;
1018
 
 
1019
 
DROP TABLE t1;
1020
 
 
1021
 
# End of 5.0 tests
1022
 
 
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);
1027
 
 
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;
1031
 
 
1032
 
insert into t2 select 1000, b, 'filler' from t2;
1033
 
alter table t2 add index (a,b);
1034
 
# t2 values 
1035
 
#  ( 1  , 10, 'filler')
1036
 
#  ( 2  , 10, 'filler')
1037
 
#  ( 3  , 10, 'filler')
1038
 
#  (... , 10, 'filler')
1039
 
#   ...
1040
 
#  (1000, 10, 'filler') - 500 times
1041
 
 
1042
 
# 500 rows, 1 row
1043
 
 
1044
 
select 'In following EXPLAIN the access method should be ref, #rows~=500 (and not 2)' Z;
1045
 
explain select * from t2 where a=1000 and b<11;
1046
 
 
1047
 
drop table t1, t2;
1048
 
 
1049
 
--echo End of 5.1 tests
1050
 
 
1051
 
#
1052
 
# BUG#32262 fix: crash with decimal column...
1053
 
#
1054
 
 
1055
 
CREATE TABLE t1 (c1 DECIMAL(10,0),INDEX(c1));
1056
 
INSERT INTO t1 VALUES (1),(2),(3);
1057
 
SELECT c1 FROM t1 WHERE c1 >= 'A' GROUP BY 1;
1058
 
DROP TABLE t1;
1059
 
 
1060
 
#
1061
 
# BUG#32229: Range optimizer crashes for 'range checked for each record' query
1062
 
#
1063
 
create table t1 (a int,b int,key (b),key (a),key (b,a));
1064
 
insert into t1(a,b) values (1,2),(3,4),(5,6),(7,8);
1065
 
create table t2 (c int);
1066
 
insert into t2(c) values (1),(5),(6),(7),(8);
1067
 
select 1 from (select c from t1,t2 where b >= 1 and a <=> c group by 1 limit 1) as d1;
1068
 
drop table t1, t2;
1069