Loading Docs/manual.texi +8 −0 Original line number Diff line number Diff line Loading @@ -46844,6 +46844,14 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.45 @itemize @bullet @item Fix a bug which could cause InnoDB to complain if it cannot find free blocks from the buffer cache during recovery. @item Fixed a bug in InnoDB insert buffer B-tree handling that could cause crashes. @item Fixed bug in @code{OPTIMIZE TABLE} that reset index cardinality if it was up to date. @item Fixed problem with @code{t1 LEFT_JOIN t2 ... WHERE t2.date_column IS NULL} when date_column was declared as @code{NOT NULL}. @item configure.in +1 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! AM_INIT_AUTOMAKE(mysql, 3.23.44) AM_INIT_AUTOMAKE(mysql, 3.23.45) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 Loading mysql-test/r/myisam.result +10 −0 Original line number Diff line number Diff line Loading @@ -10,3 +10,13 @@ Table Op Msg_type Msg_text test.t1 repair status OK Table Op Msg_type Msg_text test.t1 check status OK Table Op Msg_type Msg_text test.t1 optimize status OK Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment t1 0 PRIMARY 1 a A 5 NULL NULL t1 1 b 1 b A 1 NULL NULL Table Op Msg_type Msg_text test.t1 optimize status Table is already up to date Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment t1 0 PRIMARY 1 a A 5 NULL NULL t1 1 b 1 b A 1 NULL NULL mysql-test/t/myisam.test +12 −0 Original line number Diff line number Diff line Loading @@ -36,3 +36,15 @@ check table t1; repair table t1; check table t1; drop table t1; # # Test bug: Two optimize in a row reset index cardinality # create table t1 (a int not null auto_increment, b int not null, primary key (a), index(b)); insert into t1 (b) values (1),(2),(2),(2),(2); optimize table t1; show index from t1; optimize table t1; show index from t1; drop table t1; sql/ha_myisam.cc +22 −16 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading @@ -585,23 +584,29 @@ 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)) { 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"; if (!error) Loading @@ -615,9 +620,10 @@ 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); if (optimize_done) error = update_state_info(¶m, file, UPDATE_TIME | UPDATE_OPEN_COUNT | ((param.testflag | extra_testflag) & (local_testflag & T_STATISTICS ? UPDATE_STAT : 0)); info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE | HA_STATUS_CONST); Loading Loading
Docs/manual.texi +8 −0 Original line number Diff line number Diff line Loading @@ -46844,6 +46844,14 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.45 @itemize @bullet @item Fix a bug which could cause InnoDB to complain if it cannot find free blocks from the buffer cache during recovery. @item Fixed a bug in InnoDB insert buffer B-tree handling that could cause crashes. @item Fixed bug in @code{OPTIMIZE TABLE} that reset index cardinality if it was up to date. @item Fixed problem with @code{t1 LEFT_JOIN t2 ... WHERE t2.date_column IS NULL} when date_column was declared as @code{NOT NULL}. @item
configure.in +1 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! AM_INIT_AUTOMAKE(mysql, 3.23.44) AM_INIT_AUTOMAKE(mysql, 3.23.45) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 Loading
mysql-test/r/myisam.result +10 −0 Original line number Diff line number Diff line Loading @@ -10,3 +10,13 @@ Table Op Msg_type Msg_text test.t1 repair status OK Table Op Msg_type Msg_text test.t1 check status OK Table Op Msg_type Msg_text test.t1 optimize status OK Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment t1 0 PRIMARY 1 a A 5 NULL NULL t1 1 b 1 b A 1 NULL NULL Table Op Msg_type Msg_text test.t1 optimize status Table is already up to date Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment t1 0 PRIMARY 1 a A 5 NULL NULL t1 1 b 1 b A 1 NULL NULL
mysql-test/t/myisam.test +12 −0 Original line number Diff line number Diff line Loading @@ -36,3 +36,15 @@ check table t1; repair table t1; check table t1; drop table t1; # # Test bug: Two optimize in a row reset index cardinality # create table t1 (a int not null auto_increment, b int not null, primary key (a), index(b)); insert into t1 (b) values (1),(2),(2),(2),(2); optimize table t1; show index from t1; optimize table t1; show index from t1; drop table t1;
sql/ha_myisam.cc +22 −16 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading @@ -585,23 +584,29 @@ 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)) { 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"; if (!error) Loading @@ -615,9 +620,10 @@ 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); if (optimize_done) error = update_state_info(¶m, file, UPDATE_TIME | UPDATE_OPEN_COUNT | ((param.testflag | extra_testflag) & (local_testflag & T_STATISTICS ? UPDATE_STAT : 0)); info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE | HA_STATUS_CONST); Loading