1# Test for descending indexes support 2 3# Test that desc index can be created only on engine that supports it 4--error 1178 5create table t1(f1 int, key f1_idx(f1 desc)) engine=heap; 6 7eval create table 8 t1(a int, b int, key a_desc_b_asc (a desc, b), key a_asc_b_desc (a, b desc)) 9 engine= $engine; 10flush tables; 11show create table t1; 12 13insert into t1 values(1,6),(1,5),(2,5),(2,4),(3,4),(3,3), 14 (4,3),(4,2),(5,2),(5,1),(6,1),(NULL,NULL); 15--disable_result_log 16analyze table t1; 17--enable_result_log 18 19--echo # Should use index 20--replace_column 10 # 11 # 21explain select * from t1 order by a desc; 22select * from t1 order by a desc; 23 24--replace_column 10 # 11 # 25explain select * from t1 order by a desc, b asc; 26select * from t1 order by a desc, b asc; 27 28--replace_column 10 # 11 # 29explain select * from t1 order by a asc; 30select * from t1 order by a asc, b desc; 31 32--replace_column 10 # 11 # 33explain select * from t1 order by a asc, b desc; 34select * from t1 order by a asc, b desc; 35 36--replace_column 10 # 11 # 37explain select * from t1 group by a,b order by a, b desc; 38select * from t1 group by a,b order by a, b desc; 39 40--echo # For GROUP BY optimizer can pick any order for column, 41--replace_column 10 # 11 # 42explain select * from t1 group by a, b; 43--replace_column 10 # 11 # 44explain select * from t1 group by a, b order by a; 45--replace_column 10 # 11 # 46explain select * from t1 group by a , b order by a desc; 47--replace_column 10 # 11 # 48explain select * from t1 group by a, b order by a desc, b; 49--replace_column 10 # 11 # 50explain select * from t1 group by a, b order by a asc, b desc; 51 52alter table t1 drop index a_asc_b_desc; 53--replace_column 10 # 11 # 54explain select * from t1 group by a, b order by a; 55 56--replace_column 10 # 11 # 57explain select distinct a from t1; 58select distinct a from t1; 59 60--replace_column 10 # 11 # 61explain select a from t1 group by a; 62select a from t1 group by a; 63 64--echo # Should use index backward 65--replace_column 10 # 11 # 66explain select * from t1 order by a asc; 67select * from t1 order by a asc, b desc; 68 69--replace_column 10 # 11 # 70explain select * from t1 order by a asc, b desc; 71select * from t1 order by a asc, b desc; 72 73--echo # Should use filesort 74--replace_column 10 # 11 # 75explain select * from t1 order by a desc, b desc; 76select * from t1 order by a desc, b desc; 77 78--replace_column 10 # 11 # 79explain select * from t1 order by a asc, b asc; 80select * from t1 order by a asc, b asc; 81 82--error ER_DUP_FIELDNAME 83create index i1 on t1 (a desc, a asc); 84create index i1 on t1 (a desc, b desc); 85show create table t1; 86 87eval create table t2 (a int auto_increment, primary key (a desc)) engine= $engine; 88show create table t2; 89insert ignore into t2 select a from t1; 90select * from t2; 91 92eval create table t3 (a varchar(10), key i1(a(5) desc)) engine= $engine; 93flush tables; 94show create table t3; 95create index i2 on t3(a(6)); 96flush tables; 97show create table t3; 98 99--error 1221 100alter table t3 add fulltext index fts_idx(a desc); 101--error 1221 102alter table t3 add fulltext index fts_idx(a asc); 103--error 1221 104alter table t3 add column b point not null, add spatial index gis_idx(b desc); 105--error 1221 106alter table t3 add column b point not null, add spatial index gis_idx(b asc); 107 108--error 1221 109create table t4 (a text, fulltext key fts(a desc)); 110--error 1221 111create table t4 (a point not null, spatial key gis(a desc)); 112--error 1221 113create table t4 (a text, fulltext key fts(a asc)); 114--error 1221 115create table t4 (a point not null, spatial key gis(a asc)); 116 117--error 1221 118create table t5 (f1 int, key h(f1 asc) using hash) engine= heap; 119--error 1221 120create table t5 (f1 int, key h(f1 desc) using hash) engine= heap; 121create table t5 (f1 int, key h(f1) using hash) engine= heap; 122 123drop table t1,t2,t3,t5; 124 125CREATE TABLE t0 (i INTEGER); 126INSERT INTO t0 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); 127eval CREATE TABLE t1 (i1 INTEGER NOT NULL, i2 INTEGER NOT NULL, 128 i3 INTEGER NOT NULL, KEY k1 (i1 desc, i2) 129) ENGINE= $engine; 130 131INSERT INTO t1 132 SELECT a.i*10 + b.i + 1, a.i*100 + b.i*10 + c.i, a.i 133 FROM t0 AS a, t0 AS b, t0 AS c; 134ANALYZE TABLE t1; 135 136let query1= 137 SELECT * FROM t1 138 WHERE i1 BETWEEN 50 AND 52 AND MOD(i2,2)=1 ORDER BY i1 DESC; 139 140eval EXPLAIN $query1; 141eval $query1; 142 143let query1= 144SELECT * FROM t1 145 WHERE (i1 BETWEEN 50 AND 52 OR i1 BETWEEN 70 AND 72) AND MOD(i2,2)=1 146 ORDER BY i1 DESC; 147 148eval EXPLAIN $query1; 149eval $query1; 150 151let query1= 152SELECT * FROM t1 153 WHERE ( (i1=50 AND i2=495) OR i1 BETWEEN 70 AND 72) AND MOD(i2,2)=1 154 ORDER BY i1 DESC; 155 156eval EXPLAIN $query1; 157eval $query1; 158 159EXPLAIN SELECT * FROM t1 WHERE i1 >= 50 AND i1 < 52 AND MOD(i2,2)=1 ORDER BY i1 DESC; 160SELECT * FROM t1 WHERE i1 >= 50 AND i1 < 52 AND MOD(i2,2)=1 ORDER BY i1 DESC; 161EXPLAIN SELECT * FROM t1 WHERE i1 > 50 AND i1 <= 52 AND MOD(i2,2)=1 ORDER BY i1 DESC; 162SELECT * FROM t1 WHERE i1 > 50 AND i1 <= 52 AND MOD(i2,2)=1 ORDER BY i1 DESC; 163 164ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1, i2); 165ANALYZE TABLE t1; 166let query1= 167 SELECT * FROM t1 168 WHERE i1 BETWEEN 50 AND 52 AND MOD(i2,2)=1 ORDER BY i1 DESC; 169 170eval EXPLAIN $query1; 171eval $query1; 172 173ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1, i2 DESC); 174ANALYZE TABLE t1; 175let query1= 176 SELECT * FROM t1 177 WHERE i1 BETWEEN 50 AND 52 AND i2 BETWEEN 495 AND 515 ORDER BY i1, i2 DESC; 178eval EXPLAIN $query1; 179eval $query1; 180 181ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1, i2 DESC, i3); 182ANALYZE TABLE t1; 183let query1= 184 SELECT * FROM t1 185 WHERE i1 BETWEEN 48 AND 62 AND i2 BETWEEN 395 AND 615 AND 186 i3 BETWEEN 4 AND 5 AND MOD(i1,2)=0 AND MOD(i2,2)=1 187 ORDER BY i1, i2 DESC; 188 189eval EXPLAIN $query1; 190eval $query1; 191 192ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1, i2 DESC, i3 DESC); 193ANALYZE TABLE t1; 194eval EXPLAIN $query1; 195eval $query1; 196 197ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1, i2 DESC, i3); 198ANALYZE TABLE t1; 199let $query1= 200 SELECT * FROM t1 WHERE 201 ((i1 BETWEEN 48 AND 62 AND i2 BETWEEN 395 AND 615 AND 202 i3 BETWEEN 4 AND 5) or i1 between 70 and 72) AND 203 MOD(i1,2)=0 AND MOD(i2,2)=1 204 ORDER BY i1 desc, i2 ; 205eval EXPLAIN $query1; 206eval $query1; 207 208ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1 DESC, i2, i3); 209ANALYZE TABLE t1; 210eval EXPLAIN $query1; 211eval $query1; 212 213ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1 DESC, i2, i3); 214ANALYZE TABLE t1; 215let query1= 216 SELECT * FROM t1 217 WHERE ( (i1=50 AND i2=495 and i3=4) OR i1 BETWEEN 70 AND 72) AND 218 MOD(i2,2)=1 219 ORDER BY i1 DESC; 220eval EXPLAIN $query1; 221eval $query1; 222 223#Test case for checking the "else" parts in store_min_key and store_max_key 224ALTER TABLE t1 ADD COLUMN (i4 INTEGER NOT NULL); 225UPDATE t1 SET i4=i3; 226 227ALTER TABLE t1 DROP INDEX k1, ADD INDEX k1(i1 DESC, i2, i3 DESC, i4); 228ANALYZE TABLE t1; 229let $query1= 230 SELECT * FROM t1 WHERE 231 ((i1 BETWEEN 48 AND 62 AND i2 BETWEEN 395 AND 615 AND 232 i3 BETWEEN 4 AND 5 AND i4 BETWEEN 5 AND 6) OR 233 i1 between 70 and 72) AND MOD(i1,2)=0 AND MOD(i2,2)=1 234 ORDER BY i1 desc, i2 ; 235eval EXPLAIN $query1; 236eval $query1; 237 238DROP TABLE t0, t1; 239 240CREATE TABLE t1 (a INT, b INT, KEY i1 (a DESC, b DESC)); 241INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3); 242INSERT INTO t1 SELECT a + 1, b FROM t1; 243INSERT INTO t1 SELECT a + 2, b FROM t1; 244INSERT INTO t1 SELECT a + 4, b FROM t1; 245 246--disable_query_log 247ANALYZE TABLE t1; 248--enable_query_log 249 250EXPLAIN 251SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; 252SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; 253 254DROP TABLE t1; 255 256create table t1 (a int not null, b int, c varchar(10), 257 key (a desc, b desc, c desc)); 258insert into t1 values (1, NULL, NULL), (1, NULL, 'b'), (1, 1, NULL), (1, 1, 'b'), (1, 1, 'b'), (2, 1, 'a'), (2, 1, 'b'), (2, 2, 'a'), (2, 2, 'b'), (2, 3, 'c'),(1,3,'b'); 259insert into t1 values (0, NULL, NULL), (0, NULL, 'b'), (0, 0, NULL), (0, 0, 'b'), (0, 0, 'b'), (0, 0, 'a'), (0, 0, 'b'), (0, 0, 'a'), (0, 0, 'b'), (0, 0, 'c'),(0,0,'b'); 260 261ANALYZE TABLE t1; 262explain select * from t1 where a >= 1 and a < 3 and b >0 order by a desc,b desc; 263flush status; 264select * from t1 where a >= 1 and a < 3 and b >0 order by a desc,b desc; 265show status like 'handler_read%'; 266drop table t1; 267 268create table t1 (a1 int, a2 char(3), key k1(a1 desc)); 269insert into t1 values(10,'aaa'), (10,null), (10,'bbb'), (20,'zzz'); 270ANALYZE TABLE t1; 271--echo # Shouldn't optimize tables away on DESC index 272--replace_column 10 # 11 # 273explain select min(a1) from t1; 274select min(a1) from t1; 275drop table t1; 276 277CREATE TABLE t1 278(a VARCHAR(10), 279 b VARCHAR(10), 280 KEY ab_asc (a ASC, b ASC), 281 KEY a_asc_b_desc (a ASC, b DESC), 282 key a_desc_b_asc (a DESC, b ASC)) 283ENGINE = InnoDB 284PARTITION BY KEY (a, b) PARTITIONS 3; 285INSERT INTO t1 VALUES ("0", "0"), ("1", "1"), ("2", "2"), ("3", "3"), 286("4", "4"), ("55", "55"), ("54", "54"), ("1", "2"), ("1", "4"), ("1", "3"), 287("55", "54"), ("0", "1"), (NULL,NULL),(0, NULL), (1,NULL); 288 289SELECT * FROM t1 ORDER BY a, b DESC; 290DROP TABLE t1; 291 292--echo # 293--echo # Bug#23036049: WL1074:ASSERTION `CTX->CUR <= CTX->LAST' FAILED. 294--echo # 295 296eval CREATE TABLE c ( 297 pk INTEGER AUTO_INCREMENT, 298 col_int INTEGER NOT NULL, 299 col_varchar VARCHAR(5) NOT NULL, 300 unique KEY (pk,col_int DESC) 301) ENGINE= $engine; 302 303INSERT IGNORE INTO c (col_int,col_varchar) VALUES 304(7, 'm'),(0, 'alukq'),(8, 'lu'),(6, 'uk'), (5, 'kquk'),(9, 'qukko'),(0, 'u'), 305(181, 'kkoei'),(3, 'ko'),(86, 'oei'); 306 307eval CREATE TABLE cc ( 308 pk INTEGER AUTO_INCREMENT, 309 col_int INTEGER NOT NULL, 310 col_varchar VARCHAR(5) NOT NULL, 311 unique KEY (pk,col_int DESC) 312) ENGINE= $engine; 313 314INSERT IGNORE INTO cc (col_int,col_varchar) VALUES 315(9, 'gktbk'),(0, 'k'),(4, 'tbkj'),(8, 'bk'),(9, 'kjrk'),(2,'j'),(7, 'r'), 316(4, 'kmqmk'),(0, 'm'),(4, 'qmkn'); 317 318SELECT DISTINCT t2.col_int 319FROM ( c AS t1 INNER JOIN cc AS t2 ON (t2.col_varchar = t1.col_varchar)) 320WHERE ( t1.col_int IN ( 167, 9)) 321AND t1.pk = 122; 322 323DROP TABLE c,cc; 324 325--echo # 326 327eval CREATE TABLE b ( 328 pk INTEGER AUTO_INCREMENT, 329 col_int_key INTEGER /*! NULL */, 330 col_varchar_key VARCHAR(10) /*! NULL */, 331 PRIMARY KEY (pk DESC), 332 KEY (col_varchar_key DESC, col_int_key DESC) 333) ENGINE= $engine; 334 335INSERT /*! IGNORE */ INTO b (col_int_key,col_varchar_key) VALUES 336(3, 'ceksatef'),(3, 'eks'),(3, 'ksatefqs'),(6, 'sate'),(3, 'a'); 337 338eval CREATE TABLE cc ( 339 pk INTEGER , 340 col_int_key INTEGER /*! NULL */, 341 col_varchar_key VARCHAR(10) /*! NULL */ 342) ENGINE= $engine; 343 344INSERT /*! IGNORE */ INTO cc (col_int_key, col_varchar_key) VALUES 345(NULL, 'koeiwsgpmf'),(8, 'oeiwsgpm'),(8, 'eiwsg'),(0,'iwsg'),(5, 'wsgpmfy'), 346(1, 'sgpmfyvvu'),(7, 'gpmfyvvu'),(7, 'pmfyvvu'),(147, 'mfyv'),(2, NULL); 347 348--echo # Shouldn't crash 349 350SELECT 351DISTINCT OUTR . col_varchar_key 352FROM b AS OUTR WHERE ( OUTR . col_int_key , OUTR . pk ) IN 353( 354SELECT DISTINCT 355INNR . pk AS x , 356INNR . pk AS y 357FROM cc AS INNR WHERE OUTR . col_varchar_key = 'v' 358) 359AND OUTR . pk >= 3 ; 360 361DROP TABLE b; 362 363eval CREATE TABLE b ( 364 pk INTEGER AUTO_INCREMENT, 365 col_int_key INTEGER /*! NULL */, 366 367 col_varchar_key VARCHAR(10) /*! NULL */, 368 369 PRIMARY KEY (pk DESC), 370 KEY (col_varchar_key, col_int_key) 371) ENGINE= $engine; 372 373INSERT /*! IGNORE */ INTO b (col_int_key,col_varchar_key) 374VALUES (3, 'ceksatef'),(3, 'eks'),(3, 'ksatefqs'),(6, 'sate'),(3, 'a'); 375 376--echo # Shouldn't crash 377 378SELECT 379DISTINCT OUTR . col_varchar_key 380FROM b AS OUTR WHERE ( OUTR . col_int_key , OUTR . pk ) IN 381( 382SELECT DISTINCT 383INNR . pk AS x , 384INNR . pk AS y 385FROM cc AS INNR WHERE OUTR . col_varchar_key = 'v' 386) 387AND OUTR . pk >= 3 ; 388 389 390DROP TABLE b,cc; 391 392--echo # 393if ($engine == "myisam") 394{ 395eval CREATE TABLE dd ( 396 col_varchar_key varchar(10) DEFAULT NULL, 397 KEY col_varchar_key (col_varchar_key DESC) 398) ENGINE=$engine; 399 400INSERT INTO dd VALUES 401('1'), 402('2'), 403('3'), 404('4'), 405('5'); 406 407ANALYZE TABLE dd; 408 409SET SESSION DEBUG="+d,force_lis_for_group_by"; 410 411EXPLAIN SELECT DISTINCT INNR1 . col_varchar_key AS y FROM dd AS INNR1 force index for group by (col_varchar_key) WHERE INNR1 . col_varchar_key < INNR1 . col_varchar_key; 412 413SELECT DISTINCT INNR1 . col_varchar_key AS y FROM dd AS INNR1 force index for group by (col_varchar_key) WHERE INNR1 . col_varchar_key < INNR1 . col_varchar_key; 414 415DROP TABLE dd; 416SET SESSION DEBUG=""; 417} 418 419 420--echo # 421--echo # Bug#23212656:JOIN QUERY WITH RANGE PREDICATES GIVES INCORRECT RESULTS 422--echo # 423eval CREATE TABLE ee ( 424 col_int int(11) DEFAULT NULL, 425 col_int_key int(11) DEFAULT NULL, 426 pk int(11) NOT NULL AUTO_INCREMENT, 427 PRIMARY KEY (pk DESC), 428 KEY 1col_int_key (col_int_key DESC) 429) ENGINE=$engine; 430 431INSERT INTO ee VALUES 432(NULL,NULL,1), (NULL,NULL,2), (NULL,286720000,3), (NULL,1,4), 433(2084831232,8,5), (NULL,0,6), (4,763953152,7), (5,NULL,8), (7,9,9); 434 435SELECT DISTINCT alias1 . col_int_key AS field1 , alias1 . col_int AS field2 436FROM ee AS alias1 JOIN ee AS alias2 ON alias1 . pk = alias2 . col_int_key 437WHERE ( alias1 . pk BETWEEN 8 AND ( 8 + 4 ) AND alias2 . pk <> 2 ); 438 439DROP TABLE ee; 440 441--echo # 442 443--echo # 444--echo # Bug#23217803:QUERY USING INDEX_MERGE_SORT_UNION GIVES INCORRECT 445--echo # RESULTS WITH DESC KEY 446--echo # 447eval CREATE TABLE t ( 448 pk INTEGER AUTO_INCREMENT, 449 col_int INTEGER , 450 col_int_key INTEGER , 451 452 col_varchar_key VARCHAR(10) , 453 col_varchar VARCHAR(10) , 454 455 PRIMARY KEY (pk DESC), 456 KEY (col_varchar_key DESC), 457 UNIQUE KEY (col_int_key DESC, pk) 458) ENGINE=$engine; 459 460INSERT INTO t (col_int_key, col_int, col_varchar_key) 461VALUES (1, 2, NULL),(NULL, 3, 'dks'), (7, 0, 'ksjijcsz'),(172, 84, 'sj'); 462 463SELECT col_int FROM t AS table1 WHERE table1 .pk > 166 OR table1 464.col_varchar_key = 'c' OR table1 .col_int_key > 166 LIMIT 1; 465 466DROP TABLE t; 467--echo # 468 469--echo # 470--echo # BUG#22973383:INNODB ASSERTION IN ROW_SEL_CONVERT_MYSQL_KEY_TO_INNOBASE 471--echo # 472 473eval CREATE TABLE c ( 474 col_varchar_10_utf8_key varchar(10) CHARACTER SET utf8 DEFAULT NULL, 475 unique key k5 (col_varchar_10_utf8_key(7) DESC) 476) ENGINE=$engine; 477 478eval CREATE TABLE e ( 479 col_varchar_10_utf8_key varchar(10) CHARACTER SET utf8 DEFAULT NULL, 480 col_varchar_255_utf8_key varchar(255) CHARACTER SET utf8 DEFAULT NULL, 481 col_varchar_10_latin1_key varchar(10) DEFAULT NULL, 482 unique key k5 (col_varchar_10_utf8_key(7) DESC, 483col_varchar_10_latin1_key(5) DESC, col_varchar_255_utf8_key(50) DESC) 484) ENGINE=$engine; 485 486EXPLAIN SELECT table2 . col_varchar_10_utf8_key AS field1 487FROM e AS table1 LEFT JOIN c AS table2 488 ON table1 . col_varchar_10_utf8_key = table2 . col_varchar_10_utf8_key 489WHERE table1 . col_varchar_255_utf8_key != 'LPGIV' 490AND table1 . col_varchar_10_latin1_key >= 'w' 491AND table1 . col_varchar_10_utf8_key < 'zzzz'; 492 493SELECT table2 . col_varchar_10_utf8_key AS field1 494FROM e AS table1 LEFT JOIN c AS table2 495 ON table1 . col_varchar_10_utf8_key = table2 . col_varchar_10_utf8_key 496WHERE table1 . col_varchar_255_utf8_key != 'LPGIV' 497AND table1 . col_varchar_10_latin1_key >= 'w' 498AND table1 . col_varchar_10_utf8_key < 'zzzz'; 499 500DROP TABLE c,e; 501 502CREATE TABLE t1 ( 503i int(11) NOT NULL, 504j int(11) DEFAULT NULL, 505k int(11) DEFAULT NULL, 506l int(11) DEFAULT NULL, 507PRIMARY KEY (i), 508KEY j (j,k DESC,l), 509KEY i (i,j,k,l) 510)ENGINE=InnoDB; 511 512INSERT INTO t1 VALUES 513(11,1,6,3),(4,1,2,3),(8,1,2,3),(10,1,2,3),(1,1,1,1),(2,1,1,1),(3,1,1,1), 514(5,3,2,3),(6,4,2,3),(7,6,2,3),(12,7,6,3),(13,7,6,8),(14,7,6,9),(16,8,7,9), 515(15,8,6,9); 516 517ANALYZE TABLE t1; 518 519EXPLAIN SELECT * FROM t1 WHERE i < 10 AND j >=1 AND k >=2 AND l <=5; 520SELECT * FROM t1 WHERE i < 10 AND j >=1 AND k >=2 AND l <=5; 521 522DROP TABLE t1; 523 524CREATE TABLE t1 ( 525pk INTEGER NOT NULL, 526col_int_key INTEGER , 527col_varchar_key BLOB NOT NULL, 528PRIMARY KEY (pk), 529KEY (col_int_key, col_varchar_key(25) DESC) 530); 531 532CREATE TABLE t2 ( 533pk INTEGER NOT NULL, 534col_int INTEGER , 535col_int_key INTEGER , 536col_varchar_key BLOB , 537PRIMARY KEY (pk), 538KEY (col_int_key, col_varchar_key(25) DESC) 539); 540 541let $query=SELECT t1.col_varchar_key 542FROM ( t2 INNER JOIN t1 543ON (t1.col_int_key = t2.col_int AND (1,5) IN 544( SELECT alias1.col_int_key, alias1. pk 545FROM ( t2 AS alias2 RIGHT JOIN t1 AS alias1 546 ON (alias1.pk = alias2.col_int_key ) 547) WHERE alias1.col_varchar_key >= 'y') ) ); 548 549eval EXPLAIN $query; 550eval $query; 551 552#Checking inversion of min_flag for desc key_part when 553#minimum range is not present 554let $query=SELECT t1.col_varchar_key 555FROM ( t2 INNER JOIN t1 556ON (t1.col_int_key = t2.col_int AND (1,5) IN 557( SELECT alias1.col_int_key, alias1. pk 558FROM ( t2 AS alias2 RIGHT JOIN t1 AS alias1 559 ON (alias1.pk = alias2.col_int_key ) 560) WHERE alias1.col_varchar_key <= 'y') ) ); 561 562eval EXPLAIN $query; 563eval $query; 564 565DROP TABLE t1,t2; 566 567--echo #End of test case for Bug#22973383 568 569--echo # 570--echo # Bug #23576305:WL1074:STRAIGHT_JOIN QUERY WITH RANGE 571--echo # CHECKED (MYISAM) GIVES WRONG RESULTS 572--echo # 573 574CREATE TABLE t1 ( 575 pk INTEGER NOT NULL , 576 col_varchar_key varchar(10) DEFAULT NULL, 577 UNIQUE KEY pk_2 (pk,col_varchar_key DESC) 578); 579 580INSERT INTO t1 VALUES (3,'ksatefqs'), 581(4,'sate'),(5,'a'); 582 583CREATE TABLE t2 ( 584 pk INTEGER NOT NULL, 585 col_int_key INTEGER DEFAULT NULL, 586 col_varchar_key varchar(10) DEFAULT NULL 587); 588INSERT INTO t2 VALUES 589(10,80,'ukqukkoe'), 590(11,2,'kqukkoe'), 591(12,5,'qukkoeiws'), 592(13,9,'ukko'), 593(14,3,'kkoeiwsgp'); 594ANALYZE TABLE t1, t2; 595 596let $query= SELECT t1.pk, t2.col_int_key, 597 t1.col_varchar_key, t2.col_varchar_key 598 FROM t2 JOIN t1 ON ( t1.pk >= t2.col_int_key 599 AND t1.col_varchar_key != t2.col_varchar_key ); 600 601--replace_column 10 # 11 # 602eval EXPLAIN $query; 603--sorted_result 604eval $query; 605 606let $query= SELECT STRAIGHT_JOIN t1.pk, t2.col_int_key, 607 t1.col_varchar_key, t2.col_varchar_key FROM 608 t2 JOIN t1 ON ( t1.pk >= t2.col_int_key AND 609 t1.col_varchar_key != t2.col_varchar_key ); 610 611--replace_column 10 # 11 # 612eval EXPLAIN $query; 613eval $query; 614 615DROP TABLE t1,t2; 616 617--echo #End of test for Bug#23576305 618 619--echo # 620--echo # Bug#23730559: ASSERTION `TAB->QUICK() == SAVE_QUICK || 621--echo # TAB->QUICK() == __NULL' FAILED. 622--echo # 623 624--echo # 625 626CREATE TABLE b ( 627 col_int INTEGER NOT NULL, 628 col_int_key INTEGER NOT NULL, 629 630 col_varchar_key VARCHAR(20) NOT NULL, 631 col_varchar VARCHAR(20) NOT NULL, 632 633 KEY (col_varchar_key DESC), 634 KEY (col_varchar_key(5) DESC), 635 KEY (col_varchar_key, col_int_key) 636) ENGINE=InnoDB; 637 638INSERT INTO b ( col_int_key, col_int, col_varchar_key, col_varchar) VALUES 639(1, 3, 'xceksatefqsdksjijc', 'xceksatefqsdksjijc'), 640(7, 6, 'ce', 'ce'), 641(2, 3, 'eksatefqsdksjij', 'eksatefqsdksjij'), 642(5, 7, 'satefqsd', 'satefqsd'); 643 644CREATE TABLE bb ( 645 col_int INTEGER NOT NULL, 646 col_int_key INTEGER NOT NULL, 647 col_varchar_key VARCHAR(20) NOT NULL, 648 col_varchar VARCHAR(20) NOT NULL, 649 650 KEY (col_varchar_key(10) DESC, col_int_key DESC) 651) ENGINE=InnoDB; 652 653INSERT INTO bb ( col_int_key, col_int, col_varchar_key, col_varchar) VALUES 654(181, 88, 'kkoeiwsgpmfyvvuqvtjn', 'kkoeiwsgpmfyvvuqvtjn'), 655(3, 4, 'koeiwsgpmfyv', 'koeiwsgpmfyv'), 656(86, 113, 'oeiwsgpm', 'oeiwsgpm'), 657(6, 1, 'eiwsgpmfyvvuqvtjncds', 'eiwsgpmfyvvuqvtjncds'), 658(8, 5, 'iwsgpmfyvvuqv', 'iwsgpmfyvvuqv'); 659 660ANALYZE TABLE b,bb; 661 662EXPLAIN SELECT gp1 . col_varchar AS g1 663FROM b AS gp1 LEFT JOIN bb AS gp2 USING ( col_varchar_key ) 664WHERE gp1 . col_int IN ( 665 SELECT p1 . col_int AS p1 666 FROM bb AS p1 LEFT JOIN bb AS p2 667 ON ( p1 . col_int >= p2 . col_int_key ) 668 WHERE ( p1 . col_int , gp1 . col_int ) IN ( 669 SELECT c1 . col_int AS C1 670 , c1 . col_int AS C2 671 FROM b AS c1 LEFT JOIN bb AS c2 USING ( col_varchar ) 672 WHERE ( gp1 . col_varchar_key >= 'n' ) 673 ) 674 AND ( gp1 . col_varchar < 'e' ) 675) 676AND ( gp1 . col_varchar_key <> 'y' ) 677ORDER BY gp1 . col_varchar_key LIMIT 4; 678 679SELECT gp1 . col_varchar AS g1 680FROM b AS gp1 LEFT JOIN bb AS gp2 USING ( col_varchar_key ) 681WHERE gp1 . col_int IN ( 682 SELECT p1 . col_int AS p1 683 FROM bb AS p1 LEFT JOIN bb AS p2 684 ON ( p1 . col_int >= p2 . col_int_key ) 685 WHERE ( p1 . col_int , gp1 . col_int ) IN ( 686 SELECT c1 . col_int AS C1 687 , c1 . col_int AS C2 688 FROM b AS c1 LEFT JOIN bb AS c2 USING ( col_varchar ) 689 WHERE ( gp1 . col_varchar_key >= 'n' ) 690 ) 691 AND ( gp1 . col_varchar < 'e' ) 692) 693AND ( gp1 . col_varchar_key <> 'y' ) 694ORDER BY gp1 . col_varchar_key LIMIT 4; 695 696DROP TABLE b,bb; 697 698--echo # 699--echo # Bug#23759797: DESC INDEX BACKWARD SCAN SHOWS WRONG RESULTS 700--echo # 701CREATE TABLE t1 ( 702 col_varchar_255_latin1_key varchar(255) DEFAULT NULL, 703 pk int(11) NOT NULL AUTO_INCREMENT, 704 KEY (pk DESC), 705 KEY k3 (col_varchar_255_latin1_key DESC) 706); 707INSERT INTO t1(col_varchar_255_latin1_key, pk) VALUES 708('l',4), ('something',3), ('ycyoybhug',2), ('l',5), ('my',1), 709('l',4),('l',4),('l',4),('l',4),('l',4),('l',4), 710('l',4),('l',4),('l',4),('l',4),('l',4),('l',4), 711('l',4),('l',4),('l',4),('l',4),('l',4),('l',4), 712('l',4),('l',4),('l',4),('l',4),('l',4),('l',4); 713ANALYZE TABLE t1; 714 715SELECT 716t1 . pk AS field1, 717t1 . pk AS field2 718FROM t1 LEFT JOIN t1 AS t2 719ON t1 . col_varchar_255_latin1_key = t2 . col_varchar_255_latin1_key 720WHERE t1 . pk <> 4 721ORDER BY field1, field2 DESC; 722 723--replace_column 10 # 11 # 724EXPLAIN SELECT 725t1 . pk AS field1, 726t1 . pk AS field2 727FROM t1 LEFT JOIN t1 AS t2 728ON t1 . col_varchar_255_latin1_key = t2 . col_varchar_255_latin1_key 729WHERE t1 . pk <> 4 730ORDER BY field1, field2 DESC; 731 732DROP TABLE t1; 733 734CREATE TABLE t1 ( 735 pk int(11) NOT NULL AUTO_INCREMENT, 736 col_int_key int(11) DEFAULT NULL, 737 PRIMARY KEY (pk DESC), 738 KEY k3 (col_int_key) 739); 740 741INSERT INTO t1 VALUES (25,9), (24,1), (23,-74383360), (22,-855900160), 742(21,NULL), (20,1596522496), (19,9), (18,1), (17,NULL), (16,NULL), 743(15,1808465920), (14,NULL), (13,588644352), (12,3), (11,6), (10,NULL), 744(9,NULL), (8,8), (7,NULL), (6,NULL), (5,-1018232832), (4,5), (3,NULL), 745(2,NULL), (1,NULL); 746ANALYZE TABLE t1; 747 748SELECT DISTINCT 749t1 . pk AS field1 750FROM t1 LEFT JOIN t1 AS t2 751ON t1 . pk = t2 . pk 752WHERE ( t1 . col_int_key IS NULL AND t1 . pk != 4 ) 753GROUP BY field1 754HAVING field1 != 6 755ORDER BY field1 ASC; 756 757EXPLAIN SELECT DISTINCT 758t1 . pk AS field1 759FROM t1 LEFT JOIN t1 AS t2 760ON t1 . pk = t2 . pk 761WHERE ( t1 . col_int_key IS NULL AND t1 . pk != 4 ) 762GROUP BY field1 763HAVING field1 != 6 764ORDER BY field1 ASC; 765 766EXPLAIN UPDATE t1 767SET t1.pk = pk + 1000 768WHERE ( t1 . col_int_key IS NULL AND t1 . pk != 4 ) 769ORDER BY pk ASC LIMIT 3; 770 771DROP TABLE t1; 772--echo # 773 774--echo # 775--echo # Bug #23738137: WL1074:RESULT DIFFERENCE SEEN FOR 776--echo # QUERY WITH OR IN JOIN CONDITION 777--echo # 778 779CREATE TABLE t1 ( 780pk INTEGER NOT NULL, 781col_int_key INTEGER DEFAULT NULL, 782col_varchar_key varchar(20) DEFAULT NULL, 783col_varchar varchar(20) DEFAULT NULL, 784PRIMARY KEY (pk DESC), 785KEY col_int_key (col_int_key DESC), 786KEY col_varchar_key (col_varchar_key DESC) 787) charset latin1; 788 789INSERT INTO t1 VALUES (20,8,'eiw','eiw'),(19,8,'oeiws','oeiws'), 790(18,NULL,'koeiw','koeiw'),(17,3,'kkoei','kkoei'), 791(16,9,'ukkoe','ukkoe'),(15,5,'qukko','qukko'), 792(14,2,'kqukk','kqukk'),(13,80,'ukquk','ukquk'), 793(12,5,'lukqu','lukqu'),(10,NULL,'alukq','alukq'), 794(9,3,'maluk','maluk'),(8,NULL,NULL,NULL), 795(7,9,'ymalu','ymalu'),(6,3,'kymal','kymal'), 796(5,6,'vkyma','vkyma'),(4,8,'vvkym','vvkym'), 797(3,3,'jjvvk','jjvvk'),(1,5,'bjjvv','bjjvv'); 798 799ANALYZE TABLE t1; 800 801let $query= SELECT STRAIGHT_JOIN count(t1.col_varchar) FROM t1 JOIN t1 AS t2 ON 802(t2.pk = t1.col_int_key) OR (t2.col_varchar_key = t1.col_varchar_key); 803 804eval EXPLAIN $query; 805eval $query; 806 807let $query= SELECT count(t1.col_varchar) FROM t1 JOIN t1 AS t2 ON (t2.pk = t1.col_int_key) 808OR (t2.col_varchar_key = t1.col_varchar_key); 809 810eval EXPLAIN $query; 811eval $query; 812 813DROP TABLE t1; 814 815--echo # End of test for Bug#23738137 816 817--echo # 818--echo # Bug#24294552:MULTI KEY DESC INDEX ON GCOL GIVES INCORRECT RESULTS 819--echo # 820CREATE TABLE t2 ( 821 col_int int(11) DEFAULT NULL, 822 pk int(11) NOT NULL AUTO_INCREMENT, 823 col_int_key int(11), 824 PRIMARY KEY (pk DESC), 825 KEY k2 (col_int_key, col_int DESC) 826); 827 828INSERT INTO 829t2(col_int,col_int_key) VALUES (1,2), (2,4), (3,6), (4,8), (5,10), (6,12), 830(7,14), (8,16), (9,18); 831 832CREATE TABLE t1 ( 833 col_int int(11) DEFAULT NULL, 834 pk int(11) NOT NULL, 835 col_int_key int(11) 836); 837 838INSERT INTO t1(pk, col_int, col_int_key) VALUES (4,3,6), (5,4,8), (6,2,4); 839ANALYZE TABLE t1, t2; 840 841SELECT STRAIGHT_JOIN 842t1 . col_int_key AS field1 , 843t2 . col_int AS field2 844FROM t1 LEFT JOIN t2 FORCE INDEX(k2) 845ON t1 . col_int = t2 . col_int 846WHERE ( t2 . col_int_key <= t1 . col_int_key AND t1 . pk >= t2 . pk ) 847ORDER BY field1, field2 DESC; 848 849--replace_column 10 # 11 # 850EXPLAIN SELECT STRAIGHT_JOIN 851t1 . col_int_key AS field1 , 852t2 . col_int AS field2 853FROM t1 LEFT JOIN t2 force index(k2) 854ON t1 . col_int = t2 . col_int 855WHERE ( t2 . col_int_key <= t1 . col_int_key AND t1 . pk >= t2 . pk ) 856ORDER BY field1, field2 DESC; 857 858DROP TABLE t1,t2; 859 860--echo # 861 862--echo # 863--echo # Bug#24300848:WL1074: INNODB: ASSERTION FAILURE: 864--echo # BTR0PCUR.CC:268:CURSOR->OLD_REC 865--echo # 866 867CREATE TABLE t1(col1 int , col2 int, PRIMARY KEY (col1 DESC)) 868PARTITION BY RANGE (col1) (PARTITION p0 VALUES LESS THAN (5)); 869 870INSERT INTO t1 VALUES(1, 10); 871 872SELECT * FROM t1 WHERE col1 IN (1, 2); 873 874DROP TABLE t1; 875 876--echo # End of test for Bug#24300848 877 878--echo # 879--echo # Bug#24431177: WL1074:LEFT JOIN QUERY USING INDEX SHOWS 880--echo # WRONG QEP AND RESULTS ON 2ND EXECUTION 881--echo # 882 883CREATE TABLE t1( 884pk INTEGER NOT NULL AUTO_INCREMENT, 885col_int_key INTEGER DEFAULT NULL, 886PRIMARY KEY (pk DESC), 887KEY col_int_key (col_int_key DESC) 888); 889INSERT INTO t1 VALUES (3,15),(6,8),(20,6),(15,6),(18,5),(17,5), 890(16,5),(13,5),(12,5),(9,5),(8,5),(7,5),(5,5),(11,4),(4,4), 891(19,3),(10,2),(1,2),(14,1),(2,1); 892 893ANALYZE TABLE t1; 894 895let $query=SELECT * FROM t1 WHERE pk IN (6,2) 896 OR (col_int_key >= 7 AND col_int_key < 13); 897eval EXPLAIN $query; 898eval $query; 899 900ALTER TABLE t1 ADD INDEX key1 (pk); 901ALTER TABLE t1 ADD INDEX key2 (col_int_key); 902 903ANALYZE TABLE t1; 904 905let $query=SELECT * FROM t1 FORCE INDEX (key1,col_int_key) WHERE pk IN (6,2) 906 OR (col_int_key >= 7 AND col_int_key < 13); 907eval EXPLAIN $query; 908eval $query; 909 910DROP TABLE t1; 911 912--echo # End of test for Bug#24431777 913 914#Test for checking clone_first/clone_last for desc indexes 915 916CREATE TABLE t1( 917a INTEGER NOT NULL, 918b INTEGER NOT NULL, 919KEY ab (a DESC,b DESC) 920); 921 922#More values are required to force range than index 923INSERT INTO t1 VALUES (78,7),(78,6),(70,1),(47,1),(15,4),(15,1), 924(10,6),(3,6),(2,56),(2,6),(1,56); 925 926SELECT * FROM t1 WHERE ( 927 ( b =1 AND a BETWEEN 14 AND 21 ) OR 928 ( b =2 AND a BETWEEN 16 AND 18 ) OR 929 ( b =3 AND a BETWEEN 15 AND 19 ) OR 930 (a BETWEEN 19 AND 47) ); 931 932DROP TABLE t1; 933 934--echo # 935--echo # Bug #25899921: INCORRECT BEHAVIOR WITH DESC INDEX AND 936--echo # IMPOSSIBLE CONDITION 937--echo # 938 939CREATE TABLE t1 (a INT, b DATE, KEY(b,a DESC)); 940SET @g:='1'; 941--error ER_TRUNCATED_WRONG_VALUE 942DELETE FROM t1 WHERE b=@g ORDER BY b, a LIMIT 1; 943DROP TABLE t1; 944 945--echo # End of test for Bug#25899921 946