MDEV-35287 ER_KEY_NOT_FOUND upon INSERT into InnoDB table with vector key under READ COMMITTED

InnoDB cannot enable internal bulk insert for hlindex tables
This commit is contained in:
Sergei Golubchik 2024-10-31 08:37:23 +01:00
parent ad33ffc0b5
commit cbc2812f80
3 changed files with 24 additions and 0 deletions

View file

@ -186,3 +186,13 @@ drop table t;
#
CREATE TABLE t (pk INT PRIMARY KEY, v VECTOR(5) NOT NULL, VECTOR(v)) ENGINE=InnoDB SELECT 1 AS pk, x'f09baa3ea172763f123def3e0c7fe53e288bf33e' AS v;
DROP TABLE t;
#
# MDEV-35287 ER_KEY_NOT_FOUND upon INSERT into InnoDB table with vector key under READ COMMITTED
#
set unique_checks=0, foreign_key_checks=0;
set session transaction isolation level read committed;
create table t (v vector(1) not null, vector (v)) engine=innodb;
insert into t values (0x31313131),(0x32323232);
drop table t;
set unique_checks=default, foreign_key_checks=default;
set session transaction isolation level repeatable read;

View file

@ -182,3 +182,14 @@ drop table t;
--echo #
CREATE TABLE t (pk INT PRIMARY KEY, v VECTOR(5) NOT NULL, VECTOR(v)) ENGINE=InnoDB SELECT 1 AS pk, x'f09baa3ea172763f123def3e0c7fe53e288bf33e' AS v;
DROP TABLE t;
--echo #
--echo # MDEV-35287 ER_KEY_NOT_FOUND upon INSERT into InnoDB table with vector key under READ COMMITTED
--echo #
set unique_checks=0, foreign_key_checks=0;
set session transaction isolation level read committed;
create table t (v vector(1) not null, vector (v)) engine=innodb;
insert into t values (0x31313131),(0x32323232);
drop table t;
set unique_checks=default, foreign_key_checks=default;
set session transaction isolation level repeatable read;

View file

@ -15948,6 +15948,9 @@ ha_innobase::external_lock(
trx_t* trx = m_prebuilt->trx;
ut_ad(m_prebuilt->table);
if (table->s->tmp_table == INTERNAL_TMP_TABLE)
trx->check_unique_secondary = true;
/* Statement based binlogging does not work in isolation level
READ UNCOMMITTED and READ COMMITTED since the necessary
locks cannot be taken. In this case, we print an