mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into example.com:/work/bug24219/my50 sql/sql_table.cc: Auto merged
This commit is contained in:
@ -556,6 +556,17 @@ ERROR 3D000: No database selected
|
|||||||
alter table test.t1 rename test.t1;
|
alter table test.t1 rename test.t1;
|
||||||
use test;
|
use test;
|
||||||
drop table t1;
|
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);
|
create table t1 (mycol int(10) not null);
|
||||||
alter table t1 alter column mycol set default 0;
|
alter table t1 alter column mycol set default 0;
|
||||||
desc t1;
|
desc t1;
|
||||||
|
@ -402,6 +402,24 @@ alter table test.t1 rename test.t1;
|
|||||||
use test;
|
use test;
|
||||||
drop table t1;
|
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
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -3098,13 +3098,35 @@ view_err:
|
|||||||
if (!(alter_info->flags & ~(ALTER_RENAME | ALTER_KEYS_ONOFF)) &&
|
if (!(alter_info->flags & ~(ALTER_RENAME | ALTER_KEYS_ONOFF)) &&
|
||||||
!table->s->tmp_table) // no need to touch frm
|
!table->s->tmp_table) // no need to touch frm
|
||||||
{
|
{
|
||||||
error=0;
|
|
||||||
VOID(pthread_mutex_lock(&LOCK_open));
|
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";
|
thd->proc_info="rename";
|
||||||
/* Then do a 'simple' rename of the table */
|
/* Then do a 'simple' rename of the table */
|
||||||
error=0;
|
|
||||||
if (!access(new_name_buff,F_OK))
|
if (!access(new_name_buff,F_OK))
|
||||||
{
|
{
|
||||||
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_name);
|
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_name);
|
||||||
@ -3126,31 +3148,14 @@ view_err:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
if (error == HA_ERR_WRONG_COMMAND)
|
||||||
{
|
{
|
||||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
||||||
ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA),
|
ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA),
|
||||||
table->alias);
|
table->alias);
|
||||||
error=0;
|
error= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!error)
|
if (!error)
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
@ -3168,7 +3173,7 @@ view_err:
|
|||||||
error= -1;
|
error= -1;
|
||||||
}
|
}
|
||||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
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);
|
query_cache_invalidate3(thd, table_list, 0);
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user