Commit 12a640e2 authored by unknown's avatar unknown
Browse files

Bug#8321 - myisampack bug in compression algorithm

Added 64-bit extensions, comments, extended statistics 
and trace prints.


include/my_base.h:
  Bug#8321 - myisampack bug in compression algorithm
  Added a comment.
myisam/mi_packrec.c:
  Bug#8321 - myisampack bug in compression algorithm
  Fixed a function comment.
myisam/myisampack.c:
  Bug#8321 - myisampack bug in compression algorithm
  Enlarged the variables which hold Huffman codes to
  ulonglong and adjusted the functions accordingly.
  Added test code for long Huffman codes.
  Enlarged the distinct column values buffer (tree_buff)
  and added checks to stay in its range.
  Added statistics and trace prints.
  Added a lot of comments.
mysys/tree.c:
  Bug#8321 - myisampack bug in compression algorithm
  Added a check against overflow of the tree element count.
  The tree element count is only 31 bits, but sometimes
  used for big numbers. There is however no application yet,
  which relies on exact tree element counts.
parent b80eb2b5
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -367,6 +367,7 @@ enum ha_base_keytype {
#define HA_STATE_EXTEND_BLOCK	2048
#define HA_STATE_RNEXT_SAME	4096	/* rnext_same was called */

/* myisampack expects no more than 32 field types. */
enum en_fieldtype {
  FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE,
  FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO,
+13 −2
Original line number Diff line number Diff line
@@ -416,8 +416,19 @@ static uint find_longest_bitstream(uint16 *table, uint16 *end)
}


	/* Read record from datafile */
	/* Returns length of packed record, -1 if error */
/*
  Read record from datafile.

  SYNOPSIS
    _mi_read_pack_record()
    info                        A pointer to MI_INFO.
    filepos                     File offset of the record.
    buf                 RETURN  The buffer to receive the record.

  RETURN
    0                                   on success
    HA_ERR_WRONG_IN_RECORD or -1        on error
*/

int _mi_read_pack_record(MI_INFO *info, my_off_t filepos, byte *buf)
{
+1138 −142

File changed.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Diff line number Diff line
@@ -263,6 +263,9 @@ TREE_ELEMENT *tree_insert(TREE *tree, void *key, uint key_size,
    if (tree->flag & TREE_NO_DUPS)
      return(NULL);
    element->count++;
    /* Avoid a wrap over of the count. */
    if (! element->count)
      element->count--;
  }
  DBUG_EXECUTE("check_tree", test_rb_tree(tree->root););
  return element;