Commit afa8187f authored by evgen@moonbone.local's avatar evgen@moonbone.local
Browse files

Fix bug #13218: InnoDB: using a partial-field key prefix in search

  
This is backport from 5.0 of fix for bug #11039
parent 15bf8f6a
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1685,3 +1685,12 @@ explain select * from t1 order by a,b,c,d;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	3	Using filesort
drop table t1;
create table t1 (a char(1), b char(1), key(a, b)) engine=innodb;
insert into t1 values ('8', '6'), ('4', '7');
select min(a) from t1;
min(a)
4
select min(b) from t1 where a='8';
min(b)
6
drop table t1;
+9 −0
Original line number Diff line number Diff line
@@ -1230,4 +1230,13 @@ select * from t1 order by a,b,c,d;
explain select * from t1 order by a,b,c,d;
drop table t1;

#
# BUG#11039,#13218 Wrong key length in min()
#

create table t1 (a char(1), b char(1), key(a, b)) engine=innodb;
insert into t1 values ('8', '6'), ('4', '7');
select min(a) from t1;
select min(b) from t1 where a='8';
drop table t1;
# End of 4.1 tests
+2 −1
Original line number Diff line number Diff line
@@ -661,7 +661,8 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
              If key_part2 may be NULL, then we want to find the first row
              that is not null
            */
            ref->key_buff[ref->key_length++]= 1;
            ref->key_buff[ref->key_length]= 1;
            ref->key_length+= part->store_length;
            *range_fl&= ~NO_MIN_RANGE;
            *range_fl|= NEAR_MIN;                // > NULL
          }