Commit c8c51cee authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-7390 alter online table xxxx (no options) should be possible

Merge branch 'openquery:mdev-7390-alter-online-table-xx-possible-10.0' into 10.0
parents a2297506 532de702
...@@ -1693,8 +1693,10 @@ INSERT INTO tm1 VALUES (1,1,1), (2,2,2); ...@@ -1693,8 +1693,10 @@ INSERT INTO tm1 VALUES (1,1,1), (2,2,2);
INSERT INTO tm2 VALUES (1,1,1), (2,2,2); INSERT INTO tm2 VALUES (1,1,1), (2,2,2);
ALTER TABLE ti1; ALTER TABLE ti1;
affected rows: 0 affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE tm1; ALTER TABLE tm1;
affected rows: 0 affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE ti1 ADD COLUMN d VARCHAR(200); ALTER TABLE ti1 ADD COLUMN d VARCHAR(200);
affected rows: 0 affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0 info: Records: 0 Duplicates: 0 Warnings: 0
......
...@@ -11,6 +11,10 @@ alter online table t1 comment "new comment"; ...@@ -11,6 +11,10 @@ alter online table t1 comment "new comment";
ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE.
alter online table t1 rename to t2; alter online table t1 rename to t2;
ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE.
alter online table t1 algorithm=INPLACE, lock=NONE;
alter online table t1;
alter table t1 algorithm=INPLACE;
alter table t1 lock=NONE;
drop table t1; drop table t1;
create temporary table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b')); 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); insert into t1 (a) values (1),(2),(3);
......
...@@ -528,6 +528,7 @@ SET DEBUG_SYNC= 'RESET'; ...@@ -528,6 +528,7 @@ SET DEBUG_SYNC= 'RESET';
# This should not do anything # This should not do anything
ALTER TABLE t1; ALTER TABLE t1;
affected rows: 0 affected rows: 0
info: Records: 0 Duplicates: 0 Warnings: 0
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuild'; SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuild';
# Check that we rebuild the table # Check that we rebuild the table
ALTER TABLE t1 engine=innodb; ALTER TABLE t1 engine=innodb;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
drop table if exists t1,t2,t3; drop table if exists t1,t2,t3;
--enable_warnings --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')); create table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b'));
...@@ -24,6 +24,13 @@ alter online table t1 comment "new comment"; ...@@ -24,6 +24,13 @@ alter online table t1 comment "new comment";
--error ER_ALTER_OPERATION_NOT_SUPPORTED --error ER_ALTER_OPERATION_NOT_SUPPORTED
alter online table t1 rename to t2; alter online table t1 rename to t2;
# No OPs
alter online table t1 algorithm=INPLACE, lock=NONE;
alter online table t1;
alter table t1 algorithm=INPLACE;
alter table t1 lock=NONE;
drop table t1; drop table t1;
# #
......
...@@ -8429,6 +8429,23 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, ...@@ -8429,6 +8429,23 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
mysql_audit_alter_table(thd, table_list); mysql_audit_alter_table(thd, table_list);
THD_STAGE_INFO(thd, stage_setup); THD_STAGE_INFO(thd, stage_setup);
handle_if_exists_options(thd, table, alter_info);
/*
Look if we have to do anything at all.
ALTER can become NOOP after handling
the IF (NOT) EXISTS options.
*/
if (alter_info->flags == 0)
{
my_snprintf(alter_ctx.tmp_name, sizeof(alter_ctx.tmp_name),
ER(ER_INSERT_INFO), 0L, 0L,
thd->get_stmt_da()->current_statement_warn_count());
my_ok(thd, 0L, 0L, alter_ctx.tmp_name);
DBUG_RETURN(false);
}
if (!(alter_info->flags & ~(Alter_info::ALTER_RENAME | if (!(alter_info->flags & ~(Alter_info::ALTER_RENAME |
Alter_info::ALTER_KEYS_ONOFF)) && Alter_info::ALTER_KEYS_ONOFF)) &&
alter_info->requested_algorithm != alter_info->requested_algorithm !=
...@@ -8449,22 +8466,6 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, ...@@ -8449,22 +8466,6 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
DBUG_RETURN(res); DBUG_RETURN(res);
} }
handle_if_exists_options(thd, table, alter_info);
/*
Look if we have to do anything at all.
Normally ALTER can become NOOP only after handling
the IF (NOT) EXISTS options.
*/
if (alter_info->flags == 0)
{
my_snprintf(alter_ctx.tmp_name, sizeof(alter_ctx.tmp_name),
ER(ER_INSERT_INFO), 0L, 0L,
thd->get_stmt_da()->current_statement_warn_count());
my_ok(thd, 0L, 0L, alter_ctx.tmp_name);
DBUG_RETURN(false);
}
/* We have to do full alter table. */ /* We have to do full alter table. */
#ifdef WITH_PARTITION_STORAGE_ENGINE #ifdef WITH_PARTITION_STORAGE_ENGINE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment