281
CREATE TEMPORARY TABLE t1 (
282
gid int NOT NULL auto_increment,
283
cid int NOT NULL default '0',
281
gid int(10) NOT NULL auto_increment,
282
cid int(5) NOT NULL default '0',
284
283
PRIMARY KEY (gid),
285
284
KEY component_id (cid)
287
286
INSERT INTO t1 VALUES (103853,108),(103867,108),(103962,108),(104505,108),(104619,108),(104620,108);
288
ALTER TABLE t1 add skr int default 42 not null;
287
ALTER TABLE t1 add skr int(10) not null;
290
CREATE TEMPORARY TABLE t2 (
291
gid int NOT NULL default '0',
292
uid int NOT NULL default '1',
293
sid int NOT NULL default '1',
290
gid int(10) NOT NULL default '0',
291
uid int(5) NOT NULL default '1',
292
sid int(3) NOT NULL default '1',
294
293
PRIMARY KEY (gid),
296
295
KEY status_id (sid)
298
297
INSERT INTO t2 VALUES (103853,250,5),(103867,27,5),(103962,27,5),(104505,117,5),(104619,75,5),(104620,15,5);
300
CREATE TEMPORARY TABLE t3 (
301
uid int NOT NULL auto_increment,
300
uid int(6) NOT NULL auto_increment,
302
301
PRIMARY KEY (uid)
304
303
INSERT INTO t3 VALUES (1),(15),(27),(75),(117),(250);
305
ALTER TABLE t3 add skr int default 42 not null;
304
ALTER TABLE t3 add skr int(10) not null;
307
306
select t1.gid, t2.sid, t3.uid from t2, t1, t3 where t2.gid = t1.gid and t2.uid = t3.uid order by t3.uid, t1.gid;
308
307
select t1.gid, t2.sid, t3.uid from t3, t2, t1 where t2.gid = t1.gid and t2.uid = t3.uid order by t3.uid, t1.gid;
310
309
# The following ORDER BY can be optimimized
311
select t1.gid, t2.sid, t3.uid from t3, t2, t1 where t2.gid = t1.gid and t2.uid = t3.uid order by t1.gid, t3.uid;
312
SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t1.gid,t3.skr;
310
EXPLAIN select t1.gid, t2.sid, t3.uid from t3, t2, t1 where t2.gid = t1.gid and t2.uid = t3.uid order by t1.gid, t3.uid;
311
EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t1.gid,t3.skr;
314
313
# The following ORDER BY can't be optimimized
315
SELECT t1.gid, t2.sid, t3.uid from t2, t1, t3 where t2.gid = t1.gid and t2.uid = t3.uid order by t3.uid, t1.gid;
316
SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t3.skr,t1.gid;
317
SELECT t1.gid, t3.uid from t1, t3 where t1.skr = t3.uid order by t1.gid,t3.skr;
314
EXPLAIN SELECT t1.gid, t2.sid, t3.uid from t2, t1, t3 where t2.gid = t1.gid and t2.uid = t3.uid order by t3.uid, t1.gid;
315
EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t3.skr,t1.gid;
316
EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.skr = t3.uid order by t1.gid,t3.skr;
318
317
drop table t1,t2,t3;
324
323
CREATE TABLE t1 (
325
324
`titre` char(80) NOT NULL default '',
326
`numeropost` int NOT NULL auto_increment,
325
`numeropost` mediumint(8) NOT NULL auto_increment,
326
`date` datetime NOT NULL default '0000-00-00 00:00:00',
328
327
`auteur` char(35) NOT NULL default '',
329
`icone` int NOT NULL default '0',
328
`icone` int(2) NOT NULL default '0',
330
329
`lastauteur` char(35) NOT NULL default '',
331
`nbrep` int NOT NULL default '0',
330
`nbrep` int(6) NOT NULL default '0',
332
331
`dest` char(35) NOT NULL default '',
333
`lu` int NOT NULL default '0',
334
`vue` int NOT NULL default '0',
335
`ludest` int NOT NULL default '0',
336
`ouvert` int NOT NULL default '1',
332
`lu` int(1) NOT NULL default '0',
333
`vue` mediumint(8) NOT NULL default '0',
334
`ludest` int(1) NOT NULL default '0',
335
`ouvert` int(1) NOT NULL default '1',
337
336
PRIMARY KEY (`numeropost`),
338
337
KEY `date` (`date`),
339
338
KEY `dest` (`dest`,`ludest`),
340
339
KEY `auteur` (`auteur`,`lu`),
341
340
KEY `auteur_2` (`auteur`,`date`),
342
341
KEY `dest_2` (`dest`,`date`)
345
344
CREATE TABLE t2 (
346
`numeropost` int NOT NULL default '0',
345
`numeropost` mediumint(8) NOT NULL default '0',
347
346
`pseudo` char(35) NOT NULL default '',
348
347
PRIMARY KEY (`numeropost`,`pseudo`),
349
348
KEY `pseudo` (`pseudo`)
394
392
CREATE TABLE t1 (
395
393
FieldKey varchar(36) NOT NULL default '',
396
LongVal bigint default NULL,
394
LongVal bigint(20) default NULL,
395
StringVal mediumtext,
398
396
KEY FieldKey (FieldKey),
399
397
KEY LongField (FieldKey,LongVal),
400
398
KEY StringField (FieldKey,StringVal(32))
402
400
INSERT INTO t1 VALUES ('0',3,'0'),('0',2,'1'),('0',1,'2'),('1',2,'1'),('1',1,'3'), ('1',0,'2'),('2',3,'0'),('2',2,'1'),('2',1,'2'),('2',3,'0'),('2',2,'1'),('2',1,'2'),('3',2,'1'),('3',1,'2'),('3','3','3');
401
EXPLAIN SELECT * FROM t1 WHERE FieldKey = '1' ORDER BY LongVal;
403
402
SELECT * FROM t1 WHERE FieldKey = '1' ORDER BY LongVal;
403
EXPLAIN SELECT * FROM t1 ignore index (FieldKey, LongField) WHERE FieldKey > '2' ORDER BY LongVal;
404
404
SELECT * FROM t1 WHERE FieldKey > '2' ORDER BY LongVal;
405
EXPLAIN SELECT * FROM t1 WHERE FieldKey > '2' ORDER BY FieldKey, LongVal;
405
406
SELECT * FROM t1 WHERE FieldKey > '2' ORDER BY FieldKey, LongVal;
474
475
# Let us also test various ambiguos and potentially ambiguos cases
475
476
# related to aliases
477
--error ER_NON_UNIQ_ERROR
478
479
select col1 as col, col from t1 order by col;
479
--error ER_NON_UNIQ_ERROR
480
select t1.col as c1, t2.col as c2 from t1, t2 where t1.col1=t2.col2
482
--error ER_NON_UNIQ_ERROR
483
select t1.col as c1, t2.col as c2 from t1, t2 where t1.col1=t2.col2
485
--error ER_NON_UNIQ_ERROR
481
select t1.col as c1, t2.col as c2 from t1, t2 where t1.col1=t2.col2
484
select t1.col as c1, t2.col as c2 from t1, t2 where t1.col1=t2.col2
486
487
select col1 from t1, t2 where t1.col1=t2.col2 order by col;
487
--error ER_NON_UNIQ_ERROR
488
489
select t1.col as t1_col, t2.col2 from t1, t2 where t1.col1=t2.col2
594
595
CREATE TABLE bug25126 (
595
596
val int NOT NULL AUTO_INCREMENT PRIMARY KEY
597
--error ER_BAD_FIELD_ERROR
598
599
UPDATE bug25126 SET MissingCol = MissingCol;
599
--error ER_BAD_FIELD_ERROR
600
601
UPDATE bug25126 SET val = val ORDER BY MissingCol;
601
602
UPDATE bug25126 SET val = val ORDER BY val;
602
603
UPDATE bug25126 SET val = 1 ORDER BY val;
603
--error ER_BAD_FIELD_ERROR
604
605
UPDATE bug25126 SET val = 1 ORDER BY MissingCol;
605
--error ER_BAD_FIELD_ERROR
606
607
UPDATE bug25126 SET val = 1 ORDER BY val, MissingCol;
607
--error ER_BAD_FIELD_ERROR
608
609
UPDATE bug25126 SET val = MissingCol ORDER BY MissingCol;
609
--error ER_BAD_FIELD_ERROR
610
611
UPDATE bug25126 SET MissingCol = 1 ORDER BY val, MissingCol;
611
--error ER_BAD_FIELD_ERROR
612
613
UPDATE bug25126 SET MissingCol = 1 ORDER BY MissingCol;
613
--error ER_BAD_FIELD_ERROR
614
615
UPDATE bug25126 SET MissingCol = val ORDER BY MissingCol;
615
--error ER_BAD_FIELD_ERROR
616
617
UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol;
617
618
DROP TABLE bug25126;
716
# Bug#26672: Incorrect SEC_TO_TIME() casting in ORDER BY
718
CREATE TABLE t1 (a INT NOT NULL, b TIME);
719
INSERT INTO t1 (a) VALUES (100000), (0), (100), (1000000),(10000), (1000), (10);
720
UPDATE t1 SET b = SEC_TO_TIME(a);
723
SELECT a, b FROM t1 ORDER BY b DESC;
725
# must be ordered as the above
726
SELECT a, b FROM t1 ORDER BY SEC_TO_TIME(a) DESC;
715
731
# BUG#16590: Optimized does not do right "const" table pre-read
717
733
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), UNIQUE KEY b (b));
720
736
CREATE TABLE t2 (a INT, b INT, KEY a (a,b));
721
737
INSERT INTO t2 VALUES (1,1),(1,2),(2,1),(2,2);
723
SELECT 1 FROM t1,t2 WHERE t1.b=2 AND t1.a=t2.a ORDER BY t2.b;
739
EXPLAIN SELECT 1 FROM t1,t2 WHERE t1.b=2 AND t1.a=t2.a ORDER BY t2.b;
725
741
DROP TABLE t1,t2;
746
# Bug #28404: query with ORDER BY and ref access
750
id int auto_increment PRIMARY KEY, c2 int, c3 int, INDEX k2(c2), INDEX k3(c3));
752
INSERT INTO t1 (c2,c3) VALUES
753
(31,34),(35,38),(34,31),(32,35),(31,39),
754
(11,14),(15,18),(14,11),(12,15),(11,19);
756
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
757
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
758
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
759
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
760
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
761
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
762
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
763
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
764
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
765
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
766
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
767
INSERT INTO t1 (c2,c3) SELECT c2,c3 FROM t1;
768
UPDATE t1 SET c2=20 WHERE id%100 = 0;
769
SELECT COUNT(*) FROM t1;
771
CREATE TABLE t2 LIKE t1;
772
INSERT INTO t2 SELECT * FROM t1 ORDER BY id;
774
EXPLAIN SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20;
775
EXPLAIN SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 4000;
776
EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 10 AND 12 ORDER BY c3 LIMIT 20;
777
EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000;
779
SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20;
730
784
# Bug #30665: Inconsistent optimization of IGNORE INDEX FOR {ORDER BY|GROUP BY}
742
796
INSERT INTO t1 SELECT a +32, b +32 FROM t1;
743
797
INSERT INTO t1 SELECT a +64, b +64 FROM t1;
745
--error ER_KEY_DOES_NOT_EXITS
799
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (a, ab) GROUP BY a;
802
--let $q = `show status like 'Created_tmp_tables';`
803
eval set @tmp_tables_before =
804
CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
746
807
SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (a, ab) GROUP BY a;
748
SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (primary, ab) GROUP BY a;
809
# this query creates one temporary table in itself, which we are not
813
--let $q = `show status like 'Created_tmp_tables';`
814
eval set @tmp_tables_after =
815
CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
750
818
SELECT @tmp_tables_after = @tmp_tables_before ;
752
--error ER_KEY_DOES_NOT_EXITS
820
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (a, ab) ORDER BY a;
823
--let $q = `show status like 'Created_tmp_tables';`
824
eval set @tmp_tables_before =
825
CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
753
828
SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (a, ab) ORDER BY a;
754
SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (primary, ab) ORDER BY a;
831
--let $q = `show status like 'Created_tmp_tables';`
832
eval set @tmp_tables_after =
833
CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
756
836
SELECT @tmp_tables_after = @tmp_tables_before;