12
12
You should have received a copy of the GNU General Public License
13
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
16
16
/* This file is included in all heap-files */
17
#ifndef PLUGIN_MEMORY_HEAP_PRIV_H
18
#define PLUGIN_MEMORY_HEAP_PRIV_H
20
#include <drizzled/global.h>
21
21
#include <drizzled/base.h>
23
#include "drizzled/internal/my_sys.h"
24
#include "drizzled/charset_info.h"
25
#include "drizzled/internal/my_pthread.h"
23
#include <mysys/my_sys.h>
24
#include <mystrings/m_ctype.h>
25
#include <mysys/my_pthread.h>
26
26
#include "heap.h" /* Structs & some defines */
27
#include "drizzled/tree.h"
30
#include <boost/thread/mutex.hpp>
27
#include <mysys/my_tree.h>
33
30
When allocating keys /rows in the internal block structure, do it
37
34
as possible and keep memory consumption down.
41
#define HP_MIN_RECORDS_IN_BLOCK 16
42
#define HP_MAX_RECORDS_IN_BLOCK 8192
40
44
#define CHUNK_STATUS_DELETED 0 /* this chunk has been deleted and can be reused */
41
45
#define CHUNK_STATUS_ACTIVE 1 /* this chunk represents the first part of a live record */
42
46
#define CHUNK_STATUS_LINKED 2 /* this chunk is a continuation from another chunk (part of chunkset) */
44
48
/* Some extern variables */
46
extern std::list<HP_SHARE *> heap_share_list;
47
extern std::list<HP_INFO *> heap_open_list;
50
extern LIST *heap_open_list,*heap_share_list;
49
52
#define test_active(info) \
50
53
if (!(info->update & HA_STATE_AKTIV))\
51
{ errno=HA_ERR_NO_ACTIVE_RECORD; return(-1); }
54
{ my_errno=HA_ERR_NO_ACTIVE_RECORD; return(-1); }
52
55
#define hp_find_hash(A,B) ((HASH_INFO*) hp_find_block((A),(B)))
54
57
/* 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)->getShare()->recordspace.block,pos)
58
#define hp_find_record(info,pos) (info)->current_ptr= hp_find_block(&(info)->s->recordspace.block,pos)
57
60
#define get_chunk_status(info,ptr) (ptr[(info)->offset_status])
72
81
extern int hp_get_new_block(HP_BLOCK *info, size_t* alloc_length);
73
82
extern void hp_free(HP_SHARE *info);
74
83
extern unsigned char *hp_free_level(HP_BLOCK *block,uint32_t level,HP_PTRS *pos,
75
unsigned char *last_pos);
84
unsigned char *last_pos);
76
85
extern int hp_write_key(HP_INFO *info, HP_KEYDEF *keyinfo,
77
86
const unsigned char *record, unsigned char *recpos);
87
extern int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo,
88
const unsigned char *record, unsigned char *recpos);
89
extern int hp_rb_delete_key(HP_INFO *info,HP_KEYDEF *keyinfo,
90
const unsigned char *record,unsigned char *recpos,int flag);
78
91
extern int hp_delete_key(HP_INFO *info,HP_KEYDEF *keyinfo,
79
92
const unsigned char *record,unsigned char *recpos,int flag);
80
93
extern HASH_INFO *_heap_find_hash(HP_BLOCK *block,uint32_t pos);
82
95
uint32_t nextflag);
83
96
extern unsigned char *hp_search_next(HP_INFO *info, HP_KEYDEF *keyinfo,
84
97
const unsigned char *key, HASH_INFO *pos);
98
extern uint32_t hp_hashnr(HP_KEYDEF *keyinfo,const unsigned char *key);
85
99
extern uint32_t hp_rec_hashnr(HP_KEYDEF *keyinfo,const unsigned char *rec);
86
100
extern uint32_t hp_mask(uint32_t hashnr,uint32_t buffmax,uint32_t maxlength);
87
101
extern void hp_movelink(HASH_INFO *pos,HASH_INFO *next_link,
89
103
extern int hp_rec_key_cmp(HP_KEYDEF *keydef,const unsigned char *rec1,
90
104
const unsigned char *rec2,
91
105
bool diff_if_only_endspace_difference);
106
extern int hp_key_cmp(HP_KEYDEF *keydef,const unsigned char *rec,
107
const unsigned char *key);
92
108
extern void hp_make_key(HP_KEYDEF *keydef,unsigned char *key,const unsigned char *rec);
109
extern uint32_t hp_rb_make_key(HP_KEYDEF *keydef, unsigned char *key,
110
const unsigned char *rec, unsigned char *recpos);
111
extern uint32_t hp_rb_key_length(HP_KEYDEF *keydef, const unsigned char *key);
112
extern uint32_t hp_rb_null_key_length(HP_KEYDEF *keydef, const unsigned char *key);
113
extern uint32_t hp_rb_var_key_length(HP_KEYDEF *keydef, const unsigned char *key);
93
114
extern bool hp_if_null_in_key(HP_KEYDEF *keyinfo, const unsigned char *record);
94
extern int hp_close(HP_INFO *info);
115
extern int hp_close(register HP_INFO *info);
95
116
extern void hp_clear(HP_SHARE *info);
117
extern void hp_clear_keys(HP_SHARE *info);
118
extern uint32_t hp_rb_pack_key(HP_KEYDEF *keydef, unsigned char *key, const unsigned char *old,
119
key_part_map keypart_map);
97
121
/* Chunkset management (alloc/free/encode/decode) functions */
99
123
extern unsigned char *hp_allocate_chunkset(HP_DATASPACE *info, uint32_t chunk_count);
124
extern int hp_reallocate_chunkset(HP_DATASPACE *info, uint32_t chunk_count, unsigned char* pos);
100
125
extern void hp_free_chunks(HP_DATASPACE *info, unsigned char *pos);
101
126
extern void hp_clear_dataspace(HP_DATASPACE *info);
103
128
extern uint32_t hp_get_encoded_data_length(HP_SHARE *info, const unsigned char *record, uint32_t *chunk_count);
104
129
extern void hp_copy_record_data_to_chunkset(HP_SHARE *info, const unsigned char *record, unsigned char *pos);
105
130
extern void hp_extract_record(HP_SHARE *info, unsigned char *record, const unsigned char *pos);
106
extern bool hp_compare_record_data_to_chunkset(HP_SHARE *info, const unsigned char *record, unsigned char *pos);
108
extern boost::mutex THR_LOCK_heap;
110
#endif /* PLUGIN_MEMORY_HEAP_PRIV_H */
131
extern uint32_t hp_process_record_data_to_chunkset(HP_SHARE *info, const unsigned char *record, unsigned char *pos, uint32_t is_compare);
135
extern pthread_mutex_t THR_LOCK_heap;
141
#endif /* HEAPDEF_H */