diff options
Diffstat (limited to 'mysys/my_handler.c')
-rw-r--r-- | mysys/my_handler.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/mysys/my_handler.c b/mysys/my_handler.c index 156e7892580..23d28956808 100644 --- a/mysys/my_handler.c +++ b/mysys/my_handler.c @@ -22,11 +22,11 @@ int mi_compare_text(CHARSET_INFO *charset_info, uchar *a, uint a_length, uchar *b, uint b_length, my_bool part_key, my_bool skip_end_space) { - if (skip_end_space) + if (!part_key) return charset_info->coll->strnncollsp(charset_info, a, a_length, - b, b_length); + b, b_length, (my_bool)!skip_end_space); return charset_info->coll->strnncoll(charset_info, a, a_length, - b, b_length, part_key); + b, b_length, part_key); } @@ -197,6 +197,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, } break; case HA_KEYTYPE_BINARY: + case HA_KEYTYPE_BIT: if (keyseg->flag & HA_SPACE_PACK) { int a_length,b_length,pack_length; @@ -225,13 +226,12 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, b+=length; } break; - case HA_KEYTYPE_VARTEXT: + case HA_KEYTYPE_VARTEXT1: + case HA_KEYTYPE_VARTEXT2: { - int a_length,full_a_length,b_length,full_b_length,pack_length; + int a_length,b_length,pack_length; get_key_length(a_length,a); get_key_pack_length(b_length,pack_length,b); - full_a_length= a_length; - full_b_length= b_length; next_key_length=key_length-b_length-pack_length; if (piks && @@ -240,14 +240,17 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, next_key_length <= 0), (my_bool) ((nextflag & (SEARCH_FIND | SEARCH_UPDATE)) == - SEARCH_FIND)))) + SEARCH_FIND && + ! (keyseg->flag & + HA_END_SPACE_ARE_EQUAL))))) return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); - a+= full_a_length; - b+= full_b_length; + a+= a_length; + b+= b_length; break; } break; - case HA_KEYTYPE_VARBINARY: + case HA_KEYTYPE_VARBINARY1: + case HA_KEYTYPE_VARBINARY2: { int a_length,b_length,pack_length; get_key_length(a_length,a); @@ -512,8 +515,8 @@ HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, uchar *a) else a= end; break; - case HA_KEYTYPE_VARTEXT: - case HA_KEYTYPE_VARBINARY: + case HA_KEYTYPE_VARTEXT1: + case HA_KEYTYPE_VARBINARY1: { int a_length; get_key_length(a_length, a); |