18
18
#include "myisam_priv.h"
19
19
#include "drizzled/internal/my_bit.h"
20
#include "drizzled/internal/my_sys.h"
22
21
#include "drizzled/util/test.h"
23
22
#include "drizzled/global_charset_info.h"
24
#include "drizzled/error.h"
23
#include "drizzled/my_error.h"
27
26
#include <algorithm>
29
28
using namespace std;
30
using namespace drizzled;
33
31
Old options is used when recreating database, from myisamchk
58
56
HA_KEYSEG *keyseg,tmp_keyseg;
60
58
ulong *rec_per_key_part;
61
internal::my_off_t key_root[HA_MAX_POSSIBLE_KEY],key_del[MI_MAX_KEY_BLOCK_SIZE];
59
my_off_t key_root[HA_MAX_POSSIBLE_KEY],key_del[MI_MAX_KEY_BLOCK_SIZE];
62
60
MI_CREATE_INFO tmp_create_info;
396
394
my_printf_error(0, "MyISAM table '%s' has too many columns and/or "
397
395
"indexes and/or unique constraints.",
398
MYF(0), name + internal::dirname_length(name));
396
MYF(0), name + dirname_length(name));
399
397
errno= HA_WRONG_CREATE_OPTION;
459
457
/* max_data_file_length and max_key_file_length are recalculated on open */
460
458
if (options & HA_OPTION_TMP_TABLE)
461
share.base.max_data_file_length=(internal::my_off_t) ci->data_file_length;
459
share.base.max_data_file_length=(my_off_t) ci->data_file_length;
463
461
share.base.min_block_length=
464
462
(share.base.pack_reclength+3 < MI_EXTEND_BLOCK_LENGTH &&
484
482
/* chop off the table name, tempory tables use generated name */
485
483
if ((path= strrchr((char *)ci->index_file_name, FN_LIBCHAR)))
487
internal::fn_format(filename, name, ci->index_file_name, MI_NAME_IEXT,
485
fn_format(filename, name, ci->index_file_name, MI_NAME_IEXT,
488
486
MY_REPLACE_DIR | MY_UNPACK_FILENAME |
489
487
MY_RETURN_REAL_PATH | MY_APPEND_EXT);
493
internal::fn_format(filename, ci->index_file_name, "", MI_NAME_IEXT,
491
fn_format(filename, ci->index_file_name, "", MI_NAME_IEXT,
494
492
MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH |
495
493
(have_iext ? MY_REPLACE_EXT : MY_APPEND_EXT));
497
internal::fn_format(linkname, name, "", MI_NAME_IEXT,
495
fn_format(linkname, name, "", MI_NAME_IEXT,
498
496
MY_UNPACK_FILENAME|MY_APPEND_EXT);
499
497
linkname_ptr=linkname;
508
506
char *iext= strrchr((char *)name, '.');
509
507
int have_iext= iext && !strcmp(iext, MI_NAME_IEXT);
510
internal::fn_format(filename, name, "", MI_NAME_IEXT,
508
fn_format(filename, name, "", MI_NAME_IEXT,
511
509
MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH |
512
510
(have_iext ? MY_REPLACE_EXT : MY_APPEND_EXT));
530
528
my_printf_error(0, "MyISAM table '%s' is in use "
531
529
"(most likely by a MERGE table). Try FLUSH TABLES.",
532
MYF(0), name + internal::dirname_length(name));
530
MYF(0), name + dirname_length(name));
533
531
errno= HA_ERR_TABLE_EXIST;
537
if ((file= internal::my_create_with_symlink(linkname_ptr,
541
MYF(MY_WME | create_flag))) < 0)
535
if ((file= my_create_with_symlink(linkname_ptr, filename, 0, create_mode,
536
MYF(MY_WME | create_flag))) < 0)
556
551
/* chop off the table name, tempory tables use generated name */
557
552
if ((path= strrchr((char *)ci->data_file_name, FN_LIBCHAR)))
559
internal::fn_format(filename, name, ci->data_file_name, MI_NAME_DEXT,
554
fn_format(filename, name, ci->data_file_name, MI_NAME_DEXT,
560
555
MY_REPLACE_DIR | MY_UNPACK_FILENAME | MY_APPEND_EXT);
564
internal::fn_format(filename, ci->data_file_name, "", MI_NAME_DEXT,
559
fn_format(filename, ci->data_file_name, "", MI_NAME_DEXT,
565
560
MY_UNPACK_FILENAME |
566
561
(have_dext ? MY_REPLACE_EXT : MY_APPEND_EXT));
569
internal::fn_format(linkname, name, "",MI_NAME_DEXT,
564
fn_format(linkname, name, "",MI_NAME_DEXT,
570
565
MY_UNPACK_FILENAME | MY_APPEND_EXT);
571
566
linkname_ptr=linkname;
576
internal::fn_format(filename,name,"", MI_NAME_DEXT,
571
fn_format(filename,name,"", MI_NAME_DEXT,
577
572
MY_UNPACK_FILENAME | MY_APPEND_EXT);
579
574
create_flag=(flags & HA_CREATE_KEEP_FILES) ? 0 : MY_DELETE_OLD;
581
if ((dfile= internal::my_create_with_symlink(linkname_ptr,
582
filename, 0, create_mode,
583
MYF(MY_WME | create_flag))) < 0)
577
my_create_with_symlink(linkname_ptr, filename, 0, create_mode,
578
MYF(MY_WME | create_flag))) < 0)
670
if (internal::my_close(dfile,MYF(0)))
665
if (my_close(dfile,MYF(0)))
674
669
pthread_mutex_unlock(&THR_LOCK_myisam);
675
if (internal::my_close(file,MYF(0)))
670
if (my_close(file,MYF(0)))
677
672
free((char*) rec_per_key_part);
682
677
save_errno=errno;
683
678
switch (errpos) {
685
internal::my_close(dfile,MYF(0));
680
my_close(dfile,MYF(0));
686
681
/* fall through */
688
683
if (! (flags & HA_DONT_TOUCH_DATA))
689
internal::my_delete_with_symlink(internal::fn_format(filename,name,"",MI_NAME_DEXT,
684
my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_DEXT,
690
685
MY_UNPACK_FILENAME | MY_APPEND_EXT),
692
687
/* fall through */
694
internal::my_close(file,MYF(0));
689
my_close(file,MYF(0));
695
690
if (! (flags & HA_DONT_TOUCH_DATA))
696
internal::my_delete_with_symlink(internal::fn_format(filename,name,"",MI_NAME_IEXT,
691
my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_IEXT,
697
692
MY_UNPACK_FILENAME | MY_APPEND_EXT),