diff options
author | unknown <serg@serg.mylan> | 2004-10-22 18:21:56 +0200 |
---|---|---|
committer | unknown <serg@serg.mylan> | 2004-10-22 18:21:56 +0200 |
commit | 85d04ccebd3ee921a0522e65a90d9e85ec670c28 (patch) | |
tree | 9279a72eb4487cf886bc0647adb1901a0de490f5 /myisam | |
parent | 855e4dafb3dfccdb34a3a8d3fbd9f682d5d4face (diff) | |
parent | 1cd249e0edb9aeeb46686ef548a4901c5a5340b2 (diff) | |
download | mariadb-git-85d04ccebd3ee921a0522e65a90d9e85ec670c28.tar.gz |
Merge bk-internal.mysql.com:/home/bk/mysql-4.1/
into serg.mylan:/usr/home/serg/Abk/mysql-4.1
myisam/myisamchk.c:
Auto merged
Diffstat (limited to 'myisam')
-rw-r--r-- | myisam/myisam_ftdump.c | 2 | ||||
-rw-r--r-- | myisam/myisamchk.c | 2 | ||||
-rw-r--r-- | myisam/myisampack.c | 34 | ||||
-rw-r--r-- | myisam/rt_test.c | 3 |
4 files changed, 32 insertions, 9 deletions
diff --git a/myisam/myisam_ftdump.c b/myisam/myisam_ftdump.c index 8219c19848a..54b2cc77965 100644 --- a/myisam/myisam_ftdump.c +++ b/myisam/myisam_ftdump.c @@ -68,7 +68,7 @@ int main(int argc,char *argv[]) struct { MI_INFO *info; } aio0, *aio=&aio0; /* for GWS_IN_USE */ MY_INIT(argv[0]); - if (error=handle_options(&argc, &argv, my_long_options, get_one_option)) + if ((error= handle_options(&argc, &argv, my_long_options, get_one_option))) exit(error); if (count || dump) verbose=0; diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index 9a2fde8fb89..648e29e1e9e 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -1695,7 +1695,7 @@ err: static my_bool not_killed= 0; -volatile my_bool *killed_ptr(MI_CHECK *param) +volatile my_bool *killed_ptr(MI_CHECK *param __attribute__((unused))) { return ¬_killed; /* always NULL */ } diff --git a/myisam/myisampack.c b/myisam/myisampack.c index 0bbf2721cb3..b4b4169965d 100644 --- a/myisam/myisampack.c +++ b/myisam/myisampack.c @@ -111,6 +111,8 @@ typedef struct st_isam_mrg { uint ref_length; uint max_blob_length; my_off_t records; + /* true if at least one source file has at least one disabled index */ + my_bool src_file_has_indexes_disabled; } PACK_MRG_INFO; @@ -413,10 +415,15 @@ static bool open_isam_files(PACK_MRG_INFO *mrg,char **names,uint count) mrg->current=0; mrg->file=(MI_INFO**) my_malloc(sizeof(MI_INFO*)*count,MYF(MY_FAE)); mrg->free_file=1; + mrg->src_file_has_indexes_disabled= 0; for (i=0; i < count ; i++) { if (!(mrg->file[i]=open_isam_file(names[i],O_RDONLY))) goto error; + + mrg->src_file_has_indexes_disabled|= ((mrg->file[i]->s->state.key_map != + (((ulonglong) 1) << + mrg->file[i]->s->base. keys) - 1)); } /* Check that files are identical */ for (j=0 ; j < count-1 ; j++) @@ -2043,12 +2050,21 @@ static int save_state(MI_INFO *isam_file,PACK_MRG_INFO *mrg,my_off_t new_length, share->state.dellink= HA_OFFSET_ERROR; share->state.split=(ha_rows) mrg->records; share->state.version=(ulong) time((time_t*) 0); - share->state.key_map=0; + if (share->state.key_map != (1ULL << share->base.keys) - 1) + { + /* + Some indexes are disabled, cannot use current key_file_length value + as an estimate of upper bound of index file size. Use packed data file + size instead. + */ + share->state.state.key_file_length= new_length; + } /* - Don't save key_file_length here, keep key_file_length of original file - so "myisamchk -rq" can use this value (this is necessary because index - size cannot be easily calculated for fulltext keys) + If there are no disabled indexes, keep key_file_length value from + original file so "myisamchk -rq" can use this value (this is necessary + because index size cannot be easily calculated for fulltext keys) */ + share->state.key_map=0; for (key=0 ; key < share->base.keys ; key++) share->state.key_root[key]= HA_OFFSET_ERROR; for (key=0 ; key < share->state.header.max_block_size ; key++) @@ -2057,8 +2073,7 @@ static int save_state(MI_INFO *isam_file,PACK_MRG_INFO *mrg,my_off_t new_length, share->changed=1; /* Force write of header */ share->state.open_count=0; share->global_changed=0; - VOID(my_chsize(share->kfile, share->state.state.key_file_length, 0, - MYF(0))); + VOID(my_chsize(share->kfile, share->base.keystart, 0, MYF(0))); if (share->base.keys) isamchk_neaded=1; DBUG_RETURN(mi_state_info_write(share->kfile,&share->state,1+2)); @@ -2081,7 +2096,12 @@ static int save_state_mrg(File file,PACK_MRG_INFO *mrg,my_off_t new_length, state.state.del=0; state.state.empty=0; state.state.records=state.split=(ha_rows) mrg->records; - state.state.key_file_length=isam_file->s->base.keystart; + /* See comment above in save_state about key_file_length handling. */ + if (mrg->src_file_has_indexes_disabled) + { + isam_file->s->state.state.key_file_length= + max(isam_file->s->state.state.key_file_length, new_length); + } state.dellink= HA_OFFSET_ERROR; state.version=(ulong) time((time_t*) 0); state.key_map=0; diff --git a/myisam/rt_test.c b/myisam/rt_test.c index 5e883e223b3..4f04aa11fce 100644 --- a/myisam/rt_test.c +++ b/myisam/rt_test.c @@ -425,6 +425,7 @@ static void create_record1(char *record,uint rownr) } } +#ifdef NOT_USED static void create_record0(char *record,uint rownr) { @@ -447,6 +448,8 @@ static void create_record0(char *record,uint rownr) } } +#endif + static void create_record(char *record,uint rownr) { int i; |