diff --git a/mysql-test/suite/versioning/r/select.result b/mysql-test/suite/versioning/r/select.result index c7dab825c3d..ea7757b8160 100644 --- a/mysql-test/suite/versioning/r/select.result +++ b/mysql-test/suite/versioning/r/select.result @@ -368,9 +368,15 @@ create or replace table t2 (b int); create or replace view v1 as select a, sys_trx_start, sys_trx_end from t1 where a > round(rand()*1000); select * from v1 natural join t2; a b +### Issue #406, MDEV-14633 Assertion on TRT read +create or replace table t1 (pk int primary key, i int, t time, key (i)) with system versioning; +insert into t1 values (1, 10, '15:01:53'), (2, 20, '00:00:00'); +delete from t1; +select * from t1 where t = '00:00:00' and i > 0 and sys_trx_end <> '2012-12-12 00:00:00'; +pk i t drop view v1; drop table t1, t2; -call innodb_verify_vtq(32); +call innodb_verify_vtq(34); No A B C D 1 1 1 1 1 2 1 1 1 1 @@ -404,3 +410,5 @@ No A B C D 30 1 1 1 1 31 1 1 1 1 32 1 1 1 1 +33 1 1 1 1 +34 1 1 1 1 diff --git a/mysql-test/suite/versioning/t/select.test b/mysql-test/suite/versioning/t/select.test index b80be9590c5..3ec0451e214 100644 --- a/mysql-test/suite/versioning/t/select.test +++ b/mysql-test/suite/versioning/t/select.test @@ -254,9 +254,17 @@ create or replace table t2 (b int); create or replace view v1 as select a, sys_trx_start, sys_trx_end from t1 where a > round(rand()*1000); select * from v1 natural join t2; +--echo ### Issue #406, MDEV-14633 Assertion on TRT read +create or replace table t1 (pk int primary key, i int, t time, key (i)) with system versioning; +insert into t1 values (1, 10, '15:01:53'), (2, 20, '00:00:00'); +delete from t1; +--disable_warnings +select * from t1 where t = '00:00:00' and i > 0 and sys_trx_end <> '2012-12-12 00:00:00'; +--enable_warnings + drop view v1; drop table t1, t2; -call innodb_verify_vtq(32); +call innodb_verify_vtq(34); -- source suite/versioning/common_finish.inc diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index db76a354f03..e43a0fb76f0 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -5736,7 +5736,14 @@ lock_table_wait: normal_return: /*-------------------------------------------------------------*/ - que_thr_stop_for_mysql_no_error(thr, trx); + { + /* handler_index_cond_check() may pull TR_table search + which initates another row_search_mvcc(). */ + ulint n_active_thrs= trx->lock.n_active_thrs; + trx->lock.n_active_thrs= 1; + que_thr_stop_for_mysql_no_error(thr, trx); + trx->lock.n_active_thrs= n_active_thrs - 1; + } mtr_commit(&mtr);