Commit 12a640e2 authored by unknown's avatar unknown

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
...@@ -367,6 +367,7 @@ enum ha_base_keytype { ...@@ -367,6 +367,7 @@ enum ha_base_keytype {
#define HA_STATE_EXTEND_BLOCK 2048 #define HA_STATE_EXTEND_BLOCK 2048
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same was called */ #define HA_STATE_RNEXT_SAME 4096 /* rnext_same was called */
/* myisampack expects no more than 32 field types. */
enum en_fieldtype { enum en_fieldtype {
FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE, FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE,
FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO, FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO,
......
...@@ -416,8 +416,19 @@ static uint find_longest_bitstream(uint16 *table, uint16 *end) ...@@ -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) int _mi_read_pack_record(MI_INFO *info, my_off_t filepos, byte *buf)
{ {
......
This diff is collapsed.
...@@ -263,6 +263,9 @@ TREE_ELEMENT *tree_insert(TREE *tree, void *key, uint key_size, ...@@ -263,6 +263,9 @@ TREE_ELEMENT *tree_insert(TREE *tree, void *key, uint key_size,
if (tree->flag & TREE_NO_DUPS) if (tree->flag & TREE_NO_DUPS)
return(NULL); return(NULL);
element->count++; element->count++;
/* Avoid a wrap over of the count. */
if (! element->count)
element->count--;
} }
DBUG_EXECUTE("check_tree", test_rb_tree(tree->root);); DBUG_EXECUTE("check_tree", test_rb_tree(tree->root););
return element; return element;
......
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