diff options
author | Eugene Kosov <claprix@yandex.ru> | 2021-09-16 16:52:20 +0600 |
---|---|---|
committer | Eugene Kosov <claprix@yandex.ru> | 2021-09-16 16:52:20 +0600 |
commit | 5b0a76078a8ea38e8e19e3e2c49f0f7e091e2f72 (patch) | |
tree | 5e940dd1374a14c4a6bdd66a1464de905d25af7b | |
parent | 689b8d060ac890dcf1071b34a68234b30005e9a1 (diff) | |
download | mariadb-git-bb-10.4-kevgs.tar.gz |
MDEV-26621 assertion failue "index->table->persistent_autoinc" in /storage/innobase/btr/btr0btr.cc during IMPORTbb-10.4-kevgs
dict_index_t::clear_instant_alter(): when searhing for an AUTO_INCREMENT column
don't skip the beginning of the list because the field can be at the beginning of the list
-rw-r--r-- | mysql-test/suite/innodb/r/instant_alter_import.result | 8 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/instant_alter_import.test | 19 | ||||
-rw-r--r-- | storage/innobase/include/dict0mem.h | 2 |
3 files changed, 28 insertions, 1 deletions
diff --git a/mysql-test/suite/innodb/r/instant_alter_import.result b/mysql-test/suite/innodb/r/instant_alter_import.result index 2d9a39f7886..008a26ea6af 100644 --- a/mysql-test/suite/innodb/r/instant_alter_import.result +++ b/mysql-test/suite/innodb/r/instant_alter_import.result @@ -70,3 +70,11 @@ select * from t1; ERROR HY000: Tablespace has been discarded for table `t1` drop table t2; drop table t1; +CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT) ENGINE=INNODB; +CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT, i2 INT) ENGINE=INNODB; +ALTER TABLE t2 DROP COLUMN i2, ALGORITHM=INSTANT; +ALTER TABLE t2 DISCARD TABLESPACE; +FLUSH TABLE t1 FOR EXPORT; +UNLOCK TABLES; +ALTER TABLE t2 IMPORT TABLESPACE; +DROP TABLE t2, t1; diff --git a/mysql-test/suite/innodb/t/instant_alter_import.test b/mysql-test/suite/innodb/t/instant_alter_import.test index fb187debb51..d01f4325f1e 100644 --- a/mysql-test/suite/innodb/t/instant_alter_import.test +++ b/mysql-test/suite/innodb/t/instant_alter_import.test @@ -82,3 +82,22 @@ select * from t1; drop table t2; drop table t1; + + +--let $MYSQLD_DATADIR= `SELECT @@datadir` + +CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT) ENGINE=INNODB; + +CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT, i2 INT) ENGINE=INNODB; +ALTER TABLE t2 DROP COLUMN i2, ALGORITHM=INSTANT; +ALTER TABLE t2 DISCARD TABLESPACE; + +FLUSH TABLE t1 FOR EXPORT; + +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd +--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg + +UNLOCK TABLES; +ALTER TABLE t2 IMPORT TABLESPACE; + +DROP TABLE t2, t1; diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index b0da5b4dc39..fe029fc9fcf 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -2440,7 +2440,7 @@ inline void dict_index_t::clear_instant_alter() { return a.col->ind < b.col->ind; }); table->instant = NULL; if (ai_col) { - auto a = std::find_if(begin, end, + auto a = std::find_if(fields, end, [ai_col](const dict_field_t& f) { return f.col == ai_col; }); table->persistent_autoinc = (a == end) ? 0 : 1 + (a - fields); |