From 014fe01512711d3d1296f1dd5326420810b35b79 Mon Sep 17 00:00:00 2001 From: "sergefp@mysql.com" <> Date: Mon, 20 Jun 2005 08:56:37 +0000 Subject: [PATCH] Fix for BUG#8441: in index_merge code when creating index search tuples use KEY_PART_INFO::store_length, not KEY_PART_INFO::length (like range code does) --- mysql-test/r/index_merge_innodb.result | 11 +++++++++++ mysql-test/t/index_merge_innodb.test | 11 +++++++++++ sql/opt_range.cc | 4 ++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/index_merge_innodb.result b/mysql-test/r/index_merge_innodb.result index 52e2a4046cf..662fffe1ba1 100644 --- a/mysql-test/r/index_merge_innodb.result +++ b/mysql-test/r/index_merge_innodb.result @@ -123,3 +123,14 @@ key1a = 2 and key1b is null and key3a = 2 and key3b is null; count(*) 4 drop table t1,t2; +create table t1 ( +id1 int, +id2 date , +index idx2 (id1,id2), +index idx1 (id2) +) engine = innodb; +insert into t1 values(1,'20040101'), (2,'20040102'); +select * from t1 where id1 = 1 and id2= '20040101'; +id1 id2 +1 2004-01-01 +drop table t1; diff --git a/mysql-test/t/index_merge_innodb.test b/mysql-test/t/index_merge_innodb.test index 5e270c161a2..c10ce3b9688 100644 --- a/mysql-test/t/index_merge_innodb.test +++ b/mysql-test/t/index_merge_innodb.test @@ -120,3 +120,14 @@ select count(*) from t1 where drop table t1,t2; +# Test for BUG#8441 +create table t1 ( + id1 int, + id2 date , + index idx2 (id1,id2), + index idx1 (id2) +) engine = innodb; +insert into t1 values(1,'20040101'), (2,'20040102'); +select * from t1 where id1 = 1 and id2= '20040101'; +drop table t1; + diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 5732e156a7c..ffe0a067d68 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2593,12 +2593,12 @@ static double ror_scan_selectivity(const ROR_INTERSECT_INFO *info, { tuple_arg= scan->sel_arg; /* Here we use the length of the first key part */ - tuple_arg->store_min(key_part->length, &key_ptr, 0); + tuple_arg->store_min(key_part->store_length, &key_ptr, 0); } while (tuple_arg->next_key_part != sel_arg) { tuple_arg= tuple_arg->next_key_part; - tuple_arg->store_min(key_part[tuple_arg->part].length, &key_ptr, 0); + tuple_arg->store_min(key_part[tuple_arg->part].store_length, &key_ptr, 0); } min_range.length= max_range.length= ((char*) key_ptr - (char*) key_val); records= (info->param->table->file->