Commit c17fc16c authored by unknown's avatar unknown
Browse files

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.


myisam/mi_packrec.c:
  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 c939a8d7
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -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;
    }
  }