~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
13
   along with this program; if not, write to the Free Software
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
16
/* This file should be included when using myisam_funktions */
17
18
#ifndef _myisam_h
19
#define _myisam_h
20
#ifdef	__cplusplus
21
extern "C" {
22
#endif
23
212.5.39 by Monty Taylor
Phew. Moved my_base and my_global.
24
#include <drizzled/base.h>
1 by brian
clean slate
25
#ifndef _m_ctype_h
26
#include <m_ctype.h>
27
#endif
28
#ifndef _keycache_h
29
#include "keycache.h"
30
#endif
212.5.27 by Monty Taylor
Moved my_handler to mysys.
31
#include <mysys/my_handler.h>
212.5.10 by Monty Taylor
Moved drizzle/plugin*h to drizzled
32
#include <drizzled/plugin.h>
1 by brian
clean slate
33
34
/*
35
  Limit max keys according to HA_MAX_POSSIBLE_KEY
36
*/
37
38
#if MAX_INDEXES > HA_MAX_POSSIBLE_KEY
39
#define MI_MAX_KEY                  HA_MAX_POSSIBLE_KEY /* Max allowed keys */
40
#else
41
#define MI_MAX_KEY                  MAX_INDEXES         /* Max allowed keys */
42
#endif
43
44
/*
45
  The following defines can be increased if necessary.
46
  But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and MI_MAX_KEY_LENGTH.
47
*/
48
#define MI_MAX_KEY_LENGTH           1332            /* Max length in bytes */
49
#define MI_MAX_KEY_SEG              16              /* Max segments for key */
50
51
#define MI_MAX_POSSIBLE_KEY_BUFF (MI_MAX_KEY_LENGTH + 6 + 6) /* For mi_check */
52
53
#define MI_MAX_KEY_BUFF  (MI_MAX_KEY_LENGTH+MI_MAX_KEY_SEG*6+8+8)
54
#define MI_MAX_MSG_BUF      1024 /* used in CHECK TABLE, REPAIR TABLE */
55
#define MI_NAME_IEXT	".MYI"
56
#define MI_NAME_DEXT	".MYD"
57
/* Max extra space to use when sorting keys */
58
#define MI_MAX_TEMP_LENGTH	2*1024L*1024L*1024L
59
60
/* Possible values for myisam_block_size (must be power of 2) */
61
#define MI_KEY_BLOCK_LENGTH	1024	/* default key block length */
62
#define MI_MIN_KEY_BLOCK_LENGTH	1024	/* Min key block length */
63
#define MI_MAX_KEY_BLOCK_LENGTH	16384
64
65
/*
66
  In the following macros '_keyno_' is 0 .. keys-1.
67
  If there can be more keys than bits in the key_map, the highest bit
68
  is for all upper keys. They cannot be switched individually.
69
  This means that clearing of high keys is ignored, setting one high key
70
  sets all high keys.
71
*/
72
#define MI_KEYMAP_BITS      (8 * SIZEOF_LONG_LONG)
80.1.1 by Brian Aker
LL() cleanup
73
#define MI_KEYMAP_HIGH_MASK (1ULL << (MI_KEYMAP_BITS - 1))
1 by brian
clean slate
74
#define mi_get_mask_all_keys_active(_keys_) \
75
                            (((_keys_) < MI_KEYMAP_BITS) ? \
80.1.1 by Brian Aker
LL() cleanup
76
                             ((1ULL << (_keys_)) - 1ULL) : \
77
                             (~ 0ULL))
1 by brian
clean slate
78
79
#if MI_MAX_KEY > MI_KEYMAP_BITS
80
81
#define mi_is_key_active(_keymap_,_keyno_) \
82
                            (((_keyno_) < MI_KEYMAP_BITS) ? \
80.1.1 by Brian Aker
LL() cleanup
83
                             test((_keymap_) & (1ULL << (_keyno_))) : \
1 by brian
clean slate
84
                             test((_keymap_) & MI_KEYMAP_HIGH_MASK))
85
#define mi_set_key_active(_keymap_,_keyno_) \
86
                            (_keymap_)|= (((_keyno_) < MI_KEYMAP_BITS) ? \
80.1.1 by Brian Aker
LL() cleanup
87
                                          (1ULL << (_keyno_)) : \
1 by brian
clean slate
88
                                          MI_KEYMAP_HIGH_MASK)
89
#define mi_clear_key_active(_keymap_,_keyno_) \
90
                            (_keymap_)&= (((_keyno_) < MI_KEYMAP_BITS) ? \
80.1.1 by Brian Aker
LL() cleanup
91
                                          (~ (1ULL << (_keyno_))) : \
92
                                          (~ (0ULL)) /*ignore*/ )
1 by brian
clean slate
93
94
#else
95
96
#define mi_is_key_active(_keymap_,_keyno_) \
80.1.1 by Brian Aker
LL() cleanup
97
                            test((_keymap_) & (1ULL << (_keyno_)))
1 by brian
clean slate
98
#define mi_set_key_active(_keymap_,_keyno_) \
80.1.1 by Brian Aker
LL() cleanup
99
                            (_keymap_)|= (1ULL << (_keyno_))
1 by brian
clean slate
100
#define mi_clear_key_active(_keymap_,_keyno_) \
80.1.1 by Brian Aker
LL() cleanup
101
                            (_keymap_)&= (~ (1ULL << (_keyno_)))
1 by brian
clean slate
102
103
#endif
104
105
#define mi_is_any_key_active(_keymap_) \
106
                            test((_keymap_))
107
#define mi_is_all_keys_active(_keymap_,_keys_) \
108
                            ((_keymap_) == mi_get_mask_all_keys_active(_keys_))
109
#define mi_set_all_keys_active(_keymap_,_keys_) \
110
                            (_keymap_)= mi_get_mask_all_keys_active(_keys_)
111
#define mi_clear_all_keys_active(_keymap_) \
112
                            (_keymap_)= 0
113
#define mi_intersect_keys_active(_to_,_from_) \
114
                            (_to_)&= (_from_)
115
#define mi_is_any_intersect_keys_active(_keymap1_,_keys_,_keymap2_) \
116
                            ((_keymap1_) & (_keymap2_) & \
117
                             mi_get_mask_all_keys_active(_keys_))
118
#define mi_copy_keys_active(_to_,_maxkeys_,_from_) \
119
                            (_to_)= (mi_get_mask_all_keys_active(_maxkeys_) & \
120
                                     (_from_))
121
122
	/* Param to/from mi_status */
123
124
typedef struct st_mi_isaminfo		/* Struct from h_info */
125
{
126
  ha_rows records;			/* Records in database */
127
  ha_rows deleted;			/* Deleted records in database */
128
  my_off_t recpos;			/* Pos for last used record */
129
  my_off_t newrecpos;			/* Pos if we write new record */
130
  my_off_t dupp_key_pos;		/* Position to record with dupp key */
131
  my_off_t data_file_length,		/* Length of data file */
132
           max_data_file_length,
133
           index_file_length,
134
           max_index_file_length,
135
           delete_length;
136
  ulong reclength;			/* Recordlength */
137
  ulong mean_reclength;			/* Mean recordlength (if packed) */
151 by Brian Aker
Ulonglong to uint64_t
138
  uint64_t auto_increment;
139
  uint64_t key_map;			/* Which keys are used */
1 by brian
clean slate
140
  char  *data_file_name, *index_file_name;
141
  uint  keys;				/* Number of keys in use */
142
  uint	options;			/* HA_OPTION_... used */
143
  int	errkey,				/* With key was dupplicated on err */
144
	sortkey;			/* clustered by this key */
145
  File	filenr;				/* (uniq) filenr for datafile */
146
  time_t create_time;			/* When table was created */
147
  time_t check_time;
148
  time_t update_time;
149
  uint  reflength;
150
  ulong record_offset;
151
  ulong *rec_per_key;			/* for sql optimizing */
152
} MI_ISAMINFO;
153
154
155
typedef struct st_mi_create_info
156
{
157
  const char *index_file_name, *data_file_name;	/* If using symlinks */
158
  ha_rows max_rows;
159
  ha_rows reloc_rows;
151 by Brian Aker
Ulonglong to uint64_t
160
  uint64_t auto_increment;
161
  uint64_t data_file_length;
162
  uint64_t key_file_length;
1 by brian
clean slate
163
  uint old_options;
206 by Brian Aker
Removed final uint dead types.
164
  uint8_t language;
281 by Brian Aker
Converted myisam away from my_bool
165
  bool with_auto_increment;
1 by brian
clean slate
166
} MI_CREATE_INFO;
167
168
struct st_myisam_info;			/* For referense */
169
struct st_mi_isam_share;
170
typedef struct st_myisam_info MI_INFO;
171
struct st_mi_s_param;
172
173
typedef struct st_mi_keydef		/* Key definition with open & info */
174
{
175
  struct st_mi_isam_share *share;       /* Pointer to base (set in mi_open) */
206 by Brian Aker
Removed final uint dead types.
176
  uint16_t keysegs;			/* Number of key-segment */
177
  uint16_t flag;				/* NOSAME, PACK_USED */
1 by brian
clean slate
178
206 by Brian Aker
Removed final uint dead types.
179
  uint8_t  key_alg;			/* BTREE, RTREE */
180
  uint16_t block_length;			/* Length of keyblock (auto) */
181
  uint16_t underflow_block_length;	/* When to execute underflow */
182
  uint16_t keylength;			/* Tot length of keyparts (auto) */
183
  uint16_t minlength;			/* min length of (packed) key (auto) */
184
  uint16_t maxlength;			/* max length of (packed) key (auto) */
185
  uint16_t block_size_index;		/* block_size (auto) */
205 by Brian Aker
uint32 -> uin32_t
186
  uint32_t version;			/* For concurrent read/write */
1 by brian
clean slate
187
188
  HA_KEYSEG *seg,*end;
160.1.2 by mark
remove FTPARSER and last remains of full text search
189
1 by brian
clean slate
190
  int (*bin_search)(struct st_myisam_info *info,struct st_mi_keydef *keyinfo,
191
		    uchar *page,uchar *key,
192
		    uint key_len,uint comp_flag,uchar * *ret_pos,
281 by Brian Aker
Converted myisam away from my_bool
193
		    uchar *buff, bool *was_last_key);
1 by brian
clean slate
194
  uint (*get_key)(struct st_mi_keydef *keyinfo,uint nod_flag,uchar * *page,
195
		  uchar *key);
196
  int (*pack_key)(struct st_mi_keydef *keyinfo,uint nod_flag,uchar *next_key,
197
		  uchar *org_key, uchar *prev_key, uchar *key,
198
		  struct st_mi_s_param *s_temp);
199
  void (*store_key)(struct st_mi_keydef *keyinfo, uchar *key_pos,
200
		    struct st_mi_s_param *s_temp);
201
  int (*ck_insert)(struct st_myisam_info *inf, uint k_nr, uchar *k, uint klen);
202
  int (*ck_delete)(struct st_myisam_info *inf, uint k_nr, uchar *k, uint klen);
203
} MI_KEYDEF;
204
205
206
#define MI_UNIQUE_HASH_LENGTH	4
207
208
typedef struct st_unique_def		/* Segment definition of unique */
209
{
206 by Brian Aker
Removed final uint dead types.
210
  uint16_t keysegs;			/* Number of key-segment */
1 by brian
clean slate
211
  uchar key;				/* Mapped to which key */
206 by Brian Aker
Removed final uint dead types.
212
  uint8_t null_are_equal;
1 by brian
clean slate
213
  HA_KEYSEG *seg,*end;
214
} MI_UNIQUEDEF;
215
216
typedef struct st_mi_decode_tree	/* Decode huff-table */
217
{
206 by Brian Aker
Removed final uint dead types.
218
  uint16_t *table;
1 by brian
clean slate
219
  uint	 quick_table_bits;
220
  uchar	 *intervalls;
221
} MI_DECODE_TREE;
222
223
224
struct st_mi_bit_buff;
225
226
/*
227
  Note that null markers should always be first in a row !
228
  When creating a column, one should only specify:
229
  type, length, null_bit and null_pos
230
*/
231
232
typedef struct st_columndef		/* column information */
233
{
206 by Brian Aker
Removed final uint dead types.
234
  int16_t  type;				/* en_fieldtype */
235
  uint16_t length;			/* length of field */
205 by Brian Aker
uint32 -> uin32_t
236
  uint32_t offset;			/* Offset to position in row */
206 by Brian Aker
Removed final uint dead types.
237
  uint8_t  null_bit;			/* If column may be 0 */
238
  uint16_t null_pos;			/* position for null marker */
1 by brian
clean slate
239
240
#ifndef NOT_PACKED_DATABASES
241
  void (*unpack)(struct st_columndef *rec,struct st_mi_bit_buff *buff,
242
		 uchar *start,uchar *end);
243
  enum en_fieldtype base_type;
244
  uint space_length_bits,pack_type;
245
  MI_DECODE_TREE *huff_tree;
246
#endif
247
} MI_COLUMNDEF;
248
249
250
extern char * myisam_log_filename;		/* Name of logfile */
312 by Brian Aker
Removed global variable calls, cleaned up static.
251
extern uint32_t myisam_block_size;
252
extern uint32_t myisam_concurrent_insert;
147 by Brian Aker
More my_bool conversion. This time the set_var class.
253
extern bool myisam_flush,myisam_delay_key_write,myisam_single_user;
1 by brian
clean slate
254
extern my_off_t myisam_max_temp_length;
312 by Brian Aker
Removed global variable calls, cleaned up static.
255
extern uint32_t myisam_bulk_insert_tree_size, myisam_data_pointer_size;
1 by brian
clean slate
256
257
	/* Prototypes for myisam-functions */
258
259
extern int mi_close(struct st_myisam_info *file);
260
extern int mi_delete(struct st_myisam_info *file,const uchar *buff);
261
extern struct st_myisam_info *mi_open(const char *name,int mode,
262
				      uint wait_if_locked);
263
extern int mi_panic(enum ha_panic_function function);
264
extern int mi_rfirst(struct st_myisam_info *file,uchar *buf,int inx);
265
extern int mi_rkey(MI_INFO *info, uchar *buf, int inx, const uchar *key,
266
                   key_part_map keypart_map, enum ha_rkey_function search_flag);
267
extern int mi_rlast(struct st_myisam_info *file,uchar *buf,int inx);
268
extern int mi_rnext(struct st_myisam_info *file,uchar *buf,int inx);
269
extern int mi_rnext_same(struct st_myisam_info *info, uchar *buf);
270
extern int mi_rprev(struct st_myisam_info *file,uchar *buf,int inx);
271
extern int mi_rrnd(struct st_myisam_info *file,uchar *buf, my_off_t pos);
272
extern int mi_scan_init(struct st_myisam_info *file);
273
extern int mi_scan(struct st_myisam_info *file,uchar *buf);
274
extern int mi_rsame(struct st_myisam_info *file,uchar *record,int inx);
275
extern int mi_rsame_with_pos(struct st_myisam_info *file,uchar *record,
276
			     int inx, my_off_t pos);
277
extern int mi_update(struct st_myisam_info *file,const uchar *old,
278
		     uchar *new_record);
279
extern int mi_write(struct st_myisam_info *file,uchar *buff);
280
extern my_off_t mi_position(struct st_myisam_info *file);
281
extern int mi_status(struct st_myisam_info *info, MI_ISAMINFO *x, uint flag);
282
extern int mi_lock_database(struct st_myisam_info *file,int lock_type);
283
extern int mi_create(const char *name,uint keys,MI_KEYDEF *keydef,
284
		     uint columns, MI_COLUMNDEF *columndef,
285
		     uint uniques, MI_UNIQUEDEF *uniquedef,
286
		     MI_CREATE_INFO *create_info, uint flags);
287
extern int mi_delete_table(const char *name);
288
extern int mi_rename(const char *from, const char *to);
289
extern int mi_extra(struct st_myisam_info *file,
290
		    enum ha_extra_function function,
291
		    void *extra_arg);
292
extern int mi_reset(struct st_myisam_info *file);
293
extern ha_rows mi_records_in_range(MI_INFO *info, int inx,
294
                                   key_range *min_key, key_range *max_key);
295
extern int mi_log(int activate_log);
296
extern int mi_is_changed(struct st_myisam_info *info);
297
extern int mi_delete_all_rows(struct st_myisam_info *info);
298
extern ulong _mi_calc_blob_length(uint length , const uchar *pos);
151 by Brian Aker
Ulonglong to uint64_t
299
extern uint mi_get_pointer_length(uint64_t file_length, uint def);
1 by brian
clean slate
300
301
/* this is used to pass to mysql_myisamchk_table */
302
303
#define   MYISAMCHK_REPAIR 1  /* equivalent to myisamchk -r */
304
#define   MYISAMCHK_VERIFY 2  /* Verify, run repair if failure */
305
306
/*
307
  Definitions needed for myisamchk.c
308
309
  Entries marked as "QQ to be removed" are NOT used to
310
  pass check/repair options to mi_check.c. They are used
311
  internally by myisamchk.c or/and ha_myisam.cc and should NOT
312
  be stored together with other flags. They should be removed
313
  from the following list to make addition of new flags possible.
314
*/
315
316
#define T_AUTO_INC              1
317
#define T_AUTO_REPAIR           2              /* QQ to be removed */
318
#define T_BACKUP_DATA           4
319
#define T_CALC_CHECKSUM         8
320
#define T_CHECK                 16             /* QQ to be removed */
321
#define T_CHECK_ONLY_CHANGED    32             /* QQ to be removed */
322
#define T_CREATE_MISSING_KEYS   64
323
#define T_DESCRIPT              128
324
#define T_DONT_CHECK_CHECKSUM   256
325
#define T_EXTEND                512
326
#define T_FAST                  (1L << 10)     /* QQ to be removed */
327
#define T_FORCE_CREATE          (1L << 11)     /* QQ to be removed */
328
#define T_FORCE_UNIQUENESS      (1L << 12)
329
#define T_INFO                  (1L << 13)
330
#define T_MEDIUM                (1L << 14)
331
#define T_QUICK                 (1L << 15)     /* QQ to be removed */
332
#define T_READONLY              (1L << 16)     /* QQ to be removed */
333
#define T_REP                   (1L << 17)
334
#define T_REP_BY_SORT           (1L << 18)     /* QQ to be removed */
335
#define T_REP_PARALLEL          (1L << 19)     /* QQ to be removed */
336
#define T_RETRY_WITHOUT_QUICK   (1L << 20)
337
#define T_SAFE_REPAIR           (1L << 21)
338
#define T_SILENT                (1L << 22)
339
#define T_SORT_INDEX            (1L << 23)     /* QQ to be removed */
340
#define T_SORT_RECORDS          (1L << 24)     /* QQ to be removed */
341
#define T_STATISTICS            (1L << 25)
342
#define T_UNPACK                (1L << 26)
343
#define T_UPDATE_STATE          (1L << 27)
344
#define T_VERBOSE               (1L << 28)
345
#define T_VERY_SILENT           (1L << 29)
346
#define T_WAIT_FOREVER          (1L << 30)
347
#define T_WRITE_LOOP            ((ulong) 1L << 31)
348
349
#define T_REP_ANY               (T_REP | T_REP_BY_SORT | T_REP_PARALLEL)
350
351
/*
352
  Flags used by myisamchk.c or/and ha_myisam.cc that are NOT passed
353
  to mi_check.c follows:
354
*/
355
356
#define TT_USEFRM               1
357
#define TT_FOR_UPGRADE          2
358
359
#define O_NEW_INDEX	1		/* Bits set in out_flag */
360
#define O_NEW_DATA	2
361
#define O_DATA_LOST	4
362
363
/* these struct is used by my_check to tell it what to do */
364
365
typedef struct st_sort_key_blocks		/* Used when sorting */
366
{
367
  uchar *buff,*end_pos;
368
  uchar lastkey[MI_MAX_POSSIBLE_KEY_BUFF];
369
  uint last_length;
370
  int inited;
371
} SORT_KEY_BLOCKS;
372
373
374
/* 
375
  MyISAM supports several statistics collection methods. Currently statistics 
376
  collection method is not stored in MyISAM file and has to be specified for 
377
  each table analyze/repair operation in  MI_CHECK::stats_method.
378
*/
379
380
typedef enum 
381
{
382
  /* Treat NULLs as inequal when collecting statistics (default for 4.1/5.0) */
383
  MI_STATS_METHOD_NULLS_NOT_EQUAL,
384
  /* Treat NULLs as equal when collecting statistics (like 4.0 did) */
385
  MI_STATS_METHOD_NULLS_EQUAL,
386
  /* Ignore NULLs - count only tuples without NULLs in the index components */
387
  MI_STATS_METHOD_IGNORE_NULLS
388
} enum_mi_stats_method;
389
390
typedef struct st_mi_check_param
391
{
151 by Brian Aker
Ulonglong to uint64_t
392
  uint64_t auto_increment_value;
393
  uint64_t max_data_file_length;
394
  uint64_t keys_in_use;
395
  uint64_t max_record_length;
1 by brian
clean slate
396
  my_off_t search_after_block;
397
  my_off_t new_file_pos,key_file_blocks;
398
  my_off_t keydata,totaldata,key_blocks,start_check_pos;
399
  ha_rows total_records,total_deleted;
400
  ha_checksum record_checksum,glob_crc;
401
  ulong	use_buffers,read_buffer_length,write_buffer_length,
402
	sort_buffer_length,sort_key_blocks;
403
  uint out_flag,warning_printed,error_printed,verbose;
404
  uint opt_sort_key,total_files,max_level;
405
  uint testflag, key_cache_block_size;
206 by Brian Aker
Removed final uint dead types.
406
  uint8_t language;
281 by Brian Aker
Converted myisam away from my_bool
407
  bool using_global_keycache, opt_lock_memory, opt_follow_links;
408
  bool retry_repair, force_sort;
1 by brian
clean slate
409
  char temp_filename[FN_REFLEN],*isam_file_name;
410
  MY_TMPDIR *tmpdir;
411
  int tmpfile_createflag;
412
  myf myf_rw;
413
  IO_CACHE read_cache;
414
  
415
  /* 
416
    The next two are used to collect statistics, see update_key_parts for
417
    description.
418
  */
151 by Brian Aker
Ulonglong to uint64_t
419
  uint64_t unique_count[MI_MAX_KEY_SEG+1];
420
  uint64_t notnull_count[MI_MAX_KEY_SEG+1];
1 by brian
clean slate
421
  
422
  ha_checksum key_crc[HA_MAX_POSSIBLE_KEY];
423
  ulong rec_per_key_part[MI_MAX_KEY_SEG*HA_MAX_POSSIBLE_KEY];
424
  void *thd;
425
  const char *db_name, *table_name;
426
  const char *op_name;
427
  enum_mi_stats_method stats_method;
428
} MI_CHECK;
429
430
typedef struct st_sort_info
431
{
432
  my_off_t filelength,dupp,buff_length;
433
  ha_rows max_records;
434
  uint current_key, total_keys;
435
  myf myf_rw;
436
  enum data_file_type new_data_file_type;
437
  MI_INFO *info;
438
  MI_CHECK *param;
439
  uchar *buff;
440
  SORT_KEY_BLOCKS *key_block,*key_block_end;
441
  /* sync things */
442
  uint got_error, threads_running;
443
  pthread_mutex_t mutex;
444
  pthread_cond_t  cond;
445
} SORT_INFO;
446
447
/* functions in mi_check */
448
void myisamchk_init(MI_CHECK *param);
449
int chk_status(MI_CHECK *param, MI_INFO *info);
450
int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag);
451
int chk_size(MI_CHECK *param, MI_INFO *info);
452
int chk_key(MI_CHECK *param, MI_INFO *info);
453
int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend);
454
int mi_repair(MI_CHECK *param, register MI_INFO *info,
455
	      char * name, int rep_quick);
