38
32
#define HP_MIN_RECORDS_IN_BLOCK 16
39
33
#define HP_MAX_RECORDS_IN_BLOCK 8192
41
#define CHUNK_STATUS_DELETED 0 /* this chunk has been deleted and can be reused */
42
#define CHUNK_STATUS_ACTIVE 1 /* this chunk represents the first part of a live record */
43
#define CHUNK_STATUS_LINKED 2 /* this chunk is a continuation from another chunk (part of chunkset) */
45
35
/* Some extern variables */
47
37
extern LIST *heap_open_list,*heap_share_list;
49
39
#define test_active(info) \
50
40
if (!(info->update & HA_STATE_AKTIV))\
51
{ my_errno=HA_ERR_NO_ACTIVE_RECORD; return(-1); }
41
{ my_errno=HA_ERR_NO_ACTIVE_RECORD; DBUG_RETURN(-1); }
52
42
#define hp_find_hash(A,B) ((HASH_INFO*) hp_find_block((A),(B)))
54
44
/* Find pos for record and update it in info->current_ptr */
55
#define hp_find_record(info,pos) (info)->current_ptr= hp_find_block(&(info)->s->recordspace.block,pos)
57
#define get_chunk_status(info,ptr) (ptr[(info)->offset_status])
59
#define get_chunk_count(info,rec_length) ((rec_length + (info)->chunk_dataspace_length - 1) / (info)->chunk_dataspace_length)
45
#define hp_find_record(info,pos) (info)->current_ptr= hp_find_block(&(info)->s->block,pos)
61
47
typedef struct st_hp_hash_info
63
49
struct st_hp_hash_info *next_key;
64
unsigned char *ptr_to_rec;
73
59
/* Prototypes for intern functions */
75
61
extern HP_SHARE *hp_find_named_heap(const char *name);
76
extern int hp_rectest(HP_INFO *info,const unsigned char *old);
77
extern unsigned char *hp_find_block(HP_BLOCK *info,uint32_t pos);
62
extern int hp_rectest(HP_INFO *info,const uchar *old);
63
extern uchar *hp_find_block(HP_BLOCK *info,ulong pos);
78
64
extern int hp_get_new_block(HP_BLOCK *info, size_t* alloc_length);
79
65
extern void hp_free(HP_SHARE *info);
80
extern unsigned char *hp_free_level(HP_BLOCK *block,uint32_t level,HP_PTRS *pos,
81
unsigned char *last_pos);
66
extern uchar *hp_free_level(HP_BLOCK *block,uint level,HP_PTRS *pos,
82
68
extern int hp_write_key(HP_INFO *info, HP_KEYDEF *keyinfo,
83
const unsigned char *record, unsigned char *recpos);
69
const uchar *record, uchar *recpos);
84
70
extern int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo,
85
const unsigned char *record, unsigned char *recpos);
71
const uchar *record, uchar *recpos);
86
72
extern int hp_rb_delete_key(HP_INFO *info,HP_KEYDEF *keyinfo,
87
const unsigned char *record,unsigned char *recpos,int flag);
73
const uchar *record,uchar *recpos,int flag);
88
74
extern int hp_delete_key(HP_INFO *info,HP_KEYDEF *keyinfo,
89
const unsigned char *record,unsigned char *recpos,int flag);
90
extern HASH_INFO *_heap_find_hash(HP_BLOCK *block,uint32_t pos);
91
extern unsigned char *hp_search(HP_INFO *info,HP_KEYDEF *keyinfo,const unsigned char *key,
93
extern unsigned char *hp_search_next(HP_INFO *info, HP_KEYDEF *keyinfo,
94
const unsigned char *key, HASH_INFO *pos);
95
extern uint32_t hp_hashnr(HP_KEYDEF *keyinfo,const unsigned char *key);
96
extern uint32_t hp_rec_hashnr(HP_KEYDEF *keyinfo,const unsigned char *rec);
97
extern uint32_t hp_mask(uint32_t hashnr,uint32_t buffmax,uint32_t maxlength);
75
const uchar *record,uchar *recpos,int flag);
76
extern HASH_INFO *_heap_find_hash(HP_BLOCK *block,ulong pos);
77
extern uchar *hp_search(HP_INFO *info,HP_KEYDEF *keyinfo,const uchar *key,
79
extern uchar *hp_search_next(HP_INFO *info, HP_KEYDEF *keyinfo,
80
const uchar *key, HASH_INFO *pos);
81
extern ulong hp_hashnr(HP_KEYDEF *keyinfo,const uchar *key);
82
extern ulong hp_rec_hashnr(HP_KEYDEF *keyinfo,const uchar *rec);
83
extern ulong hp_mask(ulong hashnr,ulong buffmax,ulong maxlength);
98
84
extern void hp_movelink(HASH_INFO *pos,HASH_INFO *next_link,
99
85
HASH_INFO *newlink);
100
extern int hp_rec_key_cmp(HP_KEYDEF *keydef,const unsigned char *rec1,
101
const unsigned char *rec2,
102
bool diff_if_only_endspace_difference);
103
extern int hp_key_cmp(HP_KEYDEF *keydef,const unsigned char *rec,
104
const unsigned char *key);
105
extern void hp_make_key(HP_KEYDEF *keydef,unsigned char *key,const unsigned char *rec);
106
extern uint32_t hp_rb_make_key(HP_KEYDEF *keydef, unsigned char *key,
107
const unsigned char *rec, unsigned char *recpos);
108
extern uint32_t hp_rb_key_length(HP_KEYDEF *keydef, const unsigned char *key);
109
extern uint32_t hp_rb_null_key_length(HP_KEYDEF *keydef, const unsigned char *key);
110
extern uint32_t hp_rb_var_key_length(HP_KEYDEF *keydef, const unsigned char *key);
111
extern bool hp_if_null_in_key(HP_KEYDEF *keyinfo, const unsigned char *record);
86
extern int hp_rec_key_cmp(HP_KEYDEF *keydef,const uchar *rec1,
88
my_bool diff_if_only_endspace_difference);
89
extern int hp_key_cmp(HP_KEYDEF *keydef,const uchar *rec,
91
extern void hp_make_key(HP_KEYDEF *keydef,uchar *key,const uchar *rec);
92
extern uint hp_rb_make_key(HP_KEYDEF *keydef, uchar *key,
93
const uchar *rec, uchar *recpos);
94
extern uint hp_rb_key_length(HP_KEYDEF *keydef, const uchar *key);
95
extern uint hp_rb_null_key_length(HP_KEYDEF *keydef, const uchar *key);
96
extern uint hp_rb_var_key_length(HP_KEYDEF *keydef, const uchar *key);
97
extern my_bool hp_if_null_in_key(HP_KEYDEF *keyinfo, const uchar *record);
112
98
extern int hp_close(register HP_INFO *info);
113
99
extern void hp_clear(HP_SHARE *info);
114
100
extern void hp_clear_keys(HP_SHARE *info);
115
extern uint32_t hp_rb_pack_key(HP_KEYDEF *keydef, unsigned char *key, const unsigned char *old,
101
extern uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
116
102
key_part_map keypart_map);
118
/* Chunkset management (alloc/free/encode/decode) functions */
120
extern unsigned char *hp_allocate_chunkset(HP_DATASPACE *info, uint32_t chunk_count);
121
extern int hp_reallocate_chunkset(HP_DATASPACE *info, uint32_t chunk_count, unsigned char* pos);
122
extern void hp_free_chunks(HP_DATASPACE *info, unsigned char *pos);
123
extern void hp_clear_dataspace(HP_DATASPACE *info);
125
extern uint32_t hp_get_encoded_data_length(HP_SHARE *info, const unsigned char *record, uint32_t *chunk_count);
126
extern void hp_copy_record_data_to_chunkset(HP_SHARE *info, const unsigned char *record, unsigned char *pos);
127
extern void hp_extract_record(HP_SHARE *info, unsigned char *record, const unsigned char *pos);
128
extern uint32_t hp_process_record_data_to_chunkset(HP_SHARE *info, const unsigned char *record, unsigned char *pos, uint32_t is_compare);
132
103
extern pthread_mutex_t THR_LOCK_heap;
138
#endif /* HEAPDEF_H */