summaryrefslogtreecommitdiff
path: root/storage/heap/hp_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage/heap/hp_hash.c')
-rw-r--r--storage/heap/hp_hash.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/storage/heap/hp_hash.c b/storage/heap/hp_hash.c
index 2abed55459c..993d3377b73 100644
--- a/storage/heap/hp_hash.c
+++ b/storage/heap/hp_hash.c
@@ -640,7 +640,7 @@ int hp_key_cmp(HP_KEYDEF *keydef, const uchar *rec, const uchar *key)
{
if (seg->null_bit)
{
- int found_null=test(rec[seg->null_pos] & seg->null_bit);
+ int found_null= MY_TEST(rec[seg->null_pos] & seg->null_bit);
if (found_null != (int) *key++)
return 1;
if (found_null)
@@ -737,7 +737,7 @@ void hp_make_key(HP_KEYDEF *keydef, uchar *key, const uchar *rec)
uint char_length= seg->length;
uchar *pos= (uchar*) rec + seg->start;
if (seg->null_bit)
- *key++= test(rec[seg->null_pos] & seg->null_bit);
+ *key++= MY_TEST(rec[seg->null_pos] & seg->null_bit);
if (cs->mbmaxlen > 1)
{
char_length= my_charpos(cs, pos, pos + seg->length,
@@ -776,7 +776,7 @@ uint hp_rb_make_key(HP_KEYDEF *keydef, uchar *key,
uint char_length;
if (seg->null_bit)
{
- if (!(*key++= 1 - test(rec[seg->null_pos] & seg->null_bit)))
+ if (!(*key++= 1 - MY_TEST(rec[seg->null_pos] & seg->null_bit)))
continue;
}
if (seg->flag & HA_SWAP_KEY)
@@ -875,9 +875,19 @@ uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
keypart_map>>= 1;
if (seg->null_bit)
{
+ /* Convert NULL from MySQL representation into HEAP's. */
if (!(*key++= (char) 1 - *old++))
+ {
+ /*
+ Skip length part of a variable length field.
+ Length of key-part used with heap_rkey() always 2.
+ See also hp_hashnr().
+ */
+ if (seg->flag & (HA_VAR_LENGTH_PART | HA_BLOB_PART))
+ old+= 2;
continue;
}
+ }
if (seg->flag & HA_SWAP_KEY)
{
uint length= seg->length;