diff --git a/mysql-test/suite/versioning/r/alter.result b/mysql-test/suite/versioning/r/alter.result index a733f0f6bbe..96a3dc71046 100644 --- a/mysql-test/suite/versioning/r/alter.result +++ b/mysql-test/suite/versioning/r/alter.result @@ -64,6 +64,8 @@ t CREATE TABLE `t` ( `trx_end` timestamp(6) GENERATED ALWAYS AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME (`trx_start`, `trx_end`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING +alter table t drop system versioning; +ERROR HY000: System versioning field `trx_start` exists alter table t drop column trx_start, drop column trx_end; alter table t drop system versioning; show create table t; diff --git a/mysql-test/suite/versioning/t/alter.test b/mysql-test/suite/versioning/t/alter.test index 7c10b3fbc8c..faedbc0bd72 100644 --- a/mysql-test/suite/versioning/t/alter.test +++ b/mysql-test/suite/versioning/t/alter.test @@ -53,6 +53,9 @@ alter table t add system versioning; show create table t; +--error ER_VERS_SYS_FIELD_EXISTS +alter table t drop system versioning; + alter table t drop column trx_start, drop column trx_end; alter table t drop system versioning; show create table t; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 0cb6d1f8c92..489318ef98d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -8009,6 +8009,13 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, def_it.remove(); } } + else if (alter_info->flags & Alter_info::ALTER_DROP_SYSTEM_VERSIONING && + field->flags & VERS_SYSTEM_FIELD && + field->invisible < INVISIBLE_SYSTEM) + { + my_error(ER_VERS_SYS_FIELD_EXISTS, MYF(0), field->field_name.str); + goto err; + } else { /*