mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 11:27:39 +02:00
Fixed bug in OPTIMIZE TABLE that reset index cardinality if it
was up to date. Docs/manual.texi: ChangeLog configure.in: Version number change mysql-test/r/myisam.result: Test of optimize table mysql-test/t/myisam.test: Test of optimize table
This commit is contained in:
parent
7803c4432c
commit
421595c12e
5 changed files with 53 additions and 17 deletions
|
|
@ -535,7 +535,7 @@ int ha_myisam::optimize(THD* thd, HA_CHECK_OPT *check_opt)
|
|||
int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
|
||||
{
|
||||
int error=0;
|
||||
uint extra_testflag=0;
|
||||
uint local_testflag=param.testflag;
|
||||
bool optimize_done= !optimize, statistics_done=0;
|
||||
char fixed_name[FN_REFLEN];
|
||||
const char *old_proc_info=thd->proc_info;
|
||||
|
|
@ -565,19 +565,18 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
|
|||
(!param.opt_rep_quick ||
|
||||
!(share->state.changed & STATE_NOT_OPTIMIZED_KEYS))))
|
||||
{
|
||||
ulonglong key_map= ((param.testflag & T_CREATE_MISSING_KEYS) ?
|
||||
ulonglong key_map= ((local_testflag & T_CREATE_MISSING_KEYS) ?
|
||||
((ulonglong) 1L << share->base.keys)-1 :
|
||||
share->state.key_map);
|
||||
uint testflag=param.testflag;
|
||||
if (mi_test_if_sort_rep(file,file->state->records,key_map,0) &&
|
||||
(param.testflag & T_REP_BY_SORT))
|
||||
(local_testflag & T_REP_BY_SORT))
|
||||
{
|
||||
uint testflag=param.testflag;
|
||||
extra_testflag= T_STATISTICS;
|
||||
local_testflag|= T_STATISTICS;
|
||||
param.testflag|= T_STATISTICS; // We get this for free
|
||||
thd->proc_info="Repair by sorting";
|
||||
statistics_done=1;
|
||||
error = mi_repair_by_sort(¶m, file, fixed_name, param.opt_rep_quick);
|
||||
param.testflag=testflag;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -585,22 +584,28 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
|
|||
param.testflag &= ~T_REP_BY_SORT;
|
||||
error= mi_repair(¶m, file, fixed_name, param.opt_rep_quick);
|
||||
}
|
||||
param.testflag=testflag;
|
||||
optimize_done=1;
|
||||
}
|
||||
if (!error)
|
||||
{
|
||||
if ((param.testflag & T_SORT_INDEX) &&
|
||||
if ((local_testflag & T_SORT_INDEX) &&
|
||||
(share->state.changed & STATE_NOT_SORTED_PAGES))
|
||||
{
|
||||
optimize_done=1;
|
||||
thd->proc_info="Sorting index";
|
||||
error=mi_sort_index(¶m,file,fixed_name);
|
||||
}
|
||||
if (!statistics_done && (param.testflag & T_STATISTICS) &&
|
||||
(share->state.changed & STATE_NOT_ANALYZED))
|
||||
if (!statistics_done && (local_testflag & T_STATISTICS))
|
||||
{
|
||||
optimize_done=1;
|
||||
thd->proc_info="Analyzing";
|
||||
error = chk_key(¶m, file);
|
||||
if (share->state.changed & STATE_NOT_ANALYZED)
|
||||
{
|
||||
optimize_done=1;
|
||||
thd->proc_info="Analyzing";
|
||||
error = chk_key(¶m, file);
|
||||
}
|
||||
else
|
||||
local_testflag&= ~T_STATISTICS; // Don't update statistics
|
||||
}
|
||||
}
|
||||
thd->proc_info="Saving state";
|
||||
|
|
@ -615,10 +620,11 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
|
|||
file->save_state=file->s->state.state;
|
||||
if (file->s->base.auto_key)
|
||||
update_auto_increment_key(¶m, file, 1);
|
||||
error = update_state_info(¶m, file,
|
||||
UPDATE_TIME | UPDATE_OPEN_COUNT |
|
||||
((param.testflag | extra_testflag) &
|
||||
T_STATISTICS ? UPDATE_STAT : 0));
|
||||
if (optimize_done)
|
||||
error = update_state_info(¶m, file,
|
||||
UPDATE_TIME | UPDATE_OPEN_COUNT |
|
||||
(local_testflag &
|
||||
T_STATISTICS ? UPDATE_STAT : 0));
|
||||
info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE |
|
||||
HA_STATUS_CONST);
|
||||
if (rows != file->state->records && ! (param.testflag & T_VERY_SILENT))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue