From 53eb9871ada99d631156936ef29e836746cd6cf7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 20 Oct 2004 21:01:52 +0500 Subject: [PATCH] A fix (bug #6142: SELECT DISTINCT on key field crashes server) sql/opt_range.cc: A fix (bug #6142: SELECT DISTINCT on key field crashes server) Code clean-up. --- mysql-test/r/group_min_max.result | 6 ++++++ mysql-test/t/group_min_max.test | 10 ++++++++++ sql/opt_range.cc | 7 +++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result index a3d0fb585a5..e97d8d63579 100644 --- a/mysql-test/r/group_min_max.result +++ b/mysql-test/r/group_min_max.result @@ -1897,3 +1897,9 @@ id select_type table type possible_keys key key_len ref rows Extra drop table t1; drop table t2; drop table t3; +create table t1 ( +a varchar(30), b varchar(30), primary key(a), key(b) +) engine=innodb; +select distinct a from t1; +a +drop table t1; diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test index 34e915b8f6b..677b3ecf7ec 100644 --- a/mysql-test/t/group_min_max.test +++ b/mysql-test/t/group_min_max.test @@ -577,3 +577,13 @@ explain select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b; drop table t1; drop table t2; drop table t3; + +# +# Bug #6142: a problem with the empty innodb table +# + +create table t1 ( + a varchar(30), b varchar(30), primary key(a), key(b) +) engine=innodb; +select distinct a from t1; +drop table t1; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 387537e76ba..9bf03dd0627 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -7040,17 +7040,16 @@ get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree, static inline uint get_field_keypart(KEY *index, Field *field) { - KEY_PART_INFO *part= index->key_part; + KEY_PART_INFO *part, *end; uint key_part_num= 0; - while (part != part + index->key_parts) + for (part= index->key_part, end= part + index->key_parts; part < end; part++) { key_part_num++; if (field->eq(part->field)) return key_part_num; - part++; } - return key_part_num; + return 0; }