mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
MDEV-25534 Assertion lock_table_has...LOCK_IX
ha_innobase::start_stmt(): Always set m_prebuilt->sql_stat_start. row_search_mvcc(): Cleanup: Simplify debug assertions.
This commit is contained in:
parent
a29618f3bd
commit
98e3034eea
4 changed files with 45 additions and 7 deletions
|
@ -159,3 +159,18 @@ a
|
|||
1
|
||||
2
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-25534 Assertion lock_table_has...LOCK_IX
|
||||
#
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET autocommit=0;
|
||||
LOCK TABLE t1 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
COMMIT;
|
||||
CREATE TEMPORARY TABLE t0 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t0 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
COMMIT;
|
||||
SET autocommit=1;
|
||||
DROP TABLE t1;
|
||||
DROP TEMPORARY TABLE t0;
|
||||
|
|
|
@ -167,3 +167,19 @@ SET GLOBAL innodb_limit_optimistic_insert_debug = @save_limit;
|
|||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25534 Assertion lock_table_has...LOCK_IX
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET autocommit=0;
|
||||
LOCK TABLE t1 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
COMMIT;
|
||||
CREATE TEMPORARY TABLE t0 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t0 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
COMMIT;
|
||||
SET autocommit=1;
|
||||
DROP TABLE t1;
|
||||
DROP TEMPORARY TABLE t0;
|
||||
|
|
|
@ -15279,7 +15279,6 @@ ha_innobase::start_stmt(
|
|||
/* fall through */
|
||||
default:
|
||||
trx->end_bulk_insert(*m_prebuilt->table);
|
||||
m_prebuilt->sql_stat_start = TRUE;
|
||||
if (!trx->bulk_insert) {
|
||||
break;
|
||||
}
|
||||
|
@ -15287,6 +15286,8 @@ ha_innobase::start_stmt(
|
|||
trx->last_sql_stat_start.least_undo_no = trx->undo_no;
|
||||
}
|
||||
|
||||
m_prebuilt->sql_stat_start = TRUE;
|
||||
|
||||
if (m_prebuilt->table->is_temporary()
|
||||
&& m_mysql_has_locked
|
||||
&& m_prebuilt->select_lock_type == LOCK_NONE) {
|
||||
|
|
|
@ -4559,16 +4559,22 @@ aborted:
|
|||
spatial_search = dict_index_is_spatial(index)
|
||||
&& mode >= PAGE_CUR_CONTAIN;
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
/* The state of a running trx can only be changed by the
|
||||
thread that is currently serving the transaction. Because we
|
||||
are that thread, we can read trx->state without holding any
|
||||
mutex. */
|
||||
ut_ad(prebuilt->sql_stat_start
|
||||
|| trx->state == TRX_STATE_ACTIVE
|
||||
|| (prebuilt->table->no_rollback()
|
||||
&& trx->state == TRX_STATE_NOT_STARTED));
|
||||
|
||||
ut_ad(!trx_is_started(trx) || trx->state == TRX_STATE_ACTIVE);
|
||||
switch (trx->state) {
|
||||
case TRX_STATE_ACTIVE:
|
||||
break;
|
||||
case TRX_STATE_NOT_STARTED:
|
||||
ut_ad(prebuilt->sql_stat_start
|
||||
|| prebuilt->table->no_rollback());
|
||||
break;
|
||||
default:
|
||||
ut_ad("invalid trx->state" == 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
ut_ad(prebuilt->sql_stat_start
|
||||
|| prebuilt->select_lock_type != LOCK_NONE
|
||||
|
|
Loading…
Add table
Reference in a new issue