summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/versioning/r/online.result8
-rw-r--r--mysql-test/suite/versioning/t/online.test11
-rw-r--r--storage/innobase/handler/handler0alter.cc4
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;