mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
97041acf7f
TokuDB testsuite makes use of includes not found in our default 10.0. Cherry pick them from Percona Server's include directory.
91 lines
2.8 KiB
PHP
91 lines
2.8 KiB
PHP
eval set session autocommit=$autocommit;
|
|
let $is_gaplock_target = `SELECT @@autocommit = 0 && '$expect_gap_lock_errors' = 1`;
|
|
|
|
if ($is_gaplock_target)
|
|
{
|
|
## single-table insert,update,delete
|
|
insert into gap1 (id1, id2, id3) values (-1,-1,-1);
|
|
insert into gap1 (id1, id2, id3) values (-1,-1,-1)
|
|
on duplicate key update value=100;
|
|
--error ER_UNKNOWN_ERROR
|
|
update gap1 set value=100 where id1=1;
|
|
update gap1 set value=100 where id1=1 and id2=1 and id3=1;
|
|
--error ER_UNKNOWN_ERROR
|
|
delete from gap1 where id1=2;
|
|
delete from gap1 where id1=-1 and id2=-1 and id3=-1;
|
|
commit;
|
|
|
|
## multi-table statements (preventing all gap locks with autocommit)
|
|
# insert into select
|
|
--error ER_UNKNOWN_ERROR
|
|
insert into gap2 select * from gap1;
|
|
--error ER_UNKNOWN_ERROR
|
|
insert into gap2 select * from gap1 where id1=1;
|
|
insert into gap2 select * from gap1 where id1=1 and id2=1 and id3=1;
|
|
|
|
# create table select
|
|
create table t4 select * from gap1 where id1=1 and id2=1 and id3=1;
|
|
drop table t4;
|
|
--error ER_UNKNOWN_ERROR
|
|
create table t4 select * from gap1;
|
|
--error ER_UNKNOWN_ERROR
|
|
create table t4 select * from gap1 where id1=1;
|
|
|
|
# update join
|
|
update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 set gap1.value=100 where gap2.id1=3
|
|
and gap2.id2=3 and gap2.id3=3;
|
|
--error ER_UNKNOWN_ERROR
|
|
update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 set gap1.value=100 where gap2.id1=3;
|
|
--error ER_UNKNOWN_ERROR
|
|
update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 join gap3 on gap1.id1=gap3.id
|
|
set gap1.value=100 where gap2.id1=3;
|
|
--error ER_UNKNOWN_ERROR
|
|
update gap1 set gap1.value= (select count(*) from gap2);
|
|
|
|
# delete join
|
|
delete gap1 from gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 where gap2.id1=3
|
|
and gap2.id2=3 and gap2.id3=3;
|
|
--error ER_UNKNOWN_ERROR
|
|
delete gap1 from gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 where gap2.id1=3;
|
|
|
|
# select join / self join
|
|
--error ER_UNKNOWN_ERROR
|
|
select * from gap1, gap2 limit 1 for update;
|
|
--error ER_UNKNOWN_ERROR
|
|
select * from gap1 a, gap1 b limit 1 for update;
|
|
|
|
# unique secondary key
|
|
create table u1(
|
|
c1 int,
|
|
c2 int,
|
|
c3 int,
|
|
c4 int,
|
|
primary key (c1, c2, c3),
|
|
unique key (c3, c1)
|
|
);
|
|
begin;
|
|
insert into u1 values (1,1,1,1);
|
|
commit;
|
|
begin;
|
|
insert into u1 values (1,2,1,1) on duplicate key update c4=10;
|
|
commit;
|
|
begin;
|
|
select * from u1 where c3=1 and c1 = 1 for update;
|
|
--error ER_UNKNOWN_ERROR
|
|
select * from u1 where c3=1 for update;
|
|
commit;
|
|
drop table u1;
|
|
}
|
|
|
|
if (!$is_gaplock_target)
|
|
{
|
|
# autocommit doesn't prevent single table operations
|
|
insert into gap1 (id1, id2, id3) values (-1,-1,-1);
|
|
insert into gap1 (id1, id2, id3) values (-1,-1,-1)
|
|
on duplicate key update value=100;
|
|
update gap1 set value=100 where id1=1;
|
|
update gap1 set value=100 where id1=1 and id2=1 and id3=1;
|
|
delete from gap1 where id1=2;
|
|
delete from gap1 where id1=-1 and id2=-1 and id3=-1;
|
|
commit;
|
|
}
|