Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit ac33c7e

Browse files
committed
Regression tests for LOCK TABLE.
Robins Tharakan, reviewed by Szymon Guz, substantially revised by me.
1 parent 67ccbb0 commit ac33c7e

File tree

4 files changed

+130
-1
lines changed

4 files changed

+130
-1
lines changed

src/test/regress/expected/lock.out

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
--
2+
-- Test the LOCK statement
3+
--
4+
-- Setup
5+
CREATE SCHEMA lock_schema1;
6+
SET search_path = lock_schema1;
7+
CREATE TABLE lock_tbl1 (a BIGINT);
8+
CREATE VIEW lock_view1 AS SELECT 1;
9+
CREATE ROLE regress_rol_lock1;
10+
ALTER ROLE regress_rol_lock1 SET search_path = lock_schema1;
11+
GRANT USAGE ON SCHEMA lock_schema1 TO regress_rol_lock1;
12+
-- Try all valid lock options; also try omitting the optional TABLE keyword.
13+
BEGIN TRANSACTION;
14+
LOCK TABLE lock_tbl1 IN ACCESS SHARE MODE;
15+
LOCK lock_tbl1 IN ROW SHARE MODE;
16+
LOCK TABLE lock_tbl1 IN ROW EXCLUSIVE MODE;
17+
LOCK TABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE;
18+
LOCK TABLE lock_tbl1 IN SHARE MODE;
19+
LOCK lock_tbl1 IN SHARE ROW EXCLUSIVE MODE;
20+
LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE;
21+
LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE;
22+
ROLLBACK;
23+
-- Try using NOWAIT along with valid options.
24+
BEGIN TRANSACTION;
25+
LOCK TABLE lock_tbl1 IN ACCESS SHARE MODE NOWAIT;
26+
LOCK TABLE lock_tbl1 IN ROW SHARE MODE NOWAIT;
27+
LOCK TABLE lock_tbl1 IN ROW EXCLUSIVE MODE NOWAIT;
28+
LOCK TABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE NOWAIT;
29+
LOCK TABLE lock_tbl1 IN SHARE MODE NOWAIT;
30+
LOCK TABLE lock_tbl1 IN SHARE ROW EXCLUSIVE MODE NOWAIT;
31+
LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE NOWAIT;
32+
LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE NOWAIT;
33+
LOCK TABLE lock_view1 IN EXCLUSIVE MODE; -- Will fail; can't lock a non-table
34+
ERROR: "lock_view1" is not a table
35+
ROLLBACK;
36+
-- Verify that we can lock a table with inheritance children.
37+
CREATE TABLE lock_tbl2 (b BIGINT) INHERITS (lock_tbl1);
38+
CREATE TABLE lock_tbl3 () INHERITS (lock_tbl2);
39+
BEGIN TRANSACTION;
40+
LOCK TABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
41+
ROLLBACK;
42+
-- Verify that we can't lock a child table just because we have permission
43+
-- on the parent, but that we can lock the parent only.
44+
GRANT UPDATE ON TABLE lock_tbl1 TO regress_rol_lock1;
45+
SET ROLE regress_rol_lock1;
46+
BEGIN;
47+
LOCK TABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
48+
ERROR: permission denied for relation lock_tbl2
49+
ROLLBACK;
50+
BEGIN;
51+
LOCK TABLE ONLY lock_tbl1;
52+
ROLLBACK;
53+
RESET ROLE;
54+
--
55+
-- Clean up
56+
--
57+
DROP VIEW lock_view1;
58+
DROP TABLE lock_tbl3;
59+
DROP TABLE lock_tbl2;
60+
DROP TABLE lock_tbl1;
61+
DROP SCHEMA lock_schema1 CASCADE;
62+
DROP ROLE regress_rol_lock1;

src/test/regress/parallel_schedule

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ test: select_into select_distinct select_distinct_on select_implicit select_havi
8383
# ----------
8484
# Another group of parallel tests
8585
# ----------
86-
test: privileges security_label collate matview
86+
test: privileges security_label collate matview lock
8787

8888
# ----------
8989
# Another group of parallel tests

src/test/regress/serial_schedule

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ test: privileges
9696
test: security_label
9797
test: collate
9898
test: matview
99+
test: lock
99100
test: alter_generic
100101
test: misc
101102
test: psql

src/test/regress/sql/lock.sql

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
--
2+
-- Test the LOCK statement
3+
--
4+
5+
-- Setup
6+
CREATE SCHEMA lock_schema1;
7+
SET search_path = lock_schema1;
8+
CREATE TABLE lock_tbl1 (a BIGINT);
9+
CREATE VIEW lock_view1 AS SELECT 1;
10+
CREATE ROLE regress_rol_lock1;
11+
ALTER ROLE regress_rol_lock1 SET search_path = lock_schema1;
12+
GRANT USAGE ON SCHEMA lock_schema1 TO regress_rol_lock1;
13+
14+
-- Try all valid lock options; also try omitting the optional TABLE keyword.
15+
BEGIN TRANSACTION;
16+
LOCK TABLE lock_tbl1 IN ACCESS SHARE MODE;
17+
LOCK lock_tbl1 IN ROW SHARE MODE;
18+
LOCK TABLE lock_tbl1 IN ROW EXCLUSIVE MODE;
19+
LOCK TABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE;
20+
LOCK TABLE lock_tbl1 IN SHARE MODE;
21+
LOCK lock_tbl1 IN SHARE ROW EXCLUSIVE MODE;
22+
LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE;
23+
LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE;
24+
ROLLBACK;
25+
26+
-- Try using NOWAIT along with valid options.
27+
BEGIN TRANSACTION;
28+
LOCK TABLE lock_tbl1 IN ACCESS SHARE MODE NOWAIT;
29+
LOCK TABLE lock_tbl1 IN ROW SHARE MODE NOWAIT;
30+
LOCK TABLE lock_tbl1 IN ROW EXCLUSIVE MODE NOWAIT;
31+
LOCK TABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE NOWAIT;
32+
LOCK TABLE lock_tbl1 IN SHARE MODE NOWAIT;
33+
LOCK TABLE lock_tbl1 IN SHARE ROW EXCLUSIVE MODE NOWAIT;
34+
LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE NOWAIT;
35+
LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE NOWAIT;
36+
LOCK TABLE lock_view1 IN EXCLUSIVE MODE; -- Will fail; can't lock a non-table
37+
ROLLBACK;
38+
39+
-- Verify that we can lock a table with inheritance children.
40+
CREATE TABLE lock_tbl2 (b BIGINT) INHERITS (lock_tbl1);
41+
CREATE TABLE lock_tbl3 () INHERITS (lock_tbl2);
42+
BEGIN TRANSACTION;
43+
LOCK TABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
44+
ROLLBACK;
45+
46+
-- Verify that we can't lock a child table just because we have permission
47+
-- on the parent, but that we can lock the parent only.
48+
GRANT UPDATE ON TABLE lock_tbl1 TO regress_rol_lock1;
49+
SET ROLE regress_rol_lock1;
50+
BEGIN;
51+
LOCK TABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
52+
ROLLBACK;
53+
BEGIN;
54+
LOCK TABLE ONLY lock_tbl1;
55+
ROLLBACK;
56+
RESET ROLE;
57+
58+
--
59+
-- Clean up
60+
--
61+
DROP VIEW lock_view1;
62+
DROP TABLE lock_tbl3;
63+
DROP TABLE lock_tbl2;
64+
DROP TABLE lock_tbl1;
65+
DROP SCHEMA lock_schema1 CASCADE;
66+
DROP ROLE regress_rol_lock1;

0 commit comments

Comments
 (0)