Loading mysql-test/r/func_group.result +24 −0 Original line number Diff line number Diff line Loading @@ -916,3 +916,27 @@ select count(*), min(7), max(7) from t2m, t1i; count(*) min(7) max(7) 0 NULL NULL drop table t1m, t1i, t2m, t2i; CREATE TABLE t1 (id int PRIMARY KEY, b char(3), INDEX(b)); INSERT INTO t1 VALUES (1,'xx'), (2,'aa'); SELECT * FROM t1; id b 1 xx 2 aa SELECT MAX(b) FROM t1 WHERE b < 'ppppp'; MAX(b) aa SHOW WARNINGS; Level Code Message SELECT MAX(b) FROM t1 WHERE b < 'pp'; MAX(b) aa DROP TABLE t1; CREATE TABLE t1 (id int PRIMARY KEY, b char(16), INDEX(b(4))); INSERT INTO t1 VALUES (1, 'xxxxbbbb'), (2, 'xxxxaaaa'); SELECT MAX(b) FROM t1; MAX(b) xxxxbbbb EXPLAIN SELECT MAX(b) FROM t1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 DROP TABLE t1; mysql-test/r/select.result +14 −0 Original line number Diff line number Diff line Loading @@ -2714,3 +2714,17 @@ select * from t1 where f1 in (select f3 from t2 where (f3,f4)= (select f3,f4 fro f1 f2 1 1 drop table t1,t2; CREATE TABLE t1(a int, b int, c int, KEY b(b), KEY c(c)); insert into t1 values (1,0,0),(2,0,0); CREATE TABLE t2 (a int, b varchar(2), c varchar(2), PRIMARY KEY(a)); insert into t2 values (1,'',''), (2,'',''); CREATE TABLE t3 (a int, b int, PRIMARY KEY (a,b), KEY a (a), KEY b (b)); insert into t3 values (1,1),(1,2); explain select straight_join DISTINCT t2.a,t2.b, t1.c from t1, t3, t2 where (t1.c=t2.a or (t1.c=t3.a and t2.a=t3.b)) and t1.b=556476786 and t2.b like '%%' order by t2.b limit 0,1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref b,c b 5 const 1 Using where; Using temporary; Using filesort 1 SIMPLE t3 index PRIMARY,a,b PRIMARY 8 NULL 2 Using index 1 SIMPLE t2 ALL PRIMARY NULL NULL NULL 2 Range checked for each record (index map: 0x1) DROP TABLE t1,t2,t3; mysql-test/t/func_group.test +19 −0 Original line number Diff line number Diff line Loading @@ -598,4 +598,23 @@ select count(*), min(7), max(7) from t2m, t1i; drop table t1m, t1i, t2m, t2i; # # Bug #18206: min/max optimization cannot be applied to partial index # CREATE TABLE t1 (id int PRIMARY KEY, b char(3), INDEX(b)); INSERT INTO t1 VALUES (1,'xx'), (2,'aa'); SELECT * FROM t1; SELECT MAX(b) FROM t1 WHERE b < 'ppppp'; SHOW WARNINGS; SELECT MAX(b) FROM t1 WHERE b < 'pp'; DROP TABLE t1; CREATE TABLE t1 (id int PRIMARY KEY, b char(16), INDEX(b(4))); INSERT INTO t1 VALUES (1, 'xxxxbbbb'), (2, 'xxxxaaaa'); SELECT MAX(b) FROM t1; EXPLAIN SELECT MAX(b) FROM t1; DROP TABLE t1; # End of 4.1 tests mysql-test/t/select.test +14 −0 Original line number Diff line number Diff line Loading @@ -2248,4 +2248,18 @@ insert into t2 values(1,1); select * from t1 where f1 in (select f3 from t2 where (f3,f4)= (select f3,f4 from t2)); drop table t1,t2; # # Bug #4981: 4.x and 5.x produce non-optimal execution path, 3.23 regression test failure # CREATE TABLE t1(a int, b int, c int, KEY b(b), KEY c(c)); insert into t1 values (1,0,0),(2,0,0); CREATE TABLE t2 (a int, b varchar(2), c varchar(2), PRIMARY KEY(a)); insert into t2 values (1,'',''), (2,'',''); CREATE TABLE t3 (a int, b int, PRIMARY KEY (a,b), KEY a (a), KEY b (b)); insert into t3 values (1,1),(1,2); # must have "range checked" for t2 explain select straight_join DISTINCT t2.a,t2.b, t1.c from t1, t3, t2 where (t1.c=t2.a or (t1.c=t3.a and t2.a=t3.b)) and t1.b=556476786 and t2.b like '%%' order by t2.b limit 0,1; DROP TABLE t1,t2,t3; # End of 4.1 tests sql/opt_range.cc +1 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ class SEL_ARG :public Sql_alloc uint8 min_flag, uint8 max_flag, uint8 maybe_flag); SEL_ARG(enum Type type_arg) :elements(1),use_count(1),left(0),next_key_part(0),color(BLACK), type(type_arg) type(type_arg),min_flag(0) {} inline bool is_same(SEL_ARG *arg) { Loading Loading
mysql-test/r/func_group.result +24 −0 Original line number Diff line number Diff line Loading @@ -916,3 +916,27 @@ select count(*), min(7), max(7) from t2m, t1i; count(*) min(7) max(7) 0 NULL NULL drop table t1m, t1i, t2m, t2i; CREATE TABLE t1 (id int PRIMARY KEY, b char(3), INDEX(b)); INSERT INTO t1 VALUES (1,'xx'), (2,'aa'); SELECT * FROM t1; id b 1 xx 2 aa SELECT MAX(b) FROM t1 WHERE b < 'ppppp'; MAX(b) aa SHOW WARNINGS; Level Code Message SELECT MAX(b) FROM t1 WHERE b < 'pp'; MAX(b) aa DROP TABLE t1; CREATE TABLE t1 (id int PRIMARY KEY, b char(16), INDEX(b(4))); INSERT INTO t1 VALUES (1, 'xxxxbbbb'), (2, 'xxxxaaaa'); SELECT MAX(b) FROM t1; MAX(b) xxxxbbbb EXPLAIN SELECT MAX(b) FROM t1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 DROP TABLE t1;
mysql-test/r/select.result +14 −0 Original line number Diff line number Diff line Loading @@ -2714,3 +2714,17 @@ select * from t1 where f1 in (select f3 from t2 where (f3,f4)= (select f3,f4 fro f1 f2 1 1 drop table t1,t2; CREATE TABLE t1(a int, b int, c int, KEY b(b), KEY c(c)); insert into t1 values (1,0,0),(2,0,0); CREATE TABLE t2 (a int, b varchar(2), c varchar(2), PRIMARY KEY(a)); insert into t2 values (1,'',''), (2,'',''); CREATE TABLE t3 (a int, b int, PRIMARY KEY (a,b), KEY a (a), KEY b (b)); insert into t3 values (1,1),(1,2); explain select straight_join DISTINCT t2.a,t2.b, t1.c from t1, t3, t2 where (t1.c=t2.a or (t1.c=t3.a and t2.a=t3.b)) and t1.b=556476786 and t2.b like '%%' order by t2.b limit 0,1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref b,c b 5 const 1 Using where; Using temporary; Using filesort 1 SIMPLE t3 index PRIMARY,a,b PRIMARY 8 NULL 2 Using index 1 SIMPLE t2 ALL PRIMARY NULL NULL NULL 2 Range checked for each record (index map: 0x1) DROP TABLE t1,t2,t3;
mysql-test/t/func_group.test +19 −0 Original line number Diff line number Diff line Loading @@ -598,4 +598,23 @@ select count(*), min(7), max(7) from t2m, t1i; drop table t1m, t1i, t2m, t2i; # # Bug #18206: min/max optimization cannot be applied to partial index # CREATE TABLE t1 (id int PRIMARY KEY, b char(3), INDEX(b)); INSERT INTO t1 VALUES (1,'xx'), (2,'aa'); SELECT * FROM t1; SELECT MAX(b) FROM t1 WHERE b < 'ppppp'; SHOW WARNINGS; SELECT MAX(b) FROM t1 WHERE b < 'pp'; DROP TABLE t1; CREATE TABLE t1 (id int PRIMARY KEY, b char(16), INDEX(b(4))); INSERT INTO t1 VALUES (1, 'xxxxbbbb'), (2, 'xxxxaaaa'); SELECT MAX(b) FROM t1; EXPLAIN SELECT MAX(b) FROM t1; DROP TABLE t1; # End of 4.1 tests
mysql-test/t/select.test +14 −0 Original line number Diff line number Diff line Loading @@ -2248,4 +2248,18 @@ insert into t2 values(1,1); select * from t1 where f1 in (select f3 from t2 where (f3,f4)= (select f3,f4 from t2)); drop table t1,t2; # # Bug #4981: 4.x and 5.x produce non-optimal execution path, 3.23 regression test failure # CREATE TABLE t1(a int, b int, c int, KEY b(b), KEY c(c)); insert into t1 values (1,0,0),(2,0,0); CREATE TABLE t2 (a int, b varchar(2), c varchar(2), PRIMARY KEY(a)); insert into t2 values (1,'',''), (2,'',''); CREATE TABLE t3 (a int, b int, PRIMARY KEY (a,b), KEY a (a), KEY b (b)); insert into t3 values (1,1),(1,2); # must have "range checked" for t2 explain select straight_join DISTINCT t2.a,t2.b, t1.c from t1, t3, t2 where (t1.c=t2.a or (t1.c=t3.a and t2.a=t3.b)) and t1.b=556476786 and t2.b like '%%' order by t2.b limit 0,1; DROP TABLE t1,t2,t3; # End of 4.1 tests
sql/opt_range.cc +1 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ class SEL_ARG :public Sql_alloc uint8 min_flag, uint8 max_flag, uint8 maybe_flag); SEL_ARG(enum Type type_arg) :elements(1),use_count(1),left(0),next_key_part(0),color(BLACK), type(type_arg) type(type_arg),min_flag(0) {} inline bool is_same(SEL_ARG *arg) { Loading