~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/range.test

  • Committer: Brian Aker
  • Date: 2008-07-20 05:41:52 UTC
  • Revision ID: brian@tangent.org-20080720054152-5laf6plsb0o7h6ss
Documentation cleanup

Show diffs side-by-side

added added

removed removed

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