Commit a3f36966 authored by unknown's avatar unknown
Browse files

Added lock test on index scan

parent fc9da882
Loading
Loading
Loading
Loading
+51 −24
Original line number Diff line number Diff line
@@ -63,62 +63,89 @@ pk u o
5	5	5
insert into t1 values (1,1,1);
drop table t1;
create table t1 (x integer not null primary key, y varchar(32)) engine = ndb;
insert into t1 values (1,'one'), (2,'two'),(3,"three");
create table t1 (x integer not null primary key, y varchar(32), z integer, key(z)) engine = ndb;
insert into t1 values (1,'one',1), (2,'two',2),(3,"three",3);
begin;
select * from t1 where x = 1 for update;
x	y
1	one
x	y	z
1	one	1
begin;
select * from t1 where x = 2 for update;
x	y
2	two
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where y = 'one' or y = 'three' for update;
x	y
3	three
1	one
x	y	z
3	three	3
1	one	1
begin;
select * from t1 where x = 2 for update;
x	y
2	two
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where z > 1 and z < 3 for update;
x	y	z
2	two	2
begin;
select * from t1 where x = 1 for update;
x	y	z
1	one	1
select * from t1 where x = 2 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where x = 1 lock in share mode;
x	y
1	one
x	y	z
1	one	1
begin;
select * from t1 where x = 1 lock in share mode;
x	y
1	one
x	y	z
1	one	1
select * from t1 where x = 2 for update;
x	y
2	two
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where y = 'one' or y = 'three' lock in share mode;
x	y
3	three
1	one
x	y	z
3	three	3
1	one	1
begin;
select * from t1 where y = 'one' lock in share mode;
x	y
1	one
x	y	z
1	one	1
select * from t1 where x = 2 for update;
x	y
2	two
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where z > 1 and z < 3 lock in share mode;
x	y	z
2	two	2
begin;
select * from t1 where z = 1 lock in share mode;
x	y	z
1	one	1
select * from t1 where x = 1 for update;
x	y	z
1	one	1
select * from t1 where x = 2 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
drop table t1;
+39 −4
Original line number Diff line number Diff line
@@ -71,9 +71,9 @@ drop table t1;

# Lock for update

create table t1 (x integer not null primary key, y varchar(32)) engine = ndb;
create table t1 (x integer not null primary key, y varchar(32), z integer, key(z)) engine = ndb;

insert into t1 values (1,'one'), (2,'two'),(3,"three"); 
insert into t1 values (1,'one',1), (2,'two',2),(3,"three",3); 

# PK access
connection con1;
@@ -90,7 +90,7 @@ rollback;
connection con1;
commit;

# scan
# table scan
connection con1;
begin;
select * from t1 where y = 'one' or y = 'three' for update;
@@ -107,6 +107,23 @@ rollback;
connection con1;
commit;

# index scan
connection con1;
begin;
select * from t1 where z > 1 and z < 3 for update;

connection con2;
begin;
# Have to check with pk access here since scans take locks on
# all rows and then release them in chunks
select * from t1 where x = 1 for update;
--error 1205
select * from t1 where x = 2 for update;
rollback;

connection con1;
commit;

# share locking

# PK access
@@ -125,7 +142,7 @@ rollback;
connection con1;
commit;

# scan
# table scan
connection con1;
begin;
select * from t1 where y = 'one' or y = 'three' lock in share mode;
@@ -143,6 +160,24 @@ rollback;
connection con1;
commit;

# index scan
connection con1;
begin;
select * from t1 where z > 1 and z < 3 lock in share mode;

connection con2;
begin;
select * from t1 where z = 1 lock in share mode;
# Have to check with pk access here since scans take locks on
# all rows and then release them in chunks
select * from t1 where x = 1 for update;
--error 1205
select * from t1 where x = 2 for update;
rollback;

connection con1;
commit;

drop table t1;

# End of 4.1 tests