~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to include/myisam.h

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

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