mirror of
https://github.com/MariaDB/server.git
synced 2025-02-05 05:12:17 +01:00
81faf41786
- InnoDB tries to build the previous version of the record for the virtual index, but the undo log record doesn't contain virtual column information. This leads to assert failure while building the tuple.
136 lines
2.9 KiB
Text
136 lines
2.9 KiB
Text
--source include/have_debug.inc
|
|
--source include/have_innodb.inc
|
|
--source include/have_debug_sync.inc
|
|
--source include/not_embedded.inc
|
|
|
|
# Save the initial number of concurrent sessions.
|
|
--source include/count_sessions.inc
|
|
|
|
# Make sure there are no unexpected open tables from previous tests
|
|
--disable_query_log
|
|
FLUSH TABLES;
|
|
--enable_query_log
|
|
|
|
CREATE TABLE t (
|
|
a INTEGER,
|
|
b BLOB GENERATED ALWAYS AS (a) VIRTUAL,
|
|
INDEX (b(57))
|
|
)ENGINE=INNODB;
|
|
|
|
INSERT INTO t (a) VALUES (9);
|
|
BEGIN;
|
|
SAVEPOINT a;
|
|
UPDATE t set a = 12;
|
|
DELETE FROM t where a = 12;
|
|
ROLLBACK TO SAVEPOINT a;
|
|
COMMIT;
|
|
|
|
CHECK TABLE t;
|
|
|
|
SELECT * FROM t;
|
|
|
|
BEGIN;
|
|
INSERT INTO t (a) VALUES (10);
|
|
--let $shutdown_timeout= 0
|
|
--source include/restart_mysqld.inc
|
|
SELECT * FROM t;
|
|
DROP TABLE t;
|
|
|
|
CREATE TABLE t (
|
|
a INTEGER,
|
|
b BLOB GENERATED ALWAYS AS (a) VIRTUAL,
|
|
c INTEGER
|
|
)ENGINE=INNODB;
|
|
|
|
INSERT INTO t (a,c) VALUES (9, 10);
|
|
SELECT * FROM t;
|
|
|
|
connect (con1,localhost,root,,);
|
|
connection con1;
|
|
|
|
# This DEBUG_SYNC should not kick in yet, because the duplicate key will be
|
|
# detected before we get a chance to apply the online log.
|
|
|
|
SET DEBUG_SYNC = 'row_log_apply_after SIGNAL created WAIT_FOR dml_done';
|
|
--send
|
|
ALTER TABLE t ADD KEY(b(57)), ALGORITHM=INPLACE;
|
|
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR created';
|
|
BEGIN;
|
|
INSERT INTO t (a,c) VALUES (10, 12);
|
|
SELECT * FROM t;
|
|
ROLLBACK;
|
|
SET DEBUG_SYNC = 'now SIGNAL dml_done';
|
|
|
|
connection con1;
|
|
reap;
|
|
disconnect con1;
|
|
connection default;
|
|
|
|
SELECT * FROM t;
|
|
DROP TABLE t;
|
|
|
|
# drop virtual column and alter index
|
|
CREATE TABLE t (
|
|
a INT,
|
|
b INT,
|
|
c INT GENERATED ALWAYS AS(a+b),
|
|
d INT GENERATED ALWAYS AS(a+b+b),
|
|
KEY(c, d)
|
|
)ENGINE=INNODB;
|
|
|
|
INSERT INTO t (a,b) VALUES (9, 10);
|
|
SELECT * FROM t;
|
|
|
|
connect (con1,localhost,root,,);
|
|
connection con1;
|
|
|
|
# This DEBUG_SYNC should not kick in yet, because the duplicate key will be
|
|
# detected before we get a chance to apply the online log.
|
|
|
|
SET DEBUG_SYNC = 'row_log_apply_after SIGNAL created WAIT_FOR dml_done';
|
|
--send
|
|
ALTER TABLE t DROP COLUMN c, ALGORITHM=INPLACE;
|
|
|
|
connection default;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR created';
|
|
BEGIN;
|
|
INSERT INTO t (a,b) VALUES (10, 12);
|
|
SELECT * FROM t;
|
|
ROLLBACK;
|
|
SET DEBUG_SYNC = 'now SIGNAL dml_done';
|
|
|
|
connection con1;
|
|
reap;
|
|
connection default;
|
|
|
|
SELECT * FROM t;
|
|
|
|
DROP TABLE t;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
|
|
--echo #
|
|
--echo # MDEV-30597 Assertion `flag == 1' failed in
|
|
--echo # row_build_index_entry_low
|
|
--echo #
|
|
CREATE TABLE t1 (
|
|
col1 INT PRIMARY KEY, col_text TEXT,
|
|
col_text_g TEXT GENERATED ALWAYS AS (SUBSTR(col_text,1,499))
|
|
) ENGINE = InnoDB ROW_FORMAT = Compact;
|
|
connection con1;
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
connection default;
|
|
INSERT INTO t1 (col1) VALUES (1) ;
|
|
DELETE FROM t1 WHERE col1 = 1;
|
|
ALTER TABLE t1 ADD UNIQUE INDEX (col_text_g(9));
|
|
BEGIN;
|
|
INSERT INTO t1 (col1) VALUES (1);
|
|
ROLLBACK;
|
|
disconnect con1;
|
|
DROP TABLE t1;
|
|
|
|
# Wait till all disconnects are completed
|
|
--source include/wait_until_count_sessions.inc
|
|
|
|
--echo # End of 10.4 tests
|