diff options
-rw-r--r-- | mysql-test/suite/versioning/r/online.result | 8 | ||||
-rw-r--r-- | mysql-test/suite/versioning/t/online.test | 11 | ||||
-rw-r--r-- | storage/innobase/handler/handler0alter.cc | 4 |
3 files changed, 21 insertions, 2 deletions
diff --git a/mysql-test/suite/versioning/r/online.result b/mysql-test/suite/versioning/r/online.result index 5f5fde3b130..d20b7444350 100644 --- a/mysql-test/suite/versioning/r/online.result +++ b/mysql-test/suite/versioning/r/online.result @@ -135,5 +135,13 @@ alter table t1 drop system versioning; create or replace table t1 (a int, b int) with system versioning; insert into t1 values (1, 1); alter table t1 drop system versioning; +# +# MDEV-18173 Assertion `o->ind == vers_end' or `o->ind == vers_start' failed in dict_table_t::instant_column +# +set @@system_versioning_alter_history= keep; +create or replace table t1 (pk integer primary key, a int, b int, v int as (a)) +with system versioning; +alter table t1 force; +alter table t1 drop column b; drop database test; create database test; diff --git a/mysql-test/suite/versioning/t/online.test b/mysql-test/suite/versioning/t/online.test index a0dc422b4c6..edf592d3f14 100644 --- a/mysql-test/suite/versioning/t/online.test +++ b/mysql-test/suite/versioning/t/online.test @@ -172,5 +172,16 @@ set debug_dbug= default; } alter table t1 drop system versioning; +--echo # +--echo # MDEV-18173 Assertion `o->ind == vers_end' or `o->ind == vers_start' failed in dict_table_t::instant_column +--echo # +set @@system_versioning_alter_history= keep; +create or replace table t1 (pk integer primary key, a int, b int, v int as (a)) +with system versioning; + +alter table t1 force; +alter table t1 drop column b; + + drop database test; create database test; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index a6fa08b3679..2295e3fa5bf 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -4241,9 +4241,9 @@ innobase_build_col_map( col_map[old_i - num_old_v] = i; if (old_table->versioned()) { if (old_i == old_table->vers_start) { - new_table->vers_start = i; + new_table->vers_start = i + num_v; } else if (old_i == old_table->vers_end) { - new_table->vers_end = i; + new_table->vers_end = i + num_v; } } goto found_col; |