From 1539f91267a8ca11b137444a4cb87c61febfb05c Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Mon, 10 Sep 2012 16:46:33 +0300 Subject: Fixed Bug#1002564: Wrong result for a lookup query from a heap table mysql-test/suite/heap/heap_hash.result: Added test case mysql-test/suite/heap/heap_hash.test: Added test case storage/heap/hp_hash.c: Limit key data length to max key length --- storage/heap/hp_hash.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'storage') diff --git a/storage/heap/hp_hash.c b/storage/heap/hp_hash.c index d44726ba762..2abed55459c 100644 --- a/storage/heap/hp_hash.c +++ b/storage/heap/hp_hash.c @@ -348,6 +348,8 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) seg->length/cs->mbmaxlen); set_if_smaller(length, char_length); } + else + set_if_smaller(length, seg->length); cs->coll->hash_sort(cs, pos+pack_length, length, &nr, &nr2); } else @@ -593,6 +595,11 @@ int hp_rec_key_cmp(HP_KEYDEF *keydef, const uchar *rec1, const uchar *rec2, char_length2= my_charpos(cs, pos2, pos2 + char_length2, char_length); set_if_smaller(char_length2, safe_length2); } + else + { + set_if_smaller(char_length1, seg->length); + set_if_smaller(char_length2, seg->length); + } if (cs->coll->strnncollsp(seg->charset, pos1, char_length1, @@ -689,6 +696,8 @@ int hp_key_cmp(HP_KEYDEF *keydef, const uchar *rec, const uchar *key) char_length2= my_charpos(cs, pos, pos + char_length_rec, char_length2); set_if_smaller(char_length_rec, char_length2); } + else + set_if_smaller(char_length_rec, seg->length); if (cs->coll->strnncollsp(seg->charset, (uchar*) pos, char_length_rec, -- cgit v1.2.1