summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <serg@serg.mysql.com>2002-10-08 14:34:04 +0000
committerunknown <serg@serg.mysql.com>2002-10-08 14:34:04 +0000
commitdf206725f425777faeb66dc15da05850c117960b (patch)
treec86321a262ba5ad3a010113a2251687c23675da4
parent950ed3d7248dac44cee06686ebbe4a312da82a32 (diff)
downloadmariadb-git-df206725f425777faeb66dc15da05850c117960b.tar.gz
--tmpdir=dir1:dir2:... support in myisamchk
-rw-r--r--include/myisam.h5
-rw-r--r--myisam/myisamchk.c14
-rw-r--r--myisam/sort.c12
-rw-r--r--sql/ha_myisam.cc4
4 files changed, 22 insertions, 13 deletions
diff --git a/include/myisam.h b/include/myisam.h
index eac517eb28a..acaf8bb7618 100644
--- a/include/myisam.h
+++ b/include/myisam.h
@@ -329,7 +329,8 @@ typedef struct st_mi_check_param
uint8 language;
my_bool using_global_keycache, opt_lock_memory, opt_follow_links;
my_bool retry_repair, force_sort, calc_checksum;
- char temp_filename[FN_REFLEN],*isam_file_name,*tmpdir;
+ char temp_filename[FN_REFLEN],*isam_file_name;
+ MY_TMPDIR *tmpdir;
int tmpfile_createflag;
myf myf_rw;
IO_CACHE read_cache;
@@ -376,7 +377,7 @@ typedef struct st_mi_sort_param
byte *rec_buff;
void *wordlist, *wordptr;
char *record;
- char *tmpdir;
+ MY_TMPDIR *tmpdir;
int (*key_cmp)(struct st_mi_sort_param *, const void *, const void *);
int (*key_read)(struct st_mi_sort_param *,void *);
int (*key_write)(struct st_mi_sort_param *, const void *);
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index 3e8377fc8c0..440c84dc64d 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -41,9 +41,10 @@ SET_STACK_SIZE(9000) /* Minimum stack size for program */
static uint decode_bits;
static char **default_argv;
static const char *load_default_groups[]= { "myisamchk", 0 };
-static const char *set_charset_name;
+static const char *set_charset_name, *opt_tmpdir;
static CHARSET_INFO *set_charset;
static long opt_myisam_block_size;
+static MY_TMPDIR myisamchk_tmpdir;
static const char *type_names[]=
{ "?","char","binary", "short", "long", "float",
@@ -257,7 +258,7 @@ static struct my_option my_long_options[] =
0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"tmpdir", 't',
"Path for temporary files.",
- (gptr*) &check_param.tmpdir,
+ (gptr*) &opt_tmpdir,
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"update-state", 'U',
"Mark tables as crashed if any errors were found.",
@@ -338,7 +339,9 @@ static void usage(void)
Change the value of a variable. Please note that\n\
this option is deprecated; you can set variables\n\
directly with '--variable-name=value'.\n\
- -t, --tmpdir=path Path for temporary files\n\
+ -t, --tmpdir=path Path for temporary files. Multiple paths can be\n\
+ specified, separated by colon (:), they will be used\n\
+ in a round-robin fashion.\n\
-s, --silent Only print errors. One can use two -s to make\n\
myisamchk very silent\n\
-v, --verbose Print more information. This can be used with\n\
@@ -693,6 +696,11 @@ static void get_options(register int *argc,register char ***argv)
exit(1);
}
+ if (init_tmpdir(&myisamchk_tmpdir, opt_tmpdir))
+ exit(1);
+
+ check_param.tmpdir=&myisamchk_tmpdir;
+
if (set_charset_name)
if (!(set_charset=get_charset_by_name(set_charset_name, MYF(MY_WME))))
exit(1);
diff --git a/myisam/sort.c b/myisam/sort.c
index 79d31147bfc..5819fb7b493 100644
--- a/myisam/sort.c
+++ b/myisam/sort.c
@@ -553,8 +553,8 @@ static int NEAR_F write_keys(MI_SORT_PARAM *info, register uchar **sort_keys,
qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
info);
if (!my_b_inited(tempfile) &&
- open_cached_file(tempfile, info->tmpdir, "ST", DISK_BUFFER_SIZE,
- info->sort_info->param->myf_rw))
+ open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST",
+ DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
DBUG_RETURN(1); /* purecov: inspected */
buffpek->file_pos=my_b_tell(tempfile);
@@ -576,8 +576,8 @@ static int NEAR_F write_key(MI_SORT_PARAM *info, uchar *key,
DBUG_ENTER("write_key");
if (!my_b_inited(tempfile) &&
- open_cached_file(tempfile, info->tmpdir, "ST", DISK_BUFFER_SIZE,
- info->sort_info->param->myf_rw))
+ open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST",
+ DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
DBUG_RETURN(1);
if (my_b_write(tempfile,(byte*)&key_length,sizeof(key_length)) ||
@@ -619,8 +619,8 @@ static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, uint keys,
if (*maxbuffer < MERGEBUFF2)
DBUG_RETURN(0); /* purecov: inspected */
if (flush_io_cache(t_file) ||
- open_cached_file(&t_file2,info->tmpdir,"ST",DISK_BUFFER_SIZE,
- info->sort_info->param->myf_rw))
+ open_cached_file(&t_file2,my_tmpdir(info->tmpdir),"ST",
+ DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
DBUG_RETURN(1); /* purecov: inspected */
from_file= t_file ; to_file= &t_file2;
diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc
index 4aae044148b..e02252e711f 100644
--- a/sql/ha_myisam.cc
+++ b/sql/ha_myisam.cc
@@ -559,7 +559,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
param.tmpfile_createflag = O_RDWR | O_TRUNC;
param.using_global_keycache = 1;
param.thd=thd;
- param.tmpdir=mysql_tmpdir;
+ param.tmpdir=&mysql_tmpdir_list;
param.out_flag=0;
strmov(fixed_name,file->filename);
@@ -718,7 +718,7 @@ bool ha_myisam::activate_all_index(THD *thd)
T_CREATE_MISSING_KEYS);
param.myf_rw&= ~MY_WAIT_IF_FULL;
param.sort_buffer_length= thd->variables.myisam_sort_buff_size;
- param.tmpdir=mysql_tmpdir;
+ param.tmpdir=&mysql_tmpdir_list;
error=repair(thd,param,0) != HA_ADMIN_OK;
thd->proc_info=save_proc_info;
}