Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 33aa8a1

Browse files
Fix shared locks
1 parent 58a42a9 commit 33aa8a1

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

‎src/Locker/PostgresAdvisoryLockTypeEnum.php‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
*
1010
* - NonBlocking. Attempt to acquire the lock without blocking:
1111
* - PG_TRY_ADVISORY_LOCK
12-
* - PG_TRY_ADVISORY_LOCK_SHARE
12+
* - PG_TRY_ADVISORY_LOCK_SHARED
1313
* - PG_TRY_ADVISORY_XACT_LOCK
14-
* - PG_TRY_ADVISORY_XACT_LOCK_SHARE
14+
* - PG_TRY_ADVISORY_XACT_LOCK_SHARED
1515
* - Blocking. Acquire the lock, blocking until it becomes available:
1616
* - PG_ADVISORY_LOCK
17-
* - PG_ADVISORY_LOCK_SHARE
17+
* - PG_ADVISORY_LOCK_SHARED
1818
* - PG_ADVISORY_XACT_LOCK
19-
* - PG_ADVISORY_XACT_LOCK_SHARE
19+
* - PG_ADVISORY_XACT_LOCK_SHARED
2020
*/
2121
enum PostgresAdvisoryLockTypeEnum
2222
{

‎src/Locker/PostgresAdvisoryLocker.php‎

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ public function acquireLock(
5050
PostgresAdvisoryLockScopeEnum::Transaction,
5151
PostgresAdvisoryLockTypeEnum::NonBlocking,
5252
PostgresLockModeEnum::Share,
53-
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK_SHARE(:class_id, :object_id);',
53+
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id);',
5454
[
5555
PostgresAdvisoryLockScopeEnum::Transaction,
5656
PostgresAdvisoryLockTypeEnum::Blocking,
5757
PostgresLockModeEnum::Share,
58-
] => 'SELECT PG_ADVISORY_XACT_LOCK_SHARE(:class_id, :object_id);',
58+
] => 'SELECT PG_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id);',
5959
[
6060
PostgresAdvisoryLockScopeEnum::Session,
6161
PostgresAdvisoryLockTypeEnum::NonBlocking,
@@ -70,12 +70,12 @@ public function acquireLock(
7070
PostgresAdvisoryLockScopeEnum::Session,
7171
PostgresAdvisoryLockTypeEnum::NonBlocking,
7272
PostgresLockModeEnum::Share,
73-
] => 'SELECT PG_TRY_ADVISORY_LOCK_SHARE(:class_id, :object_id);',
73+
] => 'SELECT PG_TRY_ADVISORY_LOCK_SHARED(:class_id, :object_id);',
7474
[
7575
PostgresAdvisoryLockScopeEnum::Session,
7676
PostgresAdvisoryLockTypeEnum::Blocking,
7777
PostgresLockModeEnum::Share,
78-
] => 'SELECT PG_ADVISORY_LOCK_SHARE(:class_id, :object_id);',
78+
] => 'SELECT PG_ADVISORY_LOCK_SHARED(:class_id, :object_id);',
7979
};
8080
$sql .= " -- $postgresLockId->humanReadableValue";
8181

@@ -97,16 +97,19 @@ public function releaseLock(
9797
PDO $dbConnection,
9898
PostgresLockId $postgresLockId,
9999
PostgresAdvisoryLockScopeEnum $scope = PostgresAdvisoryLockScopeEnum::Session,
100+
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
100101
): bool {
101102
if ($scope === PostgresAdvisoryLockScopeEnum::Transaction) {
102103
throw new \InvalidArgumentException('Transaction-level advisory lock cannot be released');
103104
}
104105

105-
$statement = $dbConnection->prepare(
106-
<<<SQL
107-
SELECT PG_ADVISORY_UNLOCK(:class_id, :object_id); -- $postgresLockId->humanReadableValue
108-
SQL,
109-
);
106+
$sql = match ($mode) {
107+
PostgresLockModeEnum::Exclusive => 'SELECT PG_ADVISORY_UNLOCK(:class_id, :object_id);',
108+
PostgresLockModeEnum::Share => 'SELECT PG_ADVISORY_UNLOCK_SHARED(:class_id, :object_id);',
109+
};
110+
$sql .= " -- $postgresLockId->humanReadableValue";
111+
112+
$statement = $dbConnection->prepare($sql);
110113
$statement->execute(
111114
[
112115
'class_id' => $postgresLockId->classId,

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /