|
The function row_build_index_entry_low() is attempting to fetch the value of a virtual TEXT column from a cache of stored off-page column prefixes, causing a failure.
Bug #27968952 INNODB CRASH/CORRUPTION WITH TEXT PREFIX INDEXES in MySQL 5.7.24 addresses this.
Here is a little clearer and somewhat extended test case:
CREATE TABLE t1(
|
a INT NOT NULL UNIQUE,
|
b INT NOT NULL,
|
c TEXT GENERATED ALWAYS AS (a <> b) VIRTUAL,
|
d TEXT NOT NULL,
|
UNIQUE KEY (c(1)), KEY(d(1))
|
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
SET @t = REPEAT('t',@@innodb_page_size);
|
INSERT INTO t1 (a,b,d) VALUES (1,0,@t), (0,0,@t);
|
--error ER_DUP_ENTRY
|
UPDATE t1 SET b = a;
|
REPLACE INTO t1 SET a = 0, b = 1, d = 'd';
|
SELECT * FROM t1;
|
CHECK TABLE t1;
|
DROP TABLE t1;
|
|
CREATE TABLE t1(
|
a VARCHAR(1000) GENERATED ALWAYS AS ('1') VIRTUAL,
|
b VARCHAR(1000) NOT NULL,
|
c VARCHAR(1000) GENERATED ALWAYS AS (b) STORED,
|
KEY (b(1)),
|
KEY (a(1))
|
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
INSERT INTO t1(b) VALUES(REPEAT('b',1000));
|
DELETE FROM t1;
|
DROP TABLE t1;
|
|
10.2 a21e01a53d309c4c949d41f85a43211008bac1fc
|
mysqltest: At line …: query 'UPDATE t1 SET b = a' failed with wrong errno 2013: 'Lost connection to MySQL server during query', instead of 1062...
|
…
|
Version: '10.2.19-MariaDB-debug-log' socket: '/dev/shm/10.2/mysql-test/var/tmp/mysqld.1.sock' port: 16000 Source distribution
|
2018-10-25 16:57:29 140274706073344 [ERROR] InnoDB: Record in index `c` of table `test`.`t1` was not found on update: TUPLE (info_bits=0, 2 fields): {[1]t(0x74),[4] (0x80000001)} at: COMPACT RECORD(info_bits=0, 2 fields): {[1]1(0x31),[4] (0x80000001)}
|
mysqld: /mariadb/10.2m/storage/innobase/row/row0upd.cc:2436: dberr_t row_upd_sec_index_entry(upd_node_t*, que_thr_t*): Assertion `0' failed.
|
|