Commit 5bc45012 authored by unknown's avatar unknown
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


mysql-test/t/innodb.test:
  Backport from 5.0 of test case for bug#11039
mysql-test/r/innodb.result:
  Backport from 5.0 of test case for bug#11039
sql/opt_sum.cc:
  Fix bug #13218:  backport from 5.0 of bug #11039 fix
parent 4014d76c
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
          }