456
int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name);
457
int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
458
		      const char * name, int rep_quick);
459
int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
460
		      const char * name, int rep_quick);
461
int change_to_newfile(const char * filename, const char * old_ext,
462
		      const char * new_ext, uint raid_chunks,
463
		      myf myflags);
464
void lock_memory(MI_CHECK *param);
465
void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
281 by Brian Aker
Converted myisam away from my_bool
466
			       bool repair);
1 by brian
clean slate
467
int update_state_info(MI_CHECK *param, MI_INFO *info,uint update);
468
void update_key_parts(MI_KEYDEF *keyinfo, ulong *rec_per_key_part,
151 by Brian Aker
Ulonglong to uint64_t
469
                      uint64_t *unique, uint64_t *notnull, 
470
                      uint64_t records);
1 by brian
clean slate
471
int filecopy(MI_CHECK *param, File to,File from,my_off_t start,
472
	     my_off_t length, const char *type);
473
int movepoint(MI_INFO *info,uchar *record,my_off_t oldpos,
474
	      my_off_t newpos, uint prot_key);
281 by Brian Aker
Converted myisam away from my_bool
475
int write_data_suffix(SORT_INFO *sort_info, bool fix_datafile);
1 by brian
clean slate
476
int test_if_almost_full(MI_INFO *info);
477
int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename);
281 by Brian Aker
Converted myisam away from my_bool
478
bool mi_test_if_sort_rep(MI_INFO *info, ha_rows rows, uint64_t key_map,
479
			    bool force);
1 by brian
clean slate
480
303 by Brian Aker
First pass in removing ulong from MyISAM
481
int mi_init_bulk_insert(MI_INFO *info, uint32_t cache_size, ha_rows rows);
1 by brian
clean slate
482
void mi_flush_bulk_insert(MI_INFO *info, uint inx);
483
void mi_end_bulk_insert(MI_INFO *info);
151 by Brian Aker
Ulonglong to uint64_t
484
int mi_assign_to_key_cache(MI_INFO *info, uint64_t key_map, 
1 by brian
clean slate
485
			   KEY_CACHE *key_cache);
486
void mi_change_key_cache(KEY_CACHE *old_key_cache,
487
			 KEY_CACHE *new_key_cache);
281 by Brian Aker
Converted myisam away from my_bool
488
int mi_preload(MI_INFO *info, uint64_t key_map, bool ignore_leaves);
1 by brian
clean slate
489
490
#ifdef	__cplusplus
491
}
492
#endif
493
#endif