From 113eae6572456821f1253bbd12918e15f98322ac 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 02c7e5ac69144..9d5b2a98af60c 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 be8037abe11f6..96700eff02ca6 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 48aac77921596..06c7d98f0160e 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -8429,6 +8429,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 @@ -8447,7 +8448,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.