Commit eccd9969 authored by svoj@may.pils.ru's avatar svoj@may.pils.ru

BUG#19702 - Using myisampack/myisamchk on a FULLTEXT indexed

            table results in table corrupt

Fulltext key has always two keysegs, thus we need to update
FT_SEGS (last) element from seg array in case of compressed table.
Also we must update ft2_keyinfo.
parent 5e442de3
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/* Functions to compressed records */ /* Functions to compressed records */
#include "myisamdef.h" #include "fulltext.h"
#define IS_CHAR ((uint) 32768) /* Bit if char (not offset) in tree */ #define IS_CHAR ((uint) 32768) /* Bit if char (not offset) in tree */
...@@ -228,11 +228,19 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys) ...@@ -228,11 +228,19 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
{ {
for (i=0 ; i < share->base.keys ; i++) for (i=0 ; i < share->base.keys ; i++)
{ {
share->keyinfo[i].keylength+=(uint16) diff_length; MI_KEYDEF *keyinfo= &share->keyinfo[i];
share->keyinfo[i].minlength+=(uint16) diff_length; keyinfo->keylength+= (uint16) diff_length;
share->keyinfo[i].maxlength+=(uint16) diff_length; keyinfo->minlength+= (uint16) diff_length;
share->keyinfo[i].seg[share->keyinfo[i].keysegs].length= keyinfo->maxlength+= (uint16) diff_length;
(uint16) rec_reflength; keyinfo->seg[keyinfo->flag & HA_FULLTEXT ?
FT_SEGS : keyinfo->keysegs].length= (uint16) rec_reflength;
}
if (share->ft2_keyinfo.seg)
{
MI_KEYDEF *ft2_keyinfo= &share->ft2_keyinfo;
ft2_keyinfo->keylength+= (uint16) diff_length;
ft2_keyinfo->minlength+= (uint16) diff_length;
ft2_keyinfo->maxlength+= (uint16) diff_length;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment