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