summaryrefslogtreecommitdiff
path: root/mysql-test/suite/versioning/t/replace.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/versioning/t/replace.test')
-rw-r--r--mysql-test/suite/versioning/t/replace.test83
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