1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-19486 Server crashes in row_upd or row_upd_del_mark_clust_rec on REPLACE into a versioned table

row_insert_for_mysql(): InnoDB sets values for row_start and row_end.
And this function used to return those values to server in
ha_innobase::write_row().  This buggy behavior was removed. Also,
a piece of code in this function was reformatted.

upd_node_t::make_versioned_helper(): Assert that the preallocated size
of the update vector is not exceeded.
This commit is contained in:
Eugene Kosov
2019-05-19 23:15:55 +03:00
committed by Marko Mäkelä
parent 7056812ed1
commit 48a662dae5
4 changed files with 45 additions and 14 deletions

View File

@ -35,6 +35,23 @@ insert into t1 values (1,1);
create or replace table t2 (c int);
create or replace view v as select t1.* from t1 join t2;
replace into v (a, b) select a, b from t1;
drop table t1;
--replace_result $sys_datatype_expl SYS_DATATYPE
eval CREATE TABLE t1 (
pk INT AUTO_INCREMENT,
f INT,
row_start $sys_datatype_expl AS ROW START INVISIBLE,
row_end $sys_datatype_expl AS ROW END INVISIBLE,
PRIMARY KEY(pk),
UNIQUE(f),
PERIOD FOR SYSTEM_TIME(row_start, row_end)
) WITH SYSTEM VERSIONING;
INSERT INTO t1 () VALUES (),(),(),(),(),();
UPDATE IGNORE t1 SET f = 1;
REPLACE t1 SELECT * FROM t1;
DROP TABLE t1;
drop database test;
create database test;