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.
This commit is contained in:
parent
5e442de398
commit
eccd9969c7
@ -16,7 +16,7 @@
|
||||
|
||||
/* Functions to compressed records */
|
||||
|
||||
#include "myisamdef.h"
|
||||
#include "fulltext.h"
|
||||
|
||||
#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)
|
||||
{
|
||||
for (i=0 ; i < share->base.keys ; i++)
|
||||
{
|
||||
share->keyinfo[i].keylength+=(uint16) diff_length;
|
||||
share->keyinfo[i].minlength+=(uint16) diff_length;
|
||||
share->keyinfo[i].maxlength+=(uint16) diff_length;
|
||||
share->keyinfo[i].seg[share->keyinfo[i].keysegs].length=
|
||||
(uint16) rec_reflength;
|
||||
MI_KEYDEF *keyinfo= &share->keyinfo[i];
|
||||
keyinfo->keylength+= (uint16) diff_length;
|
||||
keyinfo->minlength+= (uint16) diff_length;
|
||||
keyinfo->maxlength+= (uint16) diff_length;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user