2
# DuplicateElimination strategy test
4
--source include/have_innodb.inc
6
drop table if exists t0, t1, t2, t3;
10
create table t0 (a int);
11
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
13
# First test simple cases: I20 order, no join buffering.
19
insert into t1 values (1,1),(1,1),(2,2);
26
insert into t2 select a, a/2 from t0;
30
explain select * from t2 where b in (select a from t1);
31
select * from t2 where b in (select a from t1);
33
#Bug 310344: This dies because pk* char(200) is too big. Changed pk* to char(100)
34
#due to UTF8 column sizes.
35
# Try an InnoDB table with very long rowid
40
pk1 char(100), pk2 char(100), pk3 char(100),
41
primary key(pk1, pk2, pk3)
43
insert into t3 select a,a, a,a,a from t0;
45
explain select * from t3 where b in (select a from t1);
46
select * from t3 where b in (select a from t1);
48
# Test overflow to MyISAM:
49
set @save_max_heap_table_size= @@max_heap_table_size;
50
set max_heap_table_size=16384;
51
set @save_join_buffer_size = @@join_buffer_size;
53
#Bug 310344: This dies because pk* char(200) is too big. Based on UTF8 colummns.
54
#Changed pk* to char(100)
60
pk1 char(100), pk2 char(100),
64
A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a
65
from t0 A, t0 B where B.a <5;
67
explain select * from t3 where b in (select a from t0);
68
select * from t3 where b in (select A.a+B.a from t0 A, t0 B where B.a<5);
70
set join_buffer_size= @save_join_buffer_size;
71
set max_heap_table_size= @save_max_heap_table_size;
73
# O2I join orders, with shortcutting:
74
explain select * from t1 where a in (select b from t2);
76
select * from t1 where a in (select b from t2);
78
drop table t1, t2, t3;
79
# (no need for anything in range/index_merge/DS-MRR)
84
set @save_join_buffer_size = @@join_buffer_size;
85
set join_buffer_size=8000;
86
#Bug 310447: This query dies because binary datatype is not supported with join buffering and create table command.
87
#Change binary(200) to varbinary(20)
88
create table t1 (a int, filler1 varbinary(20), filler2 varbinary(20));
89
insert into t1 select a, 'filler123456', 'filler123456' from t0;
90
insert into t1 select a+10, 'filler123456', 'filler123456' from t0;
92
create table t2 as select * from t1;
93
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
95
insert into t1 values (2, 'duplicate ok', 'duplicate ok');
96
insert into t1 values (18, 'duplicate ok', 'duplicate ok');
98
insert into t2 values (3, 'duplicate ok', 'duplicate ok');
99
insert into t2 values (19, 'duplicate ok', 'duplicate ok');
101
#This dies because: changed ot to t0
103
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
104
from t1 t0 where a in (select a from t2 it);
106
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
107
from t1 t0 where a in (select a from t2 it);
110
a, mid(filler1, 1,10), length(filler1)=length(filler2)
111
from t2 t0 where a in (select a from t1 it);
113
a, mid(filler1, 1,10), length(filler1)=length(filler2)
114
from t2 t0 where a in (select a from t1 it);
116
# Now let the buffer overfill:
117
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
118
insert into t1 select a+20, 'filler123456', 'filler123456' from t0;
121
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
122
from t1 t0 where a in (select a from t2 it);
124
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
125
from t1 t0 where a in (select a from t2 it);
128
a, mid(filler1, 1,10), length(filler1)=length(filler2)
129
from t2 t0 where a in (select a from t1 it);
131
a, mid(filler1, 1,10), length(filler1)=length(filler2)
132
from t2 t0 where a in (select a from t1 it);
136
# Check ref access to tables inside the OJ nest inside the SJ nest
137
create table t1 (a int, b int, key(a));
138
create table t2 (a int, b int, key(a));
139
create table t3 (a int, b int, key(a));
141
insert into t1 select a,a from t0;
142
insert into t2 select a,a from t0;
143
insert into t3 select a,a from t0;
145
--echo t2 and t3 must be use 'ref', not 'ALL':
148
(select t2.a+t3.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a);
150
drop table t0, t1,t2,t3;
153
# Bug #27348: Assertion abort for a query with two subqueries to be flattened
154
# Changed int(11) to int.
156
ID int NOT NULL auto_increment,
157
Name char(35) NOT NULL default '',
158
Country char(3) NOT NULL default '',
159
Population int NOT NULL default '0',
165
Code char(3) NOT NULL default '',
166
Name char(52) NOT NULL default '',
167
SurfaceArea float(10,2) NOT NULL default '0.00',
168
Population int NOT NULL default '0',
169
Capital int default NULL,
175
Country char(3) NOT NULL default '',
176
Language char(30) NOT NULL default '',
177
Percentage float(3,1) NOT NULL default '0.0',
178
PRIMARY KEY (Country, Language),
183
INSERT INTO t1 VALUES
184
(1,'Kabul','AFG',1780000),(2,'Qandahar','AFG',237500),
185
(3,'Herat','AFG',186800),(4,'Mazar-e-Sharif','AFG',127800),
186
(5,'Amsterdam','NLD',731200),(6,'Rotterdam','NLD',593321),
187
(7,'Haag','NLD',440900),(8,'Utrecht','NLD',234323),
188
(9,'Eindhoven','NLD',201843),(10,'Tilburg','NLD',193238),
189
(11,'Groningen','NLD',172701),(12,'Breda','NLD',160398),
190
(13,'Apeldoorn','NLD',153491),(14,'Nijmegen','NLD',152463),
191
(15,'Enschede','NLD',149544),(16,'Haarlem','NLD',148772),
192
(17,'Almere','NLD',142465),(18,'Arnhem','NLD',138020),
193
(19,'Zaanstad','NLD',135621),(20,'´s-Hertogenbosch','NLD',129170),
194
(21,'Amersfoort','NLD',126270),(22,'Maastricht','NLD',122087),
195
(23,'Dordrecht','NLD',119811),(24,'Leiden','NLD',117196),
196
(25,'Haarlemmermeer','NLD',110722),(26,'Zoetermeer','NLD',110214),
197
(27,'Emmen','NLD',105853),(28,'Zwolle','NLD',105819),
198
(29,'Ede','NLD',101574),(30,'Delft','NLD',95268);
200
INSERT INTO t2 VALUES
201
('AFG','Afghanistan',652090.00,22720000,1),
202
('NLD','Netherlands',41526.00,15864000,5),
203
('ANT','Netherlands Antilles',800.00,217000,33),
204
('ALB','Albania',28748.00,3401200,34),
205
('DZA','Algeria',2381741.00,31471000,35),
206
('ASM','American Samoa',199.00,68000,54),
207
('AND','Andorra',468.00,78000,55),
208
('AGO','Angola',1246700.00,12878000,56),
209
('AIA','Anguilla',96.00,8000,62),
210
('ATG','Antigua and Barbuda',442.00,68000,63),
211
('ARE','United Arab Emirates',83600.00,2441000,65),
212
('ARG','Argentina',2780400.00,37032000,69),
213
('ARM','Armenia',29800.00,3520000,126),
214
('ABW','Aruba',193.00,103000,129),
215
('AUS','Australia',7741220.00,18886000,135),
216
('AZE','Azerbaijan',86600.00,7734000,144);
218
INSERT INTO t3 VALUES
219
('AFG','Pashto',52.4),('NLD','Dutch',95.6),
220
('ANT','Papiamento',86.2),('ALB','Albaniana',97.9),
221
('DZA','Arabic',86.0),('ASM','Samoan',90.6),
222
('AND','Spanish',44.6),('AGO','Ovimbundu',37.2),
223
('AIA','English',0.0),('ATG','Creole English',95.7),
224
('ARE','Arabic',42.0),('ARG','Spanish',96.8),
225
('ARM','Armenian',93.4),('ABW','Papiamento',76.7),
226
('AUS','English',81.2),('AZE','Azerbaijani',89.0),
227
('BHS','Creole English',89.7),('BHR','Arabic',67.7),
228
('BGD','Bengali',97.7),('BRB','Bajan',95.1),
229
('BEL','Dutch',59.2),('BLZ','English',50.8);
234
WHERE t2.Code IN (SELECT Country FROM t1 WHERE Population > 5000000)
236
t2.Code IN (SELECT Country FROM t3
237
WHERE Language='English' AND Percentage > 10 AND
238
t2.Population > 100000);
243
# changed syntax of int(11) to int
245
Code char(3) NOT NULL DEFAULT '',
246
Name char(52) NOT NULL DEFAULT '',
247
Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL DEFAULT 'Asia',
248
Region char(26) NOT NULL DEFAULT '',
249
SurfaceArea float(10,2) NOT NULL DEFAULT '0.00',
250
IndepYear int DEFAULT NULL,
251
Population int NOT NULL DEFAULT '0',
252
LifeExpectancy float(3,1) DEFAULT NULL,
253
GNP float(10,2) DEFAULT NULL,
254
GNPOld float(10,2) DEFAULT NULL,
255
LocalName char(45) NOT NULL DEFAULT '',
256
GovernmentForm char(45) NOT NULL DEFAULT '',
257
HeadOfState char(60) DEFAULT NULL,
258
Capital int DEFAULT NULL,
259
Code2 char(2) NOT NULL DEFAULT '',
265
Name char(35) NOT NULL DEFAULT '',
266
CountryCode char(3) NOT NULL DEFAULT '',
267
Population int NOT NULL DEFAULT '0',
269
KEY CountryCode (CountryCode)
272
# This died because the test data contained over 100 records with
273
# characters such as umlauts, french accent codes.
275
--echo Fill the table with test data
277
insert into t2 (ID, Name, CountryCode, Population) values
278
(1,'Kabul','AFG',1780000), (2,'Qandahar','AFG',237500), (3,'Herat','AFG',186800),
279
(4,'Mazar-e-Sharif','AFG',127800), (33,'Willemstad','ANT',2345), (34,'Tirana','ALB',270000),
280
(55,'Andorra la Vella','AND',21189), (61,'South Hill','AIA',961), (62,'The Valley','AIA',595),
281
(63,'Saint Johns','ATG',24000), (64,'Dubai','ARE',669181), (65,'Abu Dhabi','ARE',398695),
282
(66,'Sharja','ARE',320095), (67,'al-Ayn','ARE',225970), (68,'Ajman','ARE',114395),
283
(126,'Yerevan','ARM',1248700), (127,'Gjumri','ARM',211700), (128,'Vanadzor','ARM',172700),
284
(129,'Oranjestad','ABW',29034), (144,'Baku','AZE',1787800), (145,'Gnc','AZE',299300),
285
(146,'Sumqayit','AZE',283000), (147,'evir','AZE',93900), (148,'Nassau','BHS',172000),
286
(149,'al-Manama','BHR',148000), (150,'Dhaka','BGD',3612850), (151,'Chittagong','BGD',1392860),
287
(152,'Khulna','BGD',663340), (153,'Rajshahi','BGD',294056), (154,'Narayanganj','BGD',202134),
288
(155,'Rangpur','BGD',191398), (156,'Mymensingh','BGD',188713), (157,'Barisal','BGD',170232),
289
(158,'Tungi','BGD',168702), (159,'Jessore','BGD',139710), (160,'Comilla','BGD',135313),
290
(161,'Nawabganj','BGD',130577), (162,'Dinajpur','BGD',127815), (163,'Bogra','BGD',120170),
291
(164,'Sylhet','BGD',117396), (165,'Brahmanbaria','BGD',109032), (166,'Tangail','BGD',106004),
292
(167,'Jamalpur','BGD',103556), (168,'Pabna','BGD',103277), (169,'Naogaon','BGD',101266),
293
(170,'Sirajganj','BGD',99669), (171,'Narsinghdi','BGD',98342), (172,'Saidpur','BGD',96777),
294
(173,'Gazipur','BGD',96717), (174,'Bridgetown','BRB',6070), (175,'Antwerpen','BEL',446525),
295
(176,'Gent','BEL',224180), (177,'Charleroi','BEL',200827), (178,'Lige','BEL',185639),
296
(179,'Bruxelles','BEL',133859), (180,'Brugge','BEL',116246), (181,'Schaerbeek','BEL',105692),
297
(182,'Namur','BEL',105419), (183,'Mons','BEL',90935), (184,'Belize City','BLZ',55810),
298
(185,'Belmopan','BLZ',7105), (190,'Saint George','BMU',1800), (191,'Hamilton','BMU',1200),
299
(192,'Thimphu','BTN',22000), (201,'Sarajevo','BIH',360000), (202,'Banja Luka','BIH',143079),
300
(203,'Zenica','BIH',96027), (538,'Bandar Seri Begawan','BRN',21484), (539,'Sofija','BGR',1122302),
301
(540,'Plovdiv','BGR',342584), (541,'Varna','BGR',299801), (542,'Burgas','BGR',195255),
302
(543,'Ruse','BGR',166467), (544,'Stara Zagora','BGR',147939),
303
(545,'Pleven','BGR',121952),
304
(546,'Sliven','BGR',105530), (547,'Dobric','BGR',100399), (548,'umen','BGR',94686),
305
(553,'George Town','CYM',19600), (584,'San Jose','CRI',339131),
306
(1523,'Wien','AUT',1608144),
307
(1524,'Graz','AUT',240967), (1525,'Linz','AUT',188022), (1526,'Salzburg','AUT',144247),
309
(1814,'Winnipeg','CAN',618477), (1815,'Edmonton','CAN',616306),
310
(1816,'Mississauga','CAN',608072),
311
(1817,'Scarborough','CAN',594501), (1818,'Vancouver','CAN',514008),
312
(1819,'Etobicoke','CAN',348845),
313
(1820,'London','CAN',339917), (1821,'Hamilton','CAN',335614),
314
(1822,'Ottawa','CAN',335277),
315
(1823,'Laval','CAN',330393), (1824,'Surrey','CAN',304477),
316
(1825,'Brampton','CAN',296711),
317
(1826,'Windsor','CAN',207588), (1827,'Saskatoon','CAN',193647),
318
(1828,'Kitchener','CAN',189959),
319
(1829,'Markham','CAN',189098), (1830,'Regina','CAN',180400),
320
(1831,'Burnaby','CAN',179209),
321
(1832,'Quebec','CAN',167264), (1833,'York','CAN',154980), (1834,'Richmond','CAN',148867),
322
(1835,'Vaughan','CAN',147889), (1836,'Burlington','CAN',145150),
323
(1837,'Oshawa','CAN',140173),
324
(1838,'Oakville','CAN',139192), (1839,'Saint Catharines','CAN',136216),
325
(1840,'Longueuil','CAN',127977),
326
(1841,'Richmond Hill','CAN',116428), (1842,'Thunder Bay','CAN',115913),
327
(1843,'Nepean','CAN',115100),
328
(1844,'Cape Breton','CAN',114733), (1845,'East York','CAN',114034),
329
(1846,'Halifax','CAN',113910),
330
(1847,'Cambridge','CAN',109186), (1848,'Gloucester','CAN',107314),
331
(1849,'Abbotsford','CAN',105403),
332
(1850,'Guelph','CAN',103593), (1851,'Saint John4s','CAN',101936),
333
(1852,'Coquitlam','CAN',101820),
334
(3534,'Soligorsk','BLR',101000), (3535,'Molodetno','BLR',97000);
336
insert into t1 (Code, Name, Continent) values
337
('AFG','Afghanistan','Asia'), ('ANT','Netherlands Antilles','North America'),
338
('ALB','Albania','Europe'), ('AND','Andorra','Europe'),
339
('AIA','Anguilla','North America'), ('ATG','Antigua and Barbuda','North America'),
340
('ARE','United Arab Emirates','Asia'), ('ARM','Armenia','Asia'),
341
('ABW','Aruba','North America'), ('AZE','Azerbaijan','Asia'),
342
('BHS','Bahamas','North America'), ('BHR','Bahrain','Asia'),
343
('BGD','Bangladesh','Asia'), ('BRB','Barbados','North America'),
344
('BEL','Belgium','Europe'), ('BLZ','Belize','North America'),
345
('BMU','Bermuda','North America'), ('BTN','Bhutan','Asia'),
346
('BIH','Bosnia and Herzegovina','Europe'), ('BRN','Brunei','Asia'),
347
('BGR','Bulgaria','Europe'), ('CYM','Cayman Islands','North America'),
348
('CRI','Costa Rica','North America'), ('AUT','Austria','Europe'),
349
('CAN','Canada','North America'), ('CHN','China','Asia'),
350
('CUB','Cuba','North America'), ('CYP','Cyprus','Asia'),
351
('CHE','Switzerland','Europe'), ('CZE','Czech Republic','Europe'),
352
('BLR','Belarus','Europe');
353
#update t2 set population=6000000 where Name in ('Wien', 'Vancouver', 'Praha');
356
--echo This must not use LooseScan:
357
EXPLAIN SELECT Name FROM t1
359
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
363
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
368
--echo # MySQL BUG #42742: crash in setup_sj_materialization, Copy_field::set
370
create table t3 ( c1 date) engine=innodb;
371
insert into t3 values ('2009-10-22'),('2142-10-22');
372
create table t2 (c1 tinytext,c2 text,c6 timestamp) engine=innodb;
374
explain select 1 from t2 where c2 in (select 1 from t3, t2) and c1 in (select convert(c6,char(1)) from t2);
378
# Bug#33062: subquery in stored routine cause crash
381
# This dies: stored procedures are not supported by drizzle
383
#CREATE TABLE t1(a INT);
384
#CREATE TABLE t2(c INT);
388
#CREATE PROCEDURE p1(v1 int)
390
# SELECT 1 FROM t1 WHERE a = v1 AND a IN (SELECT c FROM t2);
394
#CREATE PROCEDURE p2(v1 int)
396
# SELECT 1 FROM t1 WHERE a IN (SELECT c FROM t2);
400
#CREATE PROCEDURE p3(v1 int)
404
# t1 t01,t1 t02,t1 t03,t1 t04,t1 t05,t1 t06,t1 t07,t1 t08,
405
# t1 t09,t1 t10,t1 t11,t1 t12,t1 t13,t1 t14,t1 t15,t1 t16,
406
# t1 t17,t1 t18,t1 t19,t1 t20,t1 t21,t1 t22,t1 t23,t1 t24,
407
# t1 t25,t1 t26,t1 t27,t1 t28,t1 t29,t1 t30,t1 t31,t1 t32,
408
# t1 t33,t1 t34,t1 t35,t1 t36,t1 t37,t1 t38,t1 t39,t1 t40,
409
# t1 t41,t1 t42,t1 t43,t1 t44,t1 t45,t1 t46,t1 t47,t1 t48,
410
# t1 t49,t1 t50,t1 t51,t1 t52,t1 t53,t1 t54,t1 t55,t1 t56,
411
# t1 t57,t1 t58,t1 t59,t1 t60
412
# WHERE t01.a IN (SELECT c FROM t2);
416
#CREATE PROCEDURE p4(v1 int)
420
# t1 t01,t1 t02,t1 t03,t1 t04,t1 t05,t1 t06,t1 t07,t1 t08,
421
# t1 t09,t1 t10,t1 t11,t1 t12,t1 t13,t1 t14,t1 t15,t1 t16,
422
# t1 t17,t1 t18,t1 t19,t1 t20,t1 t21,t1 t22,t1 t23,t1 t24,
423
# t1 t25,t1 t26,t1 t27,t1 t28,t1 t29,t1 t30,t1 t31,t1 t32,
424
# t1 t33,t1 t34,t1 t35,t1 t36,t1 t37,t1 t38,t1 t39,t1 t40,
425
# t1 t41,t1 t42,t1 t43,t1 t44,t1 t45,t1 t46,t1 t47,t1 t48,
426
# t1 t49,t1 t50,t1 t51,t1 t52,t1 t53,t1 t54,t1 t55,t1 t56,
427
# t1 t57,t1 t58,t1 t59,t1 t60
428
# WHERE t01.a = v1 AND t01.a IN (SELECT c FROM t2);