20
20
#include <mysys/queues.h>
21
21
#include <mysys/my_bit.h>
23
#include <drizzled/util/test.h>
25
26
Old options is used when recreating database, from myisamchk
28
int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
29
uint columns, MI_COLUMNDEF *recinfo,
30
uint uniques, MI_UNIQUEDEF *uniquedefs,
31
MI_CREATE_INFO *ci,uint flags)
29
int mi_create(const char *name,uint32_t keys,MI_KEYDEF *keydefs,
30
uint32_t columns, MI_COLUMNDEF *recinfo,
31
uint32_t uniques, MI_UNIQUEDEF *uniquedefs,
32
MI_CREATE_INFO *ci,uint32_t flags)
34
register uint32_t i, j;
34
35
File dfile= 0, file= 0;
35
36
int errpos,save_errno, create_mode= O_RDWR | O_TRUNC;
37
uint fields,length,max_key_length,packed,pointer,real_length_diff,
38
uint32_t fields,length,max_key_length,packed,pointer,real_length_diff,
38
39
key_length,info_length,key_segs,options,min_key_length_skip,
39
40
base_pos,long_varchar_count,varchar_length,
40
41
max_key_block_length,unique_key_parts,fulltext_keys,offset;
41
uint aligned_key_start, block_length;
42
uint32_t aligned_key_start, block_length;
42
43
ulong reclength, real_reclength,min_pack_length;
43
44
char filename[FN_REFLEN],linkname[FN_REFLEN], *linkname_ptr;
44
45
ulong pack_reclength;
354
355
block_length= (keydef->block_length ?
355
356
my_round_up_to_next_power(keydef->block_length) :
356
357
myisam_block_size);
357
block_length= max(block_length, MI_MIN_KEY_BLOCK_LENGTH);
358
block_length= min(block_length, MI_MAX_KEY_BLOCK_LENGTH);
358
block_length= cmax(block_length, MI_MIN_KEY_BLOCK_LENGTH);
359
block_length= cmin(block_length, MI_MAX_KEY_BLOCK_LENGTH);
360
361
keydef->block_length= (uint16_t) MI_BLOCK_SIZE(length-real_length_diff,
361
362
pointer,MI_MAX_KEYPTR_SIZE,
443
444
got from MYI file header (see also myisampack.c:save_state)
445
446
share.base.key_reflength=
446
mi_get_pointer_length(max(ci->key_file_length,tmp),3);
447
mi_get_pointer_length(cmax(ci->key_file_length,tmp),3);
447
448
share.base.keys= share.state.header.keys= keys;
448
449
share.state.header.uniques= uniques;
449
450
share.state.header.fulltext_keys= fulltext_keys;
476
477
share.base.min_block_length=
477
478
(share.base.pack_reclength+3 < MI_EXTEND_BLOCK_LENGTH &&
478
479
! share.base.blobs) ?
479
max(share.base.pack_reclength,MI_MIN_BLOCK_LENGTH) :
480
cmax(share.base.pack_reclength,MI_MIN_BLOCK_LENGTH) :
480
481
MI_EXTEND_BLOCK_LENGTH;
481
482
if (! (flags & HA_DONT_TOUCH_DATA))
482
483
share.state.create_time= (long) time((time_t*) 0);
692
693
save_errno=my_errno;
693
694
switch (errpos) {
695
VOID(my_close(dfile,MYF(0)));
696
my_close(dfile,MYF(0));
696
697
/* fall through */
698
/* QQ: T�nu should add a call to my_raid_delete() here */
699
699
if (! (flags & HA_DONT_TOUCH_DATA))
700
700
my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_DEXT,
701
701
MY_UNPACK_FILENAME | MY_APPEND_EXT),
703
703
/* fall through */
705
VOID(my_close(file,MYF(0)));
705
my_close(file,MYF(0));
706
706
if (! (flags & HA_DONT_TOUCH_DATA))
707
707
my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_IEXT,
708
708
MY_UNPACK_FILENAME | MY_APPEND_EXT),
711
my_free((char*) rec_per_key_part, MYF(0));
711
free((char*) rec_per_key_part);
712
712
return(my_errno=save_errno); /* return the fatal errno */
716
uint mi_get_pointer_length(uint64_t file_length, uint def)
716
uint32_t mi_get_pointer_length(uint64_t file_length, uint32_t def)
718
718
assert(def >= 2 && def <= 7);
719
719
if (file_length) /* If not default */