Skip to content

Commit 893f056

Browse files
committed
Rewrite locker API
1 parent 715c5c7 commit 893f056

File tree

6 files changed

+65
-65
lines changed

6 files changed

+65
-65
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ $isLockAcquired = $locker->acquireTransactionLevelLock(
4242
$dbConnection,
4343
$lockId,
4444
\Cog\DbLocker\Locker\PostgresAdvisoryLockLevelEnum::Transaction,
45-
\Cog\DbLocker\Locker\PostgresAdvisoryLockTypeEnum::NonBlocking,
46-
\Cog\DbLocker\Locker\PostgresLockModeEnum::Exclusive,
45+
\Cog\DbLocker\Locker\PostgresAdvisoryLockWaitModeEnum::NonBlocking,
46+
\Cog\DbLocker\Locker\PostgresLockAccessModeEnum::Exclusive,
4747
);
4848
if ($isLockAcquired) {
4949
// Execute logic if lock was successful
@@ -65,8 +65,8 @@ $isLockAcquired = $locker->acquireSessionLevelLock(
6565
$dbConnection,
6666
$lockId,
6767
\Cog\DbLocker\Locker\PostgresAdvisoryLockLevelEnum::Session,
68-
\Cog\DbLocker\Locker\PostgresAdvisoryLockTypeEnum::NonBlocking,
69-
\Cog\DbLocker\Locker\PostgresLockModeEnum::Exclusive,
68+
\Cog\DbLocker\Locker\PostgresAdvisoryLockWaitModeEnum::NonBlocking,
69+
\Cog\DbLocker\Locker\PostgresLockAccessModeEnum::Exclusive,
7070
);
7171
if ($isLockAcquired) {
7272
// Execute logic if lock was successful

src/Locker/PostgresAdvisoryLockTypeEnum.php renamed to src/Locker/PostgresAdvisoryLockWaitModeEnum.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Cog\DbLocker\Locker;
66

77
/**
8-
* PostgresAdvisoryLockTypeEnum defines the type of advisory lock acquisition.
8+
* PostgresAdvisoryLockWaitModeEnum defines the type of advisory lock acquisition.
99
*
1010
* - NonBlocking. Attempt to acquire the lock without blocking (with _TRY_):
1111
* - PG_TRY_ADVISORY_LOCK
@@ -18,7 +18,7 @@
1818
* - PG_ADVISORY_XACT_LOCK
1919
* - PG_ADVISORY_XACT_LOCK_SHARED
2020
*/
21-
enum PostgresAdvisoryLockTypeEnum
21+
enum PostgresAdvisoryLockWaitModeEnum
2222
{
2323
case NonBlocking;
2424
case Blocking;

src/Locker/PostgresAdvisoryLocker.php

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ final class PostgresAdvisoryLocker
2525
public function acquireTransactionLevelLock(
2626
PDO $dbConnection,
2727
PostgresLockId $postgresLockId,
28-
PostgresAdvisoryLockTypeEnum $type = PostgresAdvisoryLockTypeEnum::NonBlocking,
29-
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
28+
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
29+
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
3030
): bool {
3131
return $this->acquireLock(
3232
$dbConnection,
3333
$postgresLockId,
3434
PostgresAdvisoryLockLevelEnum::Transaction,
35-
$type,
36-
$mode,
35+
$waitMode,
36+
$accessMode,
3737
);
3838
}
3939

@@ -45,15 +45,15 @@ public function acquireTransactionLevelLock(
4545
public function acquireSessionLevelLock(
4646
PDO $dbConnection,
4747
PostgresLockId $postgresLockId,
48-
PostgresAdvisoryLockTypeEnum $type = PostgresAdvisoryLockTypeEnum::NonBlocking,
49-
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
48+
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
49+
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
5050
): bool {
5151
return $this->acquireLock(
5252
$dbConnection,
5353
$postgresLockId,
5454
PostgresAdvisoryLockLevelEnum::Session,
55-
$type,
56-
$mode,
55+
$waitMode,
56+
$accessMode,
5757
);
5858
}
5959

@@ -64,15 +64,15 @@ public function releaseSessionLevelLock(
6464
PDO $dbConnection,
6565
PostgresLockId $postgresLockId,
6666
PostgresAdvisoryLockLevelEnum $level = PostgresAdvisoryLockLevelEnum::Session,
67-
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
67+
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
6868
): bool {
6969
if ($level === PostgresAdvisoryLockLevelEnum::Transaction) {
7070
throw new \InvalidArgumentException('Transaction-level advisory lock cannot be released');
7171
}
7272

73-
$sql = match ($mode) {
74-
PostgresLockModeEnum::Exclusive => 'SELECT PG_ADVISORY_UNLOCK(:class_id, :object_id);',
75-
PostgresLockModeEnum::Share => 'SELECT PG_ADVISORY_UNLOCK_SHARED(:class_id, :object_id);',
73+
$sql = match ($accessMode) {
74+
PostgresLockAccessModeEnum::Exclusive => 'SELECT PG_ADVISORY_UNLOCK(:class_id, :object_id);',
75+
PostgresLockAccessModeEnum::Share => 'SELECT PG_ADVISORY_UNLOCK_SHARED(:class_id, :object_id);',
7676
};
7777
$sql .= " -- $postgresLockId->humanReadableValue";
7878

@@ -105,55 +105,55 @@ private function acquireLock(
105105
PDO $dbConnection,
106106
PostgresLockId $postgresLockId,
107107
PostgresAdvisoryLockLevelEnum $level,
108-
PostgresAdvisoryLockTypeEnum $type = PostgresAdvisoryLockTypeEnum::NonBlocking,
109-
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
108+
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
109+
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
110110
): bool {
111111
if ($level === PostgresAdvisoryLockLevelEnum::Transaction && $dbConnection->inTransaction() === false) {
112112
throw new LogicException(
113113
"Transaction-level advisory lock `$postgresLockId->humanReadableValue` cannot be acquired outside of transaction",
114114
);
115115
}
116116

117-
$sql = match ([$level, $type, $mode]) {
117+
$sql = match ([$level, $waitMode, $accessMode]) {
118118
[
119119
PostgresAdvisoryLockLevelEnum::Transaction,
120-
PostgresAdvisoryLockTypeEnum::NonBlocking,
121-
PostgresLockModeEnum::Exclusive,
120+
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
121+
PostgresLockAccessModeEnum::Exclusive,
122122
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK(:class_id, :object_id);',
123123
[
124124
PostgresAdvisoryLockLevelEnum::Transaction,
125-
PostgresAdvisoryLockTypeEnum::Blocking,
126-
PostgresLockModeEnum::Exclusive,
125+
PostgresAdvisoryLockWaitModeEnum::Blocking,
126+
PostgresLockAccessModeEnum::Exclusive,
127127
] => 'SELECT PG_ADVISORY_XACT_LOCK(:class_id, :object_id);',
128128
[
129129
PostgresAdvisoryLockLevelEnum::Transaction,
130-
PostgresAdvisoryLockTypeEnum::NonBlocking,
131-
PostgresLockModeEnum::Share,
130+
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
131+
PostgresLockAccessModeEnum::Share,
132132
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id);',
133133
[
134134
PostgresAdvisoryLockLevelEnum::Transaction,
135-
PostgresAdvisoryLockTypeEnum::Blocking,
136-
PostgresLockModeEnum::Share,
135+
PostgresAdvisoryLockWaitModeEnum::Blocking,
136+
PostgresLockAccessModeEnum::Share,
137137
] => 'SELECT PG_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id);',
138138
[
139139
PostgresAdvisoryLockLevelEnum::Session,
140-
PostgresAdvisoryLockTypeEnum::NonBlocking,
141-
PostgresLockModeEnum::Exclusive,
140+
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
141+
PostgresLockAccessModeEnum::Exclusive,
142142
] => 'SELECT PG_TRY_ADVISORY_LOCK(:class_id, :object_id);',
143143
[
144144
PostgresAdvisoryLockLevelEnum::Session,
145-
PostgresAdvisoryLockTypeEnum::Blocking,
146-
PostgresLockModeEnum::Exclusive,
145+
PostgresAdvisoryLockWaitModeEnum::Blocking,
146+
PostgresLockAccessModeEnum::Exclusive,
147147
] => 'SELECT PG_ADVISORY_LOCK(:class_id, :object_id);',
148148
[
149149
PostgresAdvisoryLockLevelEnum::Session,
150-
PostgresAdvisoryLockTypeEnum::NonBlocking,
151-
PostgresLockModeEnum::Share,
150+
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
151+
PostgresLockAccessModeEnum::Share,
152152
] => 'SELECT PG_TRY_ADVISORY_LOCK_SHARED(:class_id, :object_id);',
153153
[
154154
PostgresAdvisoryLockLevelEnum::Session,
155-
PostgresAdvisoryLockTypeEnum::Blocking,
156-
PostgresLockModeEnum::Share,
155+
PostgresAdvisoryLockWaitModeEnum::Blocking,
156+
PostgresLockAccessModeEnum::Share,
157157
] => 'SELECT PG_ADVISORY_LOCK_SHARED(:class_id, :object_id);',
158158
};
159159
$sql .= " -- $postgresLockId->humanReadableValue";

src/Locker/PostgresLockModeEnum.php renamed to src/Locker/PostgresLockAccessModeEnum.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
namespace Cog\DbLocker\Locker;
66

77
/**
8-
* PostgresLockModeEnum defines the access mode of advisory lock acquisition.
8+
* PostgresLockAccessModeEnum defines the access mode of advisory lock acquisition.
99
*/
10-
enum PostgresLockModeEnum: string
10+
enum PostgresLockAccessModeEnum: string
1111
{
1212
case Exclusive = 'ExclusiveLock';
1313
case Share = 'ShareLock';

test/Integration/AbstractIntegrationTestCase.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
namespace Cog\Test\DbLocker\Integration;
1515

16-
use Cog\DbLocker\Locker\PostgresLockModeEnum;
16+
use Cog\DbLocker\Locker\PostgresLockAccessModeEnum;
1717
use Cog\DbLocker\LockId\PostgresLockId;
1818
use PDO;
1919
use PHPUnit\Framework\TestCase;
@@ -45,7 +45,7 @@ protected function initPostgresPdoConnection(): PDO
4545
protected function assertPgAdvisoryLockExistsInConnection(
4646
PDO $dbConnection,
4747
PostgresLockId $postgresLockId,
48-
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
48+
PostgresLockAccessModeEnum $mode = PostgresLockAccessModeEnum::Exclusive,
4949
): void {
5050
$row = $this->findPostgresAdvisoryLockInConnection(
5151
$dbConnection,
@@ -64,7 +64,7 @@ protected function assertPgAdvisoryLockExistsInConnection(
6464
protected function assertPgAdvisoryLockMissingInConnection(
6565
PDO $dbConnection,
6666
PostgresLockId $postgresLockId,
67-
PostgresLockModeEnum $mode = PostgresLockModeEnum::Exclusive,
67+
PostgresLockAccessModeEnum $mode = PostgresLockAccessModeEnum::Exclusive,
6868
): void {
6969
$row = $this->findPostgresAdvisoryLockInConnection(
7070
$dbConnection,
@@ -96,7 +96,7 @@ protected function assertPgAdvisoryLocksCount(
9696
private function findPostgresAdvisoryLockInConnection(
9797
PDO $dbConnection,
9898
PostgresLockId $postgresLockId,
99-
PostgresLockModeEnum $mode,
99+
PostgresLockAccessModeEnum $mode,
100100
): object | null {
101101
$statement = $dbConnection->prepare(
102102
<<<'SQL'

test/Integration/Locker/PostgresAdvisoryLockerTest.php

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
use Cog\DbLocker\Locker\PostgresAdvisoryLocker;
1717
use Cog\DbLocker\Locker\PostgresAdvisoryLockLevelEnum;
18-
use Cog\DbLocker\Locker\PostgresLockModeEnum;
18+
use Cog\DbLocker\Locker\PostgresLockAccessModeEnum;
1919
use Cog\DbLocker\LockId\PostgresLockId;
2020
use Cog\Test\DbLocker\Integration\AbstractIntegrationTestCase;
2121
use LogicException;
@@ -28,7 +28,7 @@ final class PostgresAdvisoryLockerTest extends AbstractIntegrationTestCase
2828

2929
#[DataProvider('provideItCanTryAcquireLockWithinSessionData')]
3030
public function testItCanTryAcquireLockWithinSession(
31-
PostgresLockModeEnum $mode,
31+
PostgresLockAccessModeEnum $mode,
3232
): void {
3333
$locker = $this->initLocker();
3434
$dbConnection = $this->initPostgresPdoConnection();
@@ -37,7 +37,7 @@ public function testItCanTryAcquireLockWithinSession(
3737
$isLockAcquired = $locker->acquireSessionLevelLock(
3838
$dbConnection,
3939
$postgresLockId,
40-
mode: $mode,
40+
accessMode: $mode,
4141
);
4242

4343
$this->assertTrue($isLockAcquired);
@@ -49,17 +49,17 @@ public static function provideItCanTryAcquireLockWithinSessionData(): array
4949
{
5050
return [
5151
'exclusive lock' => [
52-
PostgresLockModeEnum::Exclusive,
52+
PostgresLockAccessModeEnum::Exclusive,
5353
],
5454
'share lock' => [
55-
PostgresLockModeEnum::Share,
55+
PostgresLockAccessModeEnum::Share,
5656
],
5757
];
5858
}
5959

6060
#[DataProvider('provideItCanTryAcquireLockWithinTransactionData')]
6161
public function testItCanTryAcquireLockWithinTransaction(
62-
PostgresLockModeEnum $mode,
62+
PostgresLockAccessModeEnum $mode,
6363
): void {
6464
$locker = $this->initLocker();
6565
$dbConnection = $this->initPostgresPdoConnection();
@@ -69,7 +69,7 @@ public function testItCanTryAcquireLockWithinTransaction(
6969
$isLockAcquired = $locker->acquireTransactionLevelLock(
7070
$dbConnection,
7171
$postgresLockId,
72-
mode: $mode,
72+
accessMode: $mode,
7373
);
7474

7575
$this->assertTrue($isLockAcquired);
@@ -81,10 +81,10 @@ public static function provideItCanTryAcquireLockWithinTransactionData(): array
8181
{
8282
return [
8383
'exclusive lock' => [
84-
PostgresLockModeEnum::Exclusive,
84+
PostgresLockAccessModeEnum::Exclusive,
8585
],
8686
'share lock' => [
87-
PostgresLockModeEnum::Share,
87+
PostgresLockAccessModeEnum::Share,
8888
],
8989
];
9090
}
@@ -195,21 +195,21 @@ public function testItCannotAcquireSameLockInTwoConnections(): void
195195

196196
#[DataProvider('provideItCanReleaseLockData')]
197197
public function testItCanReleaseLock(
198-
PostgresLockModeEnum $mode,
198+
PostgresLockAccessModeEnum $mode,
199199
): void {
200200
$locker = $this->initLocker();
201201
$dbConnection = $this->initPostgresPdoConnection();
202202
$postgresLockId = PostgresLockId::fromKeyValue('test');
203203
$locker->acquireSessionLevelLock(
204204
$dbConnection,
205205
$postgresLockId,
206-
mode: $mode,
206+
accessMode: $mode,
207207
);
208208

209209
$isLockReleased = $locker->releaseSessionLevelLock(
210210
$dbConnection,
211211
$postgresLockId,
212-
mode: $mode,
212+
accessMode: $mode,
213213
);
214214

215215
$this->assertTrue($isLockReleased);
@@ -220,32 +220,32 @@ public static function provideItCanReleaseLockData(): array
220220
{
221221
return [
222222
'exclusive lock' => [
223-
PostgresLockModeEnum::Exclusive,
223+
PostgresLockAccessModeEnum::Exclusive,
224224
],
225225
'share lock' => [
226-
PostgresLockModeEnum::Share,
226+
PostgresLockAccessModeEnum::Share,
227227
],
228228
];
229229
}
230230

231231
#[DataProvider('provideItCanNotReleaseLockOfDifferentModesData')]
232232
public function testItCanNotReleaseLockOfDifferentModes(
233-
PostgresLockModeEnum $acquireMode,
234-
PostgresLockModeEnum $releaseMode,
233+
PostgresLockAccessModeEnum $acquireMode,
234+
PostgresLockAccessModeEnum $releaseMode,
235235
): void {
236236
$locker = $this->initLocker();
237237
$dbConnection = $this->initPostgresPdoConnection();
238238
$postgresLockId = PostgresLockId::fromKeyValue('test');
239239
$locker->acquireSessionLevelLock(
240240
$dbConnection,
241241
$postgresLockId,
242-
mode: $acquireMode,
242+
accessMode: $acquireMode,
243243
);
244244

245245
$isLockReleased = $locker->releaseSessionLevelLock(
246246
$dbConnection,
247247
$postgresLockId,
248-
mode: $releaseMode,
248+
accessMode: $releaseMode,
249249
);
250250

251251
$this->assertFalse($isLockReleased);
@@ -257,12 +257,12 @@ public static function provideItCanNotReleaseLockOfDifferentModesData(): array
257257
{
258258
return [
259259
'release exclusive lock as share' => [
260-
'acquireMode' => PostgresLockModeEnum::Exclusive,
261-
'releaseMode' => PostgresLockModeEnum::Share,
260+
'acquireMode' => PostgresLockAccessModeEnum::Exclusive,
261+
'releaseMode' => PostgresLockAccessModeEnum::Share,
262262
],
263263
'release share lock as exclusive' => [
264-
'acquireMode' => PostgresLockModeEnum::Share,
265-
'releaseMode' => PostgresLockModeEnum::Exclusive,
264+
'acquireMode' => PostgresLockAccessModeEnum::Share,
265+
'releaseMode' => PostgresLockAccessModeEnum::Exclusive,
266266
],
267267
];
268268
}

0 commit comments

Comments
 (0)