diff --git a/mysql-test/suite/innodb/r/temporary_table.result b/mysql-test/suite/innodb/r/temporary_table.result index 43b71bb4af5..a8a073cb257 100644 --- a/mysql-test/suite/innodb/r/temporary_table.result +++ b/mysql-test/suite/innodb/r/temporary_table.result @@ -775,3 +775,18 @@ INSERT INTO t VALUES (1); START TRANSACTION READ ONLY; UPDATE t SET a = NULL; ROLLBACK; +DROP TABLE t; +# +# MDEV-29886 Assertion !index->table->is_temporary() failed +# in trx_undo_prev_version_build upon CHECK +# +CREATE TEMPORARY TABLE t (a INT, KEY(a)) ENGINE=InnoDB SELECT 1; +UPDATE t SET a=2; +CHECK TABLE t; +Table Op Msg_type Msg_text +test.t check status OK +CHECK TABLE t EXTENDED; +Table Op Msg_type Msg_text +test.t check status OK +DROP TEMPORARY TABLE t; +# End of 10.6 tests diff --git a/mysql-test/suite/innodb/t/temporary_table.test b/mysql-test/suite/innodb/t/temporary_table.test index e59f51623b7..0cc3b29feb1 100644 --- a/mysql-test/suite/innodb/t/temporary_table.test +++ b/mysql-test/suite/innodb/t/temporary_table.test @@ -613,3 +613,15 @@ INSERT INTO t VALUES (1); START TRANSACTION READ ONLY; UPDATE t SET a = NULL; ROLLBACK; +DROP TABLE t; + +--echo # +--echo # MDEV-29886 Assertion !index->table->is_temporary() failed +--echo # in trx_undo_prev_version_build upon CHECK +--echo # +CREATE TEMPORARY TABLE t (a INT, KEY(a)) ENGINE=InnoDB SELECT 1; +UPDATE t SET a=2; +CHECK TABLE t; +CHECK TABLE t EXTENDED; +DROP TEMPORARY TABLE t; +--echo # End of 10.6 tests diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 9c9a9b53c3f..d2b6bd62520 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -15220,6 +15220,7 @@ ha_innobase::check( of records in some index; to play safe, we normally use REPEATABLE READ here */ m_prebuilt->trx->isolation_level = high_level_read_only + && !m_prebuilt->table->is_temporary() ? TRX_ISO_READ_UNCOMMITTED : TRX_ISO_REPEATABLE_READ; diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index dab1ccd84b2..82079cbd06b 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -6228,6 +6228,7 @@ func_exit: ReadView check_table_extended_view; ReadView &view= prebuilt->need_to_access_clustered && + !prebuilt->table->is_temporary() && prebuilt->trx->isolation_level != TRX_ISO_READ_UNCOMMITTED ? check_table_extended_view : prebuilt->trx->read_view; if (&view == &check_table_extended_view)