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