~drizzle-trunk/drizzle/development

1749.3.3 by Brian Aker
Remove another layer of dead code in heap.
1
/* 
2
  Copyright (C) Brian Aker
3
    Copyright (C) 2000,2004 MySQL AB
1 by brian
clean slate
4
5
   This program is free software; you can redistribute it and/or modify
6
   it under the terms of the GNU General Public License as published by
7
   the Free Software Foundation; version 2 of the License.
8
9
   This program is distributed in the hope that it will be useful,
10
   but WITHOUT ANY WARRANTY; without even the implied warranty of
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
   GNU General Public License for more details.
13
14
   You should have received a copy of the GNU General Public License
15
   along with this program; if not, write to the Free Software
1802.10.2 by Monty Taylor
Update all of the copyright headers to include the correct address.
16
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
1 by brian
clean slate
17
18
/* This file should be included when using heap_database_functions */
19
/* Author: Michael Widenius */
20
1758.2.2 by patrick crews
Fixed issues that were breaking make distcheck. IFDEF's were using PLUGIN_HEAP vs. PLUGIN MEMORY
21
#ifndef PLUGIN_MEMORY_HEAP_H
22
#define PLUGIN_MEMORY_HEAP_H
1122.2.10 by Monty Taylor
Fixed all of the include guards.
23
243.1.11 by Jay Pipes
* Added include guards in a couple places, and removed unecessary
24
#include <drizzled/base.h>
543 by Monty Taylor
Renamed drizzle_common again. Removed sql_common. (empty)
25
#include <drizzled/common.h>
1241.9.64 by Monty Taylor
Moved remaining non-public portions of mysys and mystrings to drizzled/internal.
26
#include "drizzled/internal/my_pthread.h"
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
27
#include <drizzled/thr_lock.h>
1 by brian
clean slate
28
992.1.25 by Monty Taylor
Moved myisam to new plugin system.
29
#include <plugin/myisam/my_handler.h>
1410.3.4 by Djellel E. Difallah
update references to old my_'s
30
#include "drizzled/tree.h"
1 by brian
clean slate
31
1707.1.3 by Brian Aker
Switch to using vector.
32
#include <vector>
33
1 by brian
clean slate
34
	/* defines used by heap-funktions */
35
36
#define HP_MAX_LEVELS	4		/* 128^5 records is enough */
37
#define HP_PTRS_IN_NOD	128
38
39
	/* struct used with heap_funktions */
40
41
typedef struct st_heapinfo		/* Struct from heap_info */
42
{
291 by Brian Aker
Head ulong conversion.
43
  uint32_t records;			/* Records in database */
44
  uint32_t deleted;			/* Deleted records in database */
45
  uint32_t max_records;
151 by Brian Aker
Ulonglong to uint64_t
46
  uint64_t data_length;
47
  uint64_t index_length;
482 by Brian Aker
Remove uint.
48
  uint32_t reclength;			/* Length of one record */
1 by brian
clean slate
49
  int errkey;
151 by Brian Aker
Ulonglong to uint64_t
50
  uint64_t auto_increment;
1697.2.2 by Brian Aker
Encapsulate some of heap.
51
52
  st_heapinfo():
53
    records(0),
54
    deleted(0),
55
    max_records(),
56
    data_length(0),
57
    index_length(0),
58
    reclength(0),
59
    errkey(0),
60
    auto_increment(0)
61
  { }
62
1 by brian
clean slate
63
} HEAPINFO;
64
65
66
	/* Structs used by heap-database-handler */
67
68
typedef struct st_heap_ptrs
69
{
481 by Brian Aker
Remove all of uchar.
70
  unsigned char *blocks[HP_PTRS_IN_NOD];		/* pointers to HP_PTRS or records */
1 by brian
clean slate
71
} HP_PTRS;
72
73
struct st_level_info
74
{
75
  /* Number of unused slots in *last_blocks HP_PTRS block (0 for 0th level) */
482 by Brian Aker
Remove uint.
76
  uint32_t free_ptrs_in_block;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
77
1 by brian
clean slate
78
  /*
79
    Maximum number of records that can be 'contained' inside of each element
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
80
    of last_blocks array. For level 0 - 1, for level 1 - HP_PTRS_IN_NOD, for
1 by brian
clean slate
81
    level 2 - HP_PTRS_IN_NOD^2 and so forth.
82
  */
291 by Brian Aker
Head ulong conversion.
83
  uint32_t records_under_level;
1 by brian
clean slate
84
85
  /*
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
86
    Ptr to last allocated HP_PTRS (or records buffer for level 0) on this
1 by brian
clean slate
87
    level.
88
  */
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
89
  HP_PTRS *last_blocks;
1697.2.2 by Brian Aker
Encapsulate some of heap.
90
91
  st_level_info():
92
    free_ptrs_in_block(0),
93
    records_under_level(0),
94
    last_blocks(0)
95
  { }
1 by brian
clean slate
96
};
97
98
99
/*
100
  Heap table records and hash index entries are stored in HP_BLOCKs.
101
  HP_BLOCK is used as a 'growable array' of fixed-size records. Size of record
102
  is recbuffer bytes.
103
  The internal representation is as follows:
104
  HP_BLOCK is a hierarchical structure of 'blocks'.
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
105
  A block at level 0 is an array records_in_block records.
106
  A block at higher level is an HP_PTRS structure with pointers to blocks at
1 by brian
clean slate
107
  lower levels.
108
  At the highest level there is one top block. It is stored in HP_BLOCK::root.
109
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
110
  See hp_find_block for a description of how record pointer is obtained from
1 by brian
clean slate
111
  its index.
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
112
  See hp_get_new_block
1 by brian
clean slate
113
*/
114
115
typedef struct st_heap_block
116
{
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
117
  HP_PTRS *root;                        /* Top-level block */
1 by brian
clean slate
118
  struct st_level_info level_info[HP_MAX_LEVELS+1];
482 by Brian Aker
Remove uint.
119
  uint32_t levels;                          /* number of used levels */
120
  uint32_t records_in_block;		/* Records in one heap-block */
121
  uint32_t recbuffer;			/* Length of one saved record */
291 by Brian Aker
Head ulong conversion.
122
  uint32_t last_allocated; /* number of records there is allocated space for */
1697.2.2 by Brian Aker
Encapsulate some of heap.
123
124
  st_heap_block() :
125
    root(NULL),
126
    levels(0),
127
    records_in_block(0),
128
    recbuffer(0),
129
    last_allocated(0)
130
  {
131
  }
1 by brian
clean slate
132
} HP_BLOCK;
133
134
struct st_heap_info;			/* For referense */
135
136
typedef struct st_hp_keydef		/* Key definition with open */
137
{
482 by Brian Aker
Remove uint.
138
  uint32_t flag;				/* HA_NOSAME | HA_NULL_PART_KEY */
139
  uint32_t keysegs;				/* Number of key-segment */
140
  uint32_t length;				/* Length of key (automatic) */
1 by brian
clean slate
141
  HA_KEYSEG *seg;
142
  HP_BLOCK block;			/* Where keys are saved */
143
  /*
144
    Number of buckets used in hash table. Used only to provide
145
    #records estimates for heap key scans.
146
  */
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
147
  drizzled::ha_rows hash_buckets;
1 by brian
clean slate
148
} HP_KEYDEF;
149
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
150
typedef struct st_heap_dataspace   /* control data for data space */
151
{
152
  HP_BLOCK block;
482 by Brian Aker
Remove uint.
153
  uint32_t chunk_count;             /* Total chunks ever allocated in this dataspace */
154
  uint32_t del_chunk_count;         /* Deleted chunks count */
481 by Brian Aker
Remove all of uchar.
155
  unsigned char *del_link;               /* Link to last deleted chunk */
482 by Brian Aker
Remove uint.
156
  uint32_t chunk_length;            /* Total length of one chunk */
157
  uint32_t chunk_dataspace_length;  /* Length of payload that will be placed into one chunk */
158
  uint32_t offset_status;           /* Offset of the status flag relative to the chunk start */
159
  uint32_t offset_link;             /* Offset of the linking pointer relative to the chunk start */
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
160
  uint64_t total_data_length;  /* Total size allocated within this data space */
1697.2.2 by Brian Aker
Encapsulate some of heap.
161
162
  st_heap_dataspace() :
163
    chunk_count(0),
164
    del_chunk_count(0),
165
    del_link(0),
166
    chunk_length(0),
167
    chunk_dataspace_length(0),
168
    offset_status(0),
169
    offset_link(0),
170
    total_data_length(0)
171
  { }
172
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
173
} HP_DATASPACE;
174
175
1 by brian
clean slate
176
typedef struct st_heap_share
177
{
178
  HP_KEYDEF  *keydef;
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
179
  HP_DATASPACE recordspace;  /* Describes "block", which contains actual records */
180
291 by Brian Aker
Head ulong conversion.
181
  uint32_t min_records,max_records;	/* Params to open */
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
182
  uint64_t index_length,max_table_size;
482 by Brian Aker
Remove uint.
183
  uint32_t key_stat_version;                /* version to indicate insert/delete */
184
  uint32_t records;             /* Actual record (row) count */
185
  uint32_t blength;                                     /* used_chunk_count rounded up to 2^n */
186
  uint32_t fixed_data_length;     /* Length of record's fixed part, which contains keys and always fits into the first chunk */
187
  uint32_t fixed_column_count;  /* Number of columns stored in fixed_data_length */
188
  uint32_t changed;
189
  uint32_t keys,max_key_length;
190
  uint32_t column_count;
191
  uint32_t currently_disabled_keys;    /* saved value from "keys" when disabled */
192
  uint32_t open_count;
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
193
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
194
1707.1.2 by Brian Aker
std::string usage for name, remove strdup.
195
  std::string name;			/* Name of "memory-file" */
280 by Brian Aker
Removed my_bool from heap engine.
196
  bool delete_on_close;
482 by Brian Aker
Remove uint.
197
  uint32_t auto_key;
198
  uint32_t auto_key_type;			/* real type of the auto key segment */
151 by Brian Aker
Ulonglong to uint64_t
199
  uint64_t auto_increment;
1697.2.2 by Brian Aker
Encapsulate some of heap.
200
201
  st_heap_share() :
202
    keydef(0),
203
    min_records(0),
204
    max_records(0),
205
    index_length(0),
206
    max_table_size(0),
207
    key_stat_version(0),
208
    records(0),
209
    blength(0),
210
    fixed_data_length(0),
211
    fixed_column_count(0),
212
    changed(0),
213
    keys(0),
214
    max_key_length(0),
215
    column_count(0),
216
    currently_disabled_keys(0),
217
    open_count(0),
218
    delete_on_close(0),
219
    auto_key(0),
220
    auto_key_type(0),
221
    auto_increment(0)
222
  { }
223
1 by brian
clean slate
224
} HP_SHARE;
225
226
struct st_hp_hash_info;
227
228
typedef struct st_heap_info
229
{
1697.2.1 by Brian Aker
Encapsulate the internal share for HEAP.
230
private:
1 by brian
clean slate
231
  HP_SHARE *s;
1697.2.1 by Brian Aker
Encapsulate the internal share for HEAP.
232
public:
233
234
  HP_SHARE *getShare()
235
  {
236
    return s;
237
  }
238
239
  void setShare(HP_SHARE *s_arg)
240
  {
241
    s= s_arg;
242
  }
243
481 by Brian Aker
Remove all of uchar.
244
  unsigned char *current_ptr;
1 by brian
clean slate
245
  struct st_hp_hash_info *current_hash_ptr;
291 by Brian Aker
Head ulong conversion.
246
  uint32_t current_record,next_block;
1 by brian
clean slate
247
  int lastinx,errkey;
248
  int  mode;				/* Mode of file (READONLY..) */
482 by Brian Aker
Remove uint.
249
  uint32_t opt_flag,update;
1707.1.3 by Brian Aker
Switch to using vector.
250
  std::vector <unsigned char> lastkey;			/* Last used key with rkey */
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
251
  enum drizzled::ha_rkey_function last_find_flag;
482 by Brian Aker
Remove uint.
252
  uint32_t lastkey_len;
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
253
  drizzled::THR_LOCK_DATA lock;
1 by brian
clean slate
254
} HP_INFO;
255
256
257
typedef struct st_heap_create_info
258
{
482 by Brian Aker
Remove uint.
259
  uint32_t auto_key;                        /* keynr [1 - maxkey] for auto key */
260
  uint32_t auto_key_type;
261
  uint32_t max_chunk_size;
151 by Brian Aker
Ulonglong to uint64_t
262
  uint64_t max_table_size;
263
  uint64_t auto_increment;
280 by Brian Aker
Removed my_bool from heap engine.
264
  bool with_auto_increment;
265
  bool internal_table;
1 by brian
clean slate
266
} HP_CREATE_INFO;
267
268
	/* Prototypes for heap-functions */
269
270
extern HP_INFO *heap_open(const char *name, int mode);
271
extern HP_INFO *heap_open_from_share(HP_SHARE *share, int mode);
272
extern HP_INFO *heap_open_from_share_and_register(HP_SHARE *share, int mode);
273
extern int heap_close(HP_INFO *info);
481 by Brian Aker
Remove all of uchar.
274
extern int heap_write(HP_INFO *info,const unsigned char *record);
275
extern int heap_update(HP_INFO *info,const unsigned char *old_record,const unsigned char *new_record);
276
extern int heap_rrnd(HP_INFO *info,unsigned char *buf,unsigned char *pos);
1 by brian
clean slate
277
extern int heap_scan_init(HP_INFO *info);
481 by Brian Aker
Remove all of uchar.
278
extern int heap_scan(register HP_INFO *info, unsigned char *record);
279
extern int heap_delete(HP_INFO *info,const unsigned char *buff);
1 by brian
clean slate
280
extern int heap_info(HP_INFO *info,HEAPINFO *x,int flag);
482 by Brian Aker
Remove uint.
281
extern int heap_create(const char *name, uint32_t keys, HP_KEYDEF *keydef,
1749.3.5 by Brian Aker
Remove columndef (special case to build columndef (which is no longer
282
           uint32_t columns, 
283
           uint32_t key_part_size,
482 by Brian Aker
Remove uint.
284
           uint32_t reclength, uint32_t keys_memory_size,
291 by Brian Aker
Head ulong conversion.
285
           uint32_t max_records, uint32_t min_records,
244.1.1 by Harrison Fisk
Port Ebay/Google memory storage engine variable width columns.
286
           HP_CREATE_INFO *create_info, HP_SHARE **share);
287
1 by brian
clean slate
288
extern int heap_delete_table(const char *name);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
289
extern int heap_extra(HP_INFO *info,enum drizzled::ha_extra_function function);
1 by brian
clean slate
290
extern int heap_reset(HP_INFO *info);
291
extern int heap_rename(const char *old_name,const char *new_name);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
292
extern int heap_panic(enum drizzled::ha_panic_function flag);
481 by Brian Aker
Remove all of uchar.
293
extern int heap_rsame(HP_INFO *info,unsigned char *record,int inx);
294
extern int heap_rnext(HP_INFO *info,unsigned char *record);
295
extern int heap_rprev(HP_INFO *info,unsigned char *record);
296
extern int heap_rfirst(HP_INFO *info,unsigned char *record,int inx);
297
extern int heap_rlast(HP_INFO *info,unsigned char *record,int inx);
1 by brian
clean slate
298
extern void heap_clear(HP_INFO *info);
299
extern int heap_disable_indexes(HP_INFO *info);
300
extern int heap_enable_indexes(HP_INFO *info);
301
extern int heap_indexes_are_disabled(HP_INFO *info);
481 by Brian Aker
Remove all of uchar.
302
extern void heap_update_auto_increment(HP_INFO *info, const unsigned char *record);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
303
int hp_panic(enum drizzled::ha_panic_function flag);
481 by Brian Aker
Remove all of uchar.
304
int heap_rkey(HP_INFO *info, unsigned char *record, int inx, const unsigned char *key,
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
305
              drizzled::key_part_map keypart_map,
306
              enum drizzled::ha_rkey_function find_flag);
481 by Brian Aker
Remove all of uchar.
307
extern unsigned char * heap_find(HP_INFO *info,int inx,const unsigned char *key);
308
extern unsigned char *heap_position(HP_INFO *info);
1 by brian
clean slate
309
310
/* The following is for programs that uses the old HEAP interface where
481 by Brian Aker
Remove all of uchar.
311
   pointer to rows where a long instead of a (unsigned char*).
1 by brian
clean slate
312
*/
313
481 by Brian Aker
Remove all of uchar.
314
typedef unsigned char *HEAP_PTR;
1 by brian
clean slate
315
1758.2.2 by patrick crews
Fixed issues that were breaking make distcheck. IFDEF's were using PLUGIN_HEAP vs. PLUGIN MEMORY
316
#endif /* PLUGIN_MEMORY_HEAP_H */