mariadb/mysql-test/suite/period/t/innodb_debug.test
2025-07-28 21:29:29 +02:00

221 lines
6.4 KiB
Text

--source include/have_innodb.inc
--source include/have_debug_sync.inc
--echo #
--echo # MDEV-37199 UNIQUE KEY USING HASH accepting duplicate records
--echo #
--echo ## INSERT
create table t1 (
id int, s date, e date,
period for p(s,e),
unique(id, p without overlaps)
) engine=innodb;
start transaction;
select * from t1;
--connect con1,localhost,root
insert t1 values(10, date'2010-10-10', date'2010-11-11');
delete from t1;
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
set debug_sync="innodb_row_ins_step_enter SIGNAL checked_duplicate WAIT_FOR do_insert";
--send insert t1 values(10, date'2010-09-09', date'2010-11-10')
--connect con2,localhost,root
set debug_sync="now WAIT_FOR checked_duplicate";
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
insert t1 values(10, date'2010-10-10', date'2010-11-12');
set debug_sync="now SIGNAL do_insert";
--connection con1
--error ER_DUP_ENTRY
--reap
--connection default
select * from t1;
commit;
select * from t1;
--disconnect con1
--disconnect con2
set debug_sync='RESET';
drop table t1;
--echo ## UPDATE
create table t1 (
id int, s date, e date,
period for p(s,e),
unique(id, p without overlaps)
) engine=innodb;
start transaction;
select * from t1;
--connect con1,localhost,root
insert t1 values(10, date'2010-10-10', date'2010-11-11');
delete from t1;
insert t1 values(10, date'2010-09-09', date'2010-09-10');
insert t1 values(10, date'2010-12-10', date'2010-12-12');
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
set debug_sync="innodb_row_update_for_mysql_begin SIGNAL checked_duplicate WAIT_FOR do_insert";
--send update t1 set e=e + interval 2 month where s=date'2010-09-09'
--connect con2,localhost,root
set debug_sync="now WAIT_FOR checked_duplicate";
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
update t1 set s=date'2010-10-10' where e=date'2010-12-12';
set debug_sync="now SIGNAL do_insert";
--connection con1
--error ER_DUP_ENTRY
--reap
--connection default
select * from t1;
commit;
select * from t1;
--disconnect con1
--disconnect con2
set debug_sync='RESET';
drop table t1;
--echo ## INSERT IGNORE
create table t1 (
id int, s date, e date,
period for p(s,e),
unique(id, p without overlaps)
) engine=innodb;
start transaction;
select * from t1;
--connect con1,localhost,root
insert t1 values(10, date'2010-10-10', date'2010-11-11');
delete from t1;
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
set debug_sync="innodb_row_ins_step_enter SIGNAL checked_duplicate WAIT_FOR do_insert";
--send insert ignore t1 values(10, date'2010-09-09', date'2010-11-10'),(11, date'2010-09-09', date'2010-11-10')
--connect con2,localhost,root
set debug_sync="now WAIT_FOR checked_duplicate";
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
insert t1 values(10, date'2010-10-10', date'2010-11-12');
set debug_sync="now SIGNAL do_insert";
--connection con1
--reap
--connection default
select * from t1;
commit;
select * from t1;
--disconnect con1
--disconnect con2
set debug_sync='RESET';
drop table t1;
--echo ## UPDATE IGNORE
create table t1 (
id int, s date, e date,
period for p(s,e),
unique(id, p without overlaps)
) engine=innodb;
start transaction;
select * from t1;
--connect con1,localhost,root
insert t1 values(10, date'2010-10-10', date'2010-11-11');
delete from t1;
insert t1 values(10, date'2010-09-09', date'2010-09-10');
insert t1 values(10, date'2010-12-10', date'2010-12-12');
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
set debug_sync="innodb_row_update_for_mysql_begin SIGNAL checked_duplicate WAIT_FOR do_insert";
--send update ignore t1 set e=e + interval 2 month where s=date'2010-09-09'
--connect con2,localhost,root
set debug_sync="now WAIT_FOR checked_duplicate";
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
update t1 set s=date'2010-10-10' where e=date'2010-12-12';
set debug_sync="now SIGNAL do_insert";
--connection con1
--error ER_NOT_SUPPORTED_YET
--reap
--connection default
select * from t1;
commit;
select * from t1;
--disconnect con1
--disconnect con2
set debug_sync='RESET';
drop table t1;
--echo ## UPDATE modifying PK
create table t1 (
id int, s date, e date,
period for p(s,e),
primary key (id, p without overlaps)
) engine=innodb;
start transaction;
select * from t1;
--connect con1,localhost,root
insert t1 values(10, date'2010-10-10', date'2010-11-11');
delete from t1;
insert t1 values(10, date'2010-09-09', date'2010-09-10');
insert t1 values(10, date'2010-12-10', date'2010-12-12');
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
set debug_sync="innodb_row_update_for_mysql_begin SIGNAL checked_duplicate WAIT_FOR do_insert";
--send update t1 set e=e + interval 2 month where s=date'2010-09-09'
--connect con2,localhost,root
set debug_sync="now WAIT_FOR checked_duplicate";
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
update t1 set s=date'2010-10-10' where e=date'2010-12-12';
set debug_sync="now SIGNAL do_insert";
--connection con1
--error ER_DUP_ENTRY
--reap
--connection default
select * from t1;
commit;
select * from t1;
--disconnect con1
--disconnect con2
set debug_sync='RESET';
drop table t1;
--echo ## UPDATE IGNORE modifying PK
create table t1 (
id int, s date, e date,
period for p(s,e),
primary key (id, p without overlaps)
) engine=innodb;
start transaction;
select * from t1;
--connect con1,localhost,root
insert t1 values(10, date'2010-10-10', date'2010-11-11');
delete from t1;
insert t1 values(10, date'2010-09-09', date'2010-09-10');
insert t1 values(10, date'2010-12-10', date'2010-12-12');
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
set debug_sync="innodb_row_update_for_mysql_begin SIGNAL checked_duplicate WAIT_FOR do_insert";
--send update ignore t1 set e=e + interval 2 month where s=date'2010-09-09'
--connect con2,localhost,root
set debug_sync="now WAIT_FOR checked_duplicate";
set innodb_snapshot_isolation=0;
set transaction isolation level read committed;
update t1 set s=date'2010-10-10' where e=date'2010-12-12';
set debug_sync="now SIGNAL do_insert";
--connection con1
--error ER_NOT_SUPPORTED_YET
--reap
--connection default
select * from t1;
commit;
select * from t1;
--disconnect con1
--disconnect con2
set debug_sync='RESET';
drop table t1;
--echo # End of 10.6 tests