From aa08a7442a5141750de96353132c7799e10c9302 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 27 Sep 2022 13:44:30 +0300 Subject: [PATCH] MDEV-29620 Assertion `next_insert_id == 0' failed in handler::ha_external_lock ha_release_auto_increment() must be done before F_UNLCK. Non-atomic case is handled by select_insert::binlog_query(). --- mysql-test/main/create_or_replace.result | 5 +++++ mysql-test/main/create_or_replace.test | 6 ++++++ sql/sql_insert.cc | 2 ++ 3 files changed, 13 insertions(+) diff --git a/mysql-test/main/create_or_replace.result b/mysql-test/main/create_or_replace.result index 31a3d549472..7dd930ff048 100644 --- a/mysql-test/main/create_or_replace.result +++ b/mysql-test/main/create_or_replace.result @@ -912,3 +912,8 @@ x 77 drop table t; set sql_mode= default; +# +# MDEV-29620 Assertion `next_insert_id == 0' failed in handler::ha_external_lock +# +create or replace table t1 (i serial) as select * from (values(1), (2)) dt; +drop table t1; diff --git a/mysql-test/main/create_or_replace.test b/mysql-test/main/create_or_replace.test index 205355911e8..83fc1688e23 100644 --- a/mysql-test/main/create_or_replace.test +++ b/mysql-test/main/create_or_replace.test @@ -697,3 +697,9 @@ alter table mysql.innodb_index_stats modify stat_description varchar(1024) not n select * from t; drop table t; set sql_mode= default; + +--echo # +--echo # MDEV-29620 Assertion `next_insert_id == 0' failed in handler::ha_external_lock +--echo # +create or replace table t1 (i serial) as select * from (values(1), (2)) dt; +drop table t1; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 163dd45f50c..e2ec0507cdd 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -4289,6 +4289,8 @@ bool select_insert::prepare_eof() { DBUG_ASSERT(table->s->tmp_table); + table->file->ha_release_auto_increment(); + /* Note: InnoDB does autocommit on external unlock. We cannot do commit twice and we must commit after binlog