mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into mockturtle.local:/home/dlenev/src/mysql-5.0-bg20390-2
This commit is contained in:
@ -87,11 +87,27 @@ x y z
|
|||||||
rollback;
|
rollback;
|
||||||
commit;
|
commit;
|
||||||
begin;
|
begin;
|
||||||
|
select * from t1 where y = 'one' or y = 'three' for update;
|
||||||
|
x y z
|
||||||
|
# # #
|
||||||
|
# # #
|
||||||
|
begin;
|
||||||
|
select * from t1 where x = 2 for update;
|
||||||
|
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' order by x for update;
|
select * from t1 where y = 'one' or y = 'three' order by x for update;
|
||||||
x y z
|
x y z
|
||||||
1 one 1
|
1 one 1
|
||||||
3 three 3
|
3 three 3
|
||||||
begin;
|
begin;
|
||||||
|
select * from t1 where x = 2 for update;
|
||||||
|
x y z
|
||||||
|
2 two 2
|
||||||
select * from t1 where x = 1 for update;
|
select * from t1 where x = 1 for update;
|
||||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
rollback;
|
rollback;
|
||||||
@ -124,6 +140,22 @@ ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
|||||||
rollback;
|
rollback;
|
||||||
commit;
|
commit;
|
||||||
begin;
|
begin;
|
||||||
|
select * from t1 where y = 'one' or y = 'three' lock in share mode;
|
||||||
|
x y z
|
||||||
|
# # #
|
||||||
|
# # #
|
||||||
|
begin;
|
||||||
|
select * from t1 where y = 'one' lock in share mode;
|
||||||
|
x y z
|
||||||
|
1 one 1
|
||||||
|
select * from t1 where x = 2 for update;
|
||||||
|
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' order by x lock in share mode;
|
select * from t1 where y = 'one' or y = 'three' order by x lock in share mode;
|
||||||
x y z
|
x y z
|
||||||
1 one 1
|
1 one 1
|
||||||
@ -132,6 +164,9 @@ begin;
|
|||||||
select * from t1 where y = 'one' lock in share mode;
|
select * from t1 where y = 'one' lock in share mode;
|
||||||
x y z
|
x y z
|
||||||
1 one 1
|
1 one 1
|
||||||
|
select * from t1 where x = 2 for update;
|
||||||
|
x y z
|
||||||
|
2 two 2
|
||||||
select * from t1 where x = 1 for update;
|
select * from t1 where x = 1 for update;
|
||||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
rollback;
|
rollback;
|
||||||
|
@ -102,16 +102,36 @@ connection con1;
|
|||||||
commit;
|
commit;
|
||||||
|
|
||||||
# table scan
|
# table scan
|
||||||
|
#
|
||||||
|
# Note that there are two distinct execution paths in which we unlock
|
||||||
|
# non-matching rows inspected during table scan - one that is used in
|
||||||
|
# case of filesort and one that used in rest of cases. Below we cover
|
||||||
|
# the latter (Bug #20390 "SELECT FOR UPDATE does not release locks of
|
||||||
|
# untouched rows in full table scans").
|
||||||
connection con1;
|
connection con1;
|
||||||
begin;
|
begin;
|
||||||
select * from t1 where y = 'one' or y = 'three' order by x for update;
|
# We can't use "order by x" here as it will cause filesort
|
||||||
|
--replace_column 1 # 2 # 3 #
|
||||||
|
select * from t1 where y = 'one' or y = 'three' for update;
|
||||||
|
|
||||||
connection con2;
|
connection con2;
|
||||||
begin;
|
begin;
|
||||||
# Have to check with pk access here since scans take locks on
|
# Have to check with pk access here since scans take locks on
|
||||||
# all rows and then release them in chunks
|
# all rows and then release them in chunks
|
||||||
# Bug #20390 SELECT FOR UPDATE does not release locks of untouched rows in full table scans
|
select * from t1 where x = 2 for update;
|
||||||
#select * from t1 where x = 2 for update;
|
--error 1205
|
||||||
|
select * from t1 where x = 1 for update;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
commit;
|
||||||
|
|
||||||
|
# And now the test for case with filesort
|
||||||
|
begin;
|
||||||
|
select * from t1 where y = 'one' or y = 'three' order by x for update;
|
||||||
|
connection con2;
|
||||||
|
begin;
|
||||||
|
select * from t1 where x = 2 for update;
|
||||||
--error 1205
|
--error 1205
|
||||||
select * from t1 where x = 1 for update;
|
select * from t1 where x = 1 for update;
|
||||||
rollback;
|
rollback;
|
||||||
@ -157,15 +177,32 @@ commit;
|
|||||||
# table scan
|
# table scan
|
||||||
connection con1;
|
connection con1;
|
||||||
begin;
|
begin;
|
||||||
select * from t1 where y = 'one' or y = 'three' order by x lock in share mode;
|
# We can't use "order by x" here as it will cause filesort
|
||||||
|
--replace_column 1 # 2 # 3 #
|
||||||
|
select * from t1 where y = 'one' or y = 'three' lock in share mode;
|
||||||
|
|
||||||
connection con2;
|
connection con2;
|
||||||
begin;
|
begin;
|
||||||
select * from t1 where y = 'one' lock in share mode;
|
select * from t1 where y = 'one' lock in share mode;
|
||||||
# Have to check with pk access here since scans take locks on
|
# Have to check with pk access here since scans take locks on
|
||||||
# all rows and then release them in chunks
|
# all rows and then release them in chunks
|
||||||
# Bug #20390 SELECT FOR UPDATE does not release locks of untouched rows in full table scans
|
select * from t1 where x = 2 for update;
|
||||||
#select * from t1 where x = 2 for update;
|
--error 1205
|
||||||
|
select * from t1 where x = 1 for update;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
commit;
|
||||||
|
|
||||||
|
# And the same test for case with filesort
|
||||||
|
connection con1;
|
||||||
|
begin;
|
||||||
|
select * from t1 where y = 'one' or y = 'three' order by x lock in share mode;
|
||||||
|
|
||||||
|
connection con2;
|
||||||
|
begin;
|
||||||
|
select * from t1 where y = 'one' lock in share mode;
|
||||||
|
select * from t1 where x = 2 for update;
|
||||||
--error 1205
|
--error 1205
|
||||||
select * from t1 where x = 1 for update;
|
select * from t1 where x = 1 for update;
|
||||||
rollback;
|
rollback;
|
||||||
|
@ -10434,6 +10434,7 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
|
|||||||
*/
|
*/
|
||||||
join->examined_rows++;
|
join->examined_rows++;
|
||||||
join->thd->row_count++;
|
join->thd->row_count++;
|
||||||
|
join_tab->read_record.file->unlock_row();
|
||||||
}
|
}
|
||||||
return NESTED_LOOP_OK;
|
return NESTED_LOOP_OK;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user