summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-10-11 01:18:03 +0300
committerunknown <monty@donna.mysql.com>2000-10-11 01:18:03 +0300
commitda2c52f1fe73f1fca8d95875957b4bcb4bd84a4b (patch)
treeb2c67cc4d23c305090ee2d98ec39d9ec6b034a3c /myisam
parente07d0930f4ecadf576c1dca76df3caab83ba04ae (diff)
parent3b5f8e5ee4ca4f78c2701d819f41820391de8b1a (diff)
downloadmariadb-git-da2c52f1fe73f1fca8d95875957b4bcb4bd84a4b.tar.gz
merge
mysys/charset.c: Auto merged BitKeeper/etc/logging_ok: Auto merged
Diffstat (limited to 'myisam')
-rw-r--r--myisam/ft_update.c2
-rw-r--r--myisam/mi_check.c19
-rw-r--r--myisam/mi_open.c5
-rw-r--r--myisam/myisamchk.c24
-rw-r--r--myisam/sort.c6
5 files changed, 35 insertions, 21 deletions
diff --git a/myisam/ft_update.c b/myisam/ft_update.c
index 7cfce1158fc..658ea9282f3 100644
--- a/myisam/ft_update.c
+++ b/myisam/ft_update.c
@@ -64,7 +64,7 @@ static FT_WORD * _mi_ft_parserecord(MI_INFO *info, uint keynr, byte *keybuf,
return NULL;
}
/* Handle the case where all columns are NULL */
- if (!parsed && !(parsed=ft_parse(0, "", 0)))
+ if (!parsed && !(parsed=ft_parse(0, (byte*) "", 0)))
return NULL;
return ft_linearize(info, keynr, keybuf, parsed);
}
diff --git a/myisam/mi_check.c b/myisam/mi_check.c
index c6a07ff9c36..a35ccc7edf4 100644
--- a/myisam/mi_check.c
+++ b/myisam/mi_check.c
@@ -192,6 +192,7 @@ int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag)
}
DBUG_RETURN(0);
wrong:
+ param->retry_without_quick=1; // Don't use quick repair
if (test_flag & T_VERBOSE) puts("");
mi_check_print_error(param,"record delete-link-chain corrupted");
DBUG_RETURN(1);
@@ -291,6 +292,7 @@ int chk_size(MI_CHECK *param, register MI_INFO *info)
error=1;
mi_check_print_error(param,"Size of datafile is: %-8s Should be: %s",
llstr(size,buff), llstr(skr,buff2));
+ param->retry_without_quick=1; // Don't use quick repair
}
else
{
@@ -750,8 +752,9 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
{
if (block_info.block_len < info->s->base.min_block_length)
{
- mi_check_print_error(param,"Deleted block with impossible length %lu at %s",
- block_info.block_len,llstr(pos,llbuff));
+ mi_check_print_error(param,
+ "Deleted block with impossible length %lu at %s",
+ block_info.block_len,llstr(pos,llbuff));
goto err2;
}
if ((block_info.next_filepos != HA_OFFSET_ERROR &&
@@ -1071,7 +1074,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
new_file= -1;
if (!(param->testflag & T_SILENT))
{
- printf("- recovering MyISAM-table '%s'\n",name);
+ printf("- recovering (with keycache) MyISAM-table '%s'\n",name);
printf("Data records: %s\n", llstr(info->state->records,llbuff));
}
@@ -1211,6 +1214,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
mi_check_print_error(param,"Couldn't fix table with quick recovery: Found wrong number of deleted records");
mi_check_print_error(param,"Run recovery again without -q");
got_error=1;
+ param->retry_repair=param->retry_without_quick=1;
goto err;
}
@@ -1651,7 +1655,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
share->pack.header_length;
if (!(param->testflag & T_SILENT))
{
- printf("- recovering MyISAM-table '%s'\n",name);
+ printf("- recovering (with sort) MyISAM-table '%s'\n",name);
printf("Data records: %s\n", llstr(start_records,llbuff));
}
bzero((char*) sort_info,sizeof(*sort_info));
@@ -1805,7 +1809,10 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
if (_create_index_by_sort(&sort_param,
(my_bool) (!(param->testflag & T_VERBOSE)),
(uint) param->sort_buffer_length))
+ {
+ param->retry_repair=1;
goto err;
+ }
/* Set for next loop */
sort_param.max_records=sort_info->max_records=
@@ -1862,6 +1869,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
mi_check_print_error(param,"Couldn't fix table with quick recovery: Found wrong number of deleted records");
mi_check_print_error(param,"Run recovery again without -q");
got_error=1;
+ param->retry_repair=param->retry_without_quick=1;
goto err;
}
@@ -3037,7 +3045,8 @@ void mi_disable_non_unique_index(MI_INFO *info, ha_rows rows)
even if the temporary file would be quite big!
*/
-my_bool mi_test_if_sort_rep(MI_INFO *info, ha_rows rows, my_bool force)
+my_bool mi_test_if_sort_rep(MI_INFO *info, ha_rows rows,
+ my_bool force __attribute__((unused)))
{
MYISAM_SHARE *share=info->s;
uint i;
diff --git a/myisam/mi_open.c b/myisam/mi_open.c
index cb19011fea7..942b4cee491 100644
--- a/myisam/mi_open.c
+++ b/myisam/mi_open.c
@@ -174,9 +174,10 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
disk_pos=my_n_base_info_read(disk_cache+base_pos, &share->base);
share->state.state_length=base_pos;
- if ((open_flags & HA_OPEN_ABORT_IF_CRASHED) &&
+ if (!(open_flags & HA_OPEN_FOR_REPAIR) &&
((share->state.changed & STATE_CRASHED) ||
- (my_disable_locking && share->state.open_count)))
+ ((open_flags & HA_OPEN_ABORT_IF_CRASHED) &&
+ (my_disable_locking && share->state.open_count))))
{
DBUG_PRINT("error",("Table is marked as crashed"));
my_errno=((share->state.changed & STATE_CRASHED_ON_REPAIR) ?
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index c1d3e8873f1..7fad3349d37 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -92,7 +92,7 @@ int main(int argc, char **argv)
error=0;
while (--argc >= 0)
{
- error|= myisamchk(&check_param, *(argv++));
+ int new_error=myisamchk(&check_param, *(argv++));
VOID(fflush(stdout));
VOID(fflush(stderr));
if ((check_param.error_printed | check_param.warning_printed) &&
@@ -101,13 +101,16 @@ int main(int argc, char **argv)
T_SORT_INDEX))))
{
uint old_testflag=check_param.testflag;
- check_param.testflag|=T_REP;
+ if (!(check_param.testflag & T_REP))
+ check_param.testflag|= T_REP_BY_SORT;
check_param.testflag&= ~T_EXTEND; /* Don't needed */
error|=myisamchk(&check_param, argv[-1]);
check_param.testflag= old_testflag;
VOID(fflush(stdout));
VOID(fflush(stderr));
}
+ else
+ error|=new_error;
if (argc && (!(check_param.testflag & T_SILENT) || check_param.testflag & T_INFO))
{
puts("\n---------\n");
@@ -193,7 +196,7 @@ static struct option long_options[] =
static void print_version(void)
{
- printf("%s Ver 1.32 for %s at %s\n",my_progname,SYSTEM_TYPE,
+ printf("%s Ver 1.34 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE);
}
@@ -229,7 +232,7 @@ static void usage(void)
-f, --force Restart with -r if there are any errors in the table\n\
-i, --information Print statistics information about table that is checked\n\
-m, --medium-check Faster than extended-check, but only finds 99.99% of\n\
- all errors. Should however be good enough for most cases\n\
+ all errors. Should be good enough for most cases\n\
-U --update-state Mark tables as crashed if you find any errors\n\
-T, --read-only Don't mark table as checked\n");
@@ -488,10 +491,11 @@ static int myisamchk(MI_CHECK *param, my_string filename)
if (!(info=mi_open(filename,
(param->testflag & (T_DESCRIPT | T_READONLY)) ?
O_RDONLY : O_RDWR,
- (param->testflag & T_WAIT_FOREVER) ?
- HA_OPEN_WAIT_IF_LOCKED :
- (param->testflag & T_DESCRIPT) ?
- HA_OPEN_IGNORE_IF_LOCKED : HA_OPEN_ABORT_IF_LOCKED)))
+ HA_OPEN_FOR_REPAIR |
+ ((param->testflag & T_WAIT_FOREVER) ?
+ HA_OPEN_WAIT_IF_LOCKED :
+ (param->testflag & T_DESCRIPT) ?
+ HA_OPEN_IGNORE_IF_LOCKED : HA_OPEN_ABORT_IF_LOCKED))))
{
/* Avoid twice printing of isam file name */
param->error_printed=1;
@@ -748,8 +752,8 @@ static int myisamchk(MI_CHECK *param, my_string filename)
error =chk_size(param,info);
if (!error || !(param->testflag & (T_FAST | T_FORCE_CREATE)))
error|=chk_del(param, info,param->testflag);
- if ((!error || !(param->testflag & (T_FAST | T_FORCE_CREATE)) &&
- !param->start_check_pos))
+ if ((!error || (!(param->testflag & (T_FAST | T_FORCE_CREATE)) &&
+ !param->start_check_pos)))
{
error|=chk_key(param, info);
if (!error && (param->testflag & (T_STATISTICS | T_AUTO_INC)))
diff --git a/myisam/sort.c b/myisam/sort.c
index 80f9b0b0363..436fa5a3c67 100644
--- a/myisam/sort.c
+++ b/myisam/sort.c
@@ -155,10 +155,10 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
printf(" - Merging %lu keys\n",records);
if (merge_many_buff(info,keys,sort_keys,buffpek,&maxbuffer,&tempfile))
goto err;
- if (flush_io_cache(&tempfile) ||
- reinit_io_cache(&tempfile,READ_CACHE,0L,0,0))
- goto err;
}
+ if (flush_io_cache(&tempfile) ||
+ reinit_io_cache(&tempfile,READ_CACHE,0L,0,0))
+ goto err;
if (!no_messages)
puts(" - Last merge and dumping keys");
if (merge_index(info,keys,sort_keys,buffpek,maxbuffer,&tempfile))