~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysql-test/t/range.test

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

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 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)
 
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 tinyint(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) 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 '',
 
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 ) 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 ) 
 
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 unsigned 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 unsigned 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 unsigned int to signed constant
 
439
#
 
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;
 
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 TINYINT(11) UNSIGNED 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 TINYINT(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