Loading mysql-test/r/alter_table.result +11 −0 Original line number Diff line number Diff line Loading @@ -556,6 +556,17 @@ ERROR 3D000: No database selected alter table test.t1 rename test.t1; use test; drop table t1; DROP TABLE IF EXISTS bug24219; DROP TABLE IF EXISTS bug24219_2; CREATE TABLE bug24219 (a INT, INDEX(a)); SHOW INDEX FROM bug24219; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment bug24219 1 a 1 a A NULL NULL NULL YES BTREE ALTER TABLE bug24219 RENAME TO bug24219_2, DISABLE KEYS; SHOW INDEX FROM bug24219_2; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment bug24219_2 1 a 1 a A NULL NULL NULL YES BTREE disabled DROP TABLE bug24219_2; create table t1 (mycol int(10) not null); alter table t1 alter column mycol set default 0; desc t1; Loading mysql-test/t/alter_table.test +18 −0 Original line number Diff line number Diff line Loading @@ -402,6 +402,24 @@ alter table test.t1 rename test.t1; use test; drop table t1; # # Bug#24219 - ALTER TABLE ... RENAME TO ... , DISABLE KEYS leads to crash # --disable_warnings DROP TABLE IF EXISTS bug24219; DROP TABLE IF EXISTS bug24219_2; --enable_warnings CREATE TABLE bug24219 (a INT, INDEX(a)); SHOW INDEX FROM bug24219; ALTER TABLE bug24219 RENAME TO bug24219_2, DISABLE KEYS; SHOW INDEX FROM bug24219_2; DROP TABLE bug24219_2; # End of 4.1 tests # Loading sql/sql_table.cc +28 −23 Original line number Diff line number Diff line Loading @@ -3098,13 +3098,35 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, if (!(alter_info->flags & ~(ALTER_RENAME | ALTER_KEYS_ONOFF)) && !table->s->tmp_table) // no need to touch frm { error=0; VOID(pthread_mutex_lock(&LOCK_open)); if (new_name != table_name || new_db != db) switch (alter_info->keys_onoff) { case LEAVE_AS_IS: error= 0; break; case ENABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; case DISABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error=table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; } if (error == HA_ERR_WRONG_COMMAND) { push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA), table->alias); error= 0; } if (!error && (new_name != table_name || new_db != db)) { thd->proc_info="rename"; /* Then do a 'simple' rename of the table */ error=0; if (!access(new_name_buff,F_OK)) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_name); Loading @@ -3126,24 +3148,6 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, } } if (!error) { switch (alter_info->keys_onoff) { case LEAVE_AS_IS: break; case ENABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; case DISABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error=table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; } } if (error == HA_ERR_WRONG_COMMAND) { push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, Loading @@ -3151,6 +3155,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, table->alias); error= 0; } if (!error) { if (mysql_bin_log.is_open()) Loading @@ -3168,7 +3173,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, error= -1; } VOID(pthread_mutex_unlock(&LOCK_open)); table_list->table=0; // For query cache table_list->table= NULL; // For query cache query_cache_invalidate3(thd, table_list, 0); DBUG_RETURN(error); } Loading support-files/mysql.server.sh +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ datadir_set= # lsb_functions="/lib/lsb/init-functions" if test -f $lsb_functions ; then source $lsb_functions . $lsb_functions else log_success_msg() { Loading Loading
mysql-test/r/alter_table.result +11 −0 Original line number Diff line number Diff line Loading @@ -556,6 +556,17 @@ ERROR 3D000: No database selected alter table test.t1 rename test.t1; use test; drop table t1; DROP TABLE IF EXISTS bug24219; DROP TABLE IF EXISTS bug24219_2; CREATE TABLE bug24219 (a INT, INDEX(a)); SHOW INDEX FROM bug24219; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment bug24219 1 a 1 a A NULL NULL NULL YES BTREE ALTER TABLE bug24219 RENAME TO bug24219_2, DISABLE KEYS; SHOW INDEX FROM bug24219_2; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment bug24219_2 1 a 1 a A NULL NULL NULL YES BTREE disabled DROP TABLE bug24219_2; create table t1 (mycol int(10) not null); alter table t1 alter column mycol set default 0; desc t1; Loading
mysql-test/t/alter_table.test +18 −0 Original line number Diff line number Diff line Loading @@ -402,6 +402,24 @@ alter table test.t1 rename test.t1; use test; drop table t1; # # Bug#24219 - ALTER TABLE ... RENAME TO ... , DISABLE KEYS leads to crash # --disable_warnings DROP TABLE IF EXISTS bug24219; DROP TABLE IF EXISTS bug24219_2; --enable_warnings CREATE TABLE bug24219 (a INT, INDEX(a)); SHOW INDEX FROM bug24219; ALTER TABLE bug24219 RENAME TO bug24219_2, DISABLE KEYS; SHOW INDEX FROM bug24219_2; DROP TABLE bug24219_2; # End of 4.1 tests # Loading
sql/sql_table.cc +28 −23 Original line number Diff line number Diff line Loading @@ -3098,13 +3098,35 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, if (!(alter_info->flags & ~(ALTER_RENAME | ALTER_KEYS_ONOFF)) && !table->s->tmp_table) // no need to touch frm { error=0; VOID(pthread_mutex_lock(&LOCK_open)); if (new_name != table_name || new_db != db) switch (alter_info->keys_onoff) { case LEAVE_AS_IS: error= 0; break; case ENABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; case DISABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error=table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; } if (error == HA_ERR_WRONG_COMMAND) { push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA), table->alias); error= 0; } if (!error && (new_name != table_name || new_db != db)) { thd->proc_info="rename"; /* Then do a 'simple' rename of the table */ error=0; if (!access(new_name_buff,F_OK)) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_name); Loading @@ -3126,24 +3148,6 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, } } if (!error) { switch (alter_info->keys_onoff) { case LEAVE_AS_IS: break; case ENABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; case DISABLE: wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); error=table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; } } if (error == HA_ERR_WRONG_COMMAND) { push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, Loading @@ -3151,6 +3155,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, table->alias); error= 0; } if (!error) { if (mysql_bin_log.is_open()) Loading @@ -3168,7 +3173,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, error= -1; } VOID(pthread_mutex_unlock(&LOCK_open)); table_list->table=0; // For query cache table_list->table= NULL; // For query cache query_cache_invalidate3(thd, table_list, 0); DBUG_RETURN(error); } Loading
support-files/mysql.server.sh +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ datadir_set= # lsb_functions="/lib/lsb/init-functions" if test -f $lsb_functions ; then source $lsb_functions . $lsb_functions else log_success_msg() { Loading