diff options
Diffstat (limited to 'mysql-test/suite/versioning/t/replace.test')
-rw-r--r-- | mysql-test/suite/versioning/t/replace.test | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/mysql-test/suite/versioning/t/replace.test b/mysql-test/suite/versioning/t/replace.test index 83489f4a4b9..9c4f5b194c9 100644 --- a/mysql-test/suite/versioning/t/replace.test +++ b/mysql-test/suite/versioning/t/replace.test @@ -75,6 +75,89 @@ replace into t1 values (1),(2); --error ER_DUP_ENTRY replace into t1 values (1),(2); +--connection default +set timestamp=default; drop table t1; + +--echo # +--echo # MDEV-15990: REPLACE on a precise-versioned table +--echo # returns duplicate key error (ER_DUP_ENTRY) + +--replace_result $sys_datatype_expl SYS_DATATYPE "$KEY_TYPE" KEY_TYPE +eval create or replace table t( + id int, + $KEY_TYPE(id), + x int, + row_start $sys_datatype_expl as row start invisible, + row_end $sys_datatype_expl as row end invisible, + period for system_time(row_start, row_end) +) with system versioning; + +replace t values (1, 3), (1, 30), (1, 300); + + +if ($MTR_COMBINATION_TIMESTAMP) +{ + let $vers_current_value= FROM_UNIXTIME(@@timestamp); +} +if ($MTR_COMBINATION_TRX_ID) +{ + let $vers_current_value= trx_id from information_schema.innodb_trx + where trx_mysql_thread_id = connection_id(); +} + + +create temporary table log(id int key auto_increment, s char(30)); +--replace_result $vers_current_value VERS_CURRENT_VALUE +eval create trigger tr1del before delete on t + for each row insert log(s) select 'DEL BEFORE' union + select concat(id, ' ', x, ' ', + if(row_start = (select $vers_current_value), + "CURRENT", "OTHER"), + ' ', check_row(row_start, row_end)) + from t for system_time all; + +--replace_result $vers_current_value VERS_CURRENT_VALUE +eval create trigger tr2del after delete on t + for each row insert log(s) select 'DEL AFTER' union + select concat(id, ' ', x, ' ', + if(row_start = (select $vers_current_value), + "CURRENT", "OTHER"), + ' ', check_row(row_start, row_end)) + from t for system_time all; +replace t values (1, 4), (1, 40), (1, 400); + +select *, check_row(row_start, row_end), row_start != 0 as start_nonzero + from t for system_time all order by x, row_end; +select s from log order by id; + +--echo # ensure that row_start is not duplicated +select count(row_start) as empty from t for system_time all + group by row_start having count(row_start) > 1; + +drop table t; + +--echo # Replace on unversioned field should create history record +--replace_result $sys_datatype_expl SYS_DATATYPE +eval create table t( + id int primary key, + x int without system versioning, + row_start $sys_datatype_expl as row start invisible, + row_end $sys_datatype_expl as row end invisible, + period for system_time(row_start, row_end) +) with system versioning; + +insert t values (1, 2); +replace t values (1, 3); +select *, check_row(row_start, row_end), row_start != 0 as start_nonzero + from t for system_time all order by x; + +--echo # ensure that row_start is not duplicated +select count(row_start) as empty from t for system_time all + group by row_start having count(row_start) > 1; + +drop table t; +drop table log; + --source suite/versioning/common_finish.inc |