diff options
author | serg@serg.mysql.com <> | 2001-06-21 16:40:24 +0200 |
---|---|---|
committer | serg@serg.mysql.com <> | 2001-06-21 16:40:24 +0200 |
commit | 3c7cc2285c6a80cd998faa5d669d7d9d0d20b632 (patch) | |
tree | 8801108407e8a787e29ac63991e12b48b2f65f58 /myisam/mi_search.c | |
parent | 4b15a69ea2482ca37708873b5c4c8b919d8dc3d8 (diff) | |
download | mariadb-git-3c7cc2285c6a80cd998faa5d669d7d9d0d20b632.tar.gz |
bug in _mi_prefix_search fixed
Diffstat (limited to 'myisam/mi_search.c')
-rw-r--r-- | myisam/mi_search.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/myisam/mi_search.c b/myisam/mi_search.c index 1db8c2a8b67..f90f6fa6467 100644 --- a/myisam/mi_search.c +++ b/myisam/mi_search.c @@ -264,9 +264,9 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, SEARCH_NO_FIND,SEARCH_LAST and HA_REVERSE_SORT flags. flag is the value returned by _mi_key_cmp and as treated as final */ int flag=0, my_flag=-1; - uint nod_flag, length, len, matched, cmplen, kseg_len, key_len_left; + uint nod_flag, length, len, matched, cmplen, kseg_len; uint prefix_len,suffix_len; - int key_len_skip, seg_len_pack; + int key_len_skip, seg_len_pack, key_len_left; uchar *end, *kseg, *vseg; uchar *sort_order=keyinfo->seg->charset->sort_order; uchar tt_buff[MI_MAX_KEY_BUFF+2], *t_buff=tt_buff+2; @@ -288,6 +288,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, key_len_skip=lenght_pack+kseg_len; key_len_left=key_len-key_len_skip; cmplen=(key_len_left>=0) ? kseg_len : key_len-lenght_pack; + DBUG_PRINT("info",("key: '%.*s'",kseg_len,kseg)); } /* @@ -342,6 +343,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, saved_vseg=vseg; saved_prefix_len=prefix_len; + DBUG_PRINT("loop",("page: '%.*s%.*s'",prefix_len,t_buff+seg_len_pack,suffix_len,vseg)); { uchar *from=vseg+suffix_len; MI_KEYSEG *keyseg; @@ -409,7 +411,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, } else if (len > cmplen) { - if(my_flag = !(nextflag & SEARCH_PREFIX) && key_len_left>0) + if(my_flag = !(nextflag & SEARCH_PREFIX) || key_len_left>0) break; goto fix_flag; } @@ -688,8 +690,8 @@ static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length, /* - ** Compare two keys with is bigger - ** Returns <0, 0, >0 acording to with is bigger + ** Compare two keys + ** Returns <0, 0, >0 acording to which is bigger ** Key_length specifies length of key to use. Number-keys can't ** be splited ** If flag <> SEARCH_FIND compare also position |