mirror of
https://github.com/MariaDB/server.git
synced 2025-08-06 18:41:37 +02:00
221 lines
6.4 KiB
Text
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
|
|
|