Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 9 additions & 8 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ serde = { version = "1.0.215", features = ["derive"] }
serde_json = "1.0"
serde_plain = "1.0"
serde_repr = "0.1"
regex = "1.11.1"
simplelog = "0.12.0"
structopt = "0.3"
tempfile = "3.2.0"
Expand Down
148 changes: 148 additions & 0 deletions crates/squawk_parser/tests/data/regression_suite/advisory_lock.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
--
-- ADVISORY LOCKS
--

SELECT oid AS datoid FROM pg_database WHERE datname = current_database() ;

BEGIN;

SELECT
pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;


-- pg_advisory_unlock_all() shouldn't release xact locks
SELECT pg_advisory_unlock_all();

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';


-- can't unlock xact locks
SELECT
pg_advisory_unlock(1), pg_advisory_unlock_shared(2),
pg_advisory_unlock(1, 1), pg_advisory_unlock_shared(2, 2);


-- automatically release xact locks at commit
COMMIT;

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';


BEGIN;

-- holding both session and xact locks on the same objects, xact first
SELECT
pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;

SELECT
pg_advisory_lock(1), pg_advisory_lock_shared(2),
pg_advisory_lock(1, 1), pg_advisory_lock_shared(2, 2);

ROLLBACK;

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;


-- unlocking session locks
SELECT
pg_advisory_unlock(1), pg_advisory_unlock(1),
pg_advisory_unlock_shared(2), pg_advisory_unlock_shared(2),
pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1),
pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2);

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';


BEGIN;

-- holding both session and xact locks on the same objects, session first
SELECT
pg_advisory_lock(1), pg_advisory_lock_shared(2),
pg_advisory_lock(1, 1), pg_advisory_lock_shared(2, 2);

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;

SELECT
pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);

ROLLBACK;

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;


-- releasing all session locks
SELECT pg_advisory_unlock_all();

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';


BEGIN;

-- grabbing txn locks multiple times

SELECT
pg_advisory_xact_lock(1), pg_advisory_xact_lock(1),
pg_advisory_xact_lock_shared(2), pg_advisory_xact_lock_shared(2),
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock(1, 1),
pg_advisory_xact_lock_shared(2, 2), pg_advisory_xact_lock_shared(2, 2);

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;

COMMIT;

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';

-- grabbing session locks multiple times

SELECT
pg_advisory_lock(1), pg_advisory_lock(1),
pg_advisory_lock_shared(2), pg_advisory_lock_shared(2),
pg_advisory_lock(1, 1), pg_advisory_lock(1, 1),
pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2);

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;

SELECT
pg_advisory_unlock(1), pg_advisory_unlock(1),
pg_advisory_unlock_shared(2), pg_advisory_unlock_shared(2),
pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1),
pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2);

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';

-- .. and releasing them all at once

SELECT
pg_advisory_lock(1), pg_advisory_lock(1),
pg_advisory_lock_shared(2), pg_advisory_lock_shared(2),
pg_advisory_lock(1, 1), pg_advisory_lock(1, 1),
pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2);

SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid'
ORDER BY classid, objid, objsubid;

SELECT pg_advisory_unlock_all();

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = 'datoid';
Loading
Loading