From 2bb0e7135802d64ad7c1c633059e1f29b3062858 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 12 Mar 2015 07:08:31 +1100 Subject: [PATCH] Alter online table x (no options) possible This no-op of an operations should be able to occur without locks and occur online. --- mysql-test/r/alter_table_online.result | 1 + mysql-test/t/alter_table_online.test | 6 +++++- sql/sql_table.cc | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/alter_table_online.result b/mysql-test/r/alter_table_online.result index 02c7e5ac691..9d5b2a98af6 100644 --- a/mysql-test/r/alter_table_online.result +++ b/mysql-test/r/alter_table_online.result @@ -11,6 +11,7 @@ alter online table t1 comment "new comment"; ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. alter online table t1 rename to t2; ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. +alter online table t1 algorithm=INPLACE, lock=NONE; drop table t1; create temporary table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b')); insert into t1 (a) values (1),(2),(3); diff --git a/mysql-test/t/alter_table_online.test b/mysql-test/t/alter_table_online.test index be8037abe11..96700eff02c 100644 --- a/mysql-test/t/alter_table_online.test +++ b/mysql-test/t/alter_table_online.test @@ -7,7 +7,7 @@ drop table if exists t1,t2,t3; --enable_warnings # -# Test of things that can be done online +# Test of things that can not be done online # create table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b')); @@ -24,6 +24,10 @@ alter online table t1 comment "new comment"; --error ER_ALTER_OPERATION_NOT_SUPPORTED alter online table t1 rename to t2; +# No OPs + +alter online table t1 algorithm=INPLACE, lock=NONE; + drop table t1; # diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 46591e8b5c1..1dd2b16608d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -8431,6 +8431,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, THD_STAGE_INFO(thd, stage_setup); if (!(alter_info->flags & ~(Alter_info::ALTER_RENAME | Alter_info::ALTER_KEYS_ONOFF)) && + alter_info->flags != 0 && alter_info->requested_algorithm != Alter_info::ALTER_TABLE_ALGORITHM_COPY && !table->s->tmp_table) // no need to touch frm @@ -8449,7 +8450,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, DBUG_RETURN(res); } - handle_if_exists_options(thd, table, alter_info); + if (alter_info->flags != 0) + handle_if_exists_options(thd, table, alter_info); /* Look if we have to do anything at all.