|
|
|
@ -3800,6 +3800,7 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) |
|
|
|
ha_rows max_records; |
|
|
|
ulonglong file_length,tmp_length; |
|
|
|
MI_CREATE_INFO create_info; |
|
|
|
DBUG_ENTER("recreate_table"); |
|
|
|
|
|
|
|
error=1; /* Default error */ |
|
|
|
info= **org_info; |
|
|
|
@ -3809,7 +3810,7 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) |
|
|
|
unpack= (share.options & HA_OPTION_COMPRESS_RECORD) && |
|
|
|
(param->testflag & T_UNPACK); |
|
|
|
if (!(keyinfo=(MI_KEYDEF*) my_alloca(sizeof(MI_KEYDEF)*share.base.keys))) |
|
|
|
return 0; |
|
|
|
DBUG_RETURN(0); |
|
|
|
memcpy((byte*) keyinfo,(byte*) share.keyinfo, |
|
|
|
(size_t) (sizeof(MI_KEYDEF)*share.base.keys)); |
|
|
|
|
|
|
|
@ -3818,14 +3819,14 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) |
|
|
|
(key_parts+share.base.keys)))) |
|
|
|
{ |
|
|
|
my_afree((gptr) keyinfo); |
|
|
|
return 1; |
|
|
|
DBUG_RETURN(1); |
|
|
|
} |
|
|
|
if (!(recdef=(MI_COLUMNDEF*) |
|
|
|
my_alloca(sizeof(MI_COLUMNDEF)*(share.base.fields+1)))) |
|
|
|
{ |
|
|
|
my_afree((gptr) keyinfo); |
|
|
|
my_afree((gptr) keysegs); |
|
|
|
return 1; |
|
|
|
DBUG_RETURN(1); |
|
|
|
} |
|
|
|
if (!(uniquedef=(MI_UNIQUEDEF*) |
|
|
|
my_alloca(sizeof(MI_UNIQUEDEF)*(share.state.header.uniques+1)))) |
|
|
|
@ -3833,7 +3834,7 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) |
|
|
|
my_afree((gptr) recdef); |
|
|
|
my_afree((gptr) keyinfo); |
|
|
|
my_afree((gptr) keysegs); |
|
|
|
return 1; |
|
|
|
DBUG_RETURN(1); |
|
|
|
} |
|
|
|
|
|
|
|
/* Copy the column definitions */ |
|
|
|
@ -3906,6 +3907,11 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) |
|
|
|
create_info.language = (param->language ? param->language : |
|
|
|
share.state.header.language); |
|
|
|
create_info.key_file_length= status_info.key_file_length; |
|
|
|
/* |
|
|
|
Allow for creating an auto_increment key. This has an effect only if |
|
|
|
an auto_increment key exists in the original table. |
|
|
|
*/ |
|
|
|
create_info.with_auto_increment= TRUE; |
|
|
|
/* We don't have to handle symlinks here because we are using |
|
|
|
HA_DONT_TOUCH_DATA */ |
|
|
|
if (mi_create(filename, |
|
|
|
@ -3950,7 +3956,7 @@ end: |
|
|
|
my_afree((gptr) keyinfo); |
|
|
|
my_afree((gptr) recdef); |
|
|
|
my_afree((gptr) keysegs); |
|
|
|
return error; |
|
|
|
DBUG_RETURN(error); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -4053,6 +4059,8 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, |
|
|
|
my_bool repair_only) |
|
|
|
{ |
|
|
|
byte *record; |
|
|
|
DBUG_ENTER("update_auto_increment_key"); |
|
|
|
|
|
|
|
if (!info->s->base.auto_key || |
|
|
|
! mi_is_key_active(info->s->state.key_map, info->s->base.auto_key - 1)) |
|
|
|
{ |
|
|
|
@ -4060,7 +4068,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, |
|
|
|
mi_check_print_info(param, |
|
|
|
"Table: %s doesn't have an auto increment key\n", |
|
|
|
param->isam_file_name); |
|
|
|
return; |
|
|
|
DBUG_VOID_RETURN; |
|
|
|
} |
|
|
|
if (!(param->testflag & T_SILENT) && |
|
|
|
!(param->testflag & T_REP)) |
|
|
|
@ -4073,7 +4081,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, |
|
|
|
MYF(0)))) |
|
|
|
{ |
|
|
|
mi_check_print_error(param,"Not enough memory for extra record"); |
|
|
|
return; |
|
|
|
DBUG_VOID_RETURN; |
|
|
|
} |
|
|
|
|
|
|
|
mi_extra(info,HA_EXTRA_KEYREAD,0); |
|
|
|
@ -4084,7 +4092,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, |
|
|
|
mi_extra(info,HA_EXTRA_NO_KEYREAD,0); |
|
|
|
my_free((char*) record, MYF(0)); |
|
|
|
mi_check_print_error(param,"%d when reading last record",my_errno); |
|
|
|
return; |
|
|
|
DBUG_VOID_RETURN; |
|
|
|
} |
|
|
|
if (!repair_only) |
|
|
|
info->s->state.auto_increment=param->auto_increment_value; |
|
|
|
@ -4100,7 +4108,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, |
|
|
|
mi_extra(info,HA_EXTRA_NO_KEYREAD,0); |
|
|
|
my_free((char*) record, MYF(0)); |
|
|
|
update_state_info(param, info, UPDATE_AUTO_INC); |
|
|
|
return; |
|
|
|
DBUG_VOID_RETURN; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|