Skip to content

Commit 0a3c227

Browse files
committed
Rewrite locker API
1 parent e5ac844 commit 0a3c227

11 files changed

+68
-62
lines changed

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ composer require cybercog/php-db-locker
3434
```php
3535
$dbConnection = new PDO($dsn, $username, $password);
3636

37-
$locker = new \Cog\DbLocker\Locker\PostgresAdvisoryLocker();
38-
$lockId = \Cog\DbLocker\LockId\PostgresLockId::fromKeyValue('user', '4');
37+
$locker = new \Cog\DbLocker\Postgres\PostgresAdvisoryLocker();
38+
$lockId = \Cog\DbLocker\Postgres\PostgresLockId::fromKeyValue('user', '4');
3939

4040
$dbConnection->beginTransaction();
4141
$lock = $locker->acquireSessionLevelLockHandler(
4242
$dbConnection,
4343
$lockId,
44-
\Cog\DbLocker\Locker\PostgresAdvisoryLockWaitModeEnum::NonBlocking,
45-
\Cog\DbLocker\Locker\PostgresLockAccessModeEnum::Exclusive,
44+
\Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum::NonBlocking,
45+
\Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum::Exclusive,
4646
);
4747
if ($lock->wasAcquired) {
4848
// Execute logic if lock was successful
@@ -57,15 +57,15 @@ $dbConnection->commit();
5757
```php
5858
$dbConnection = new PDO($dsn, $username, $password);
5959

60-
$locker = new \Cog\DbLocker\Locker\PostgresAdvisoryLocker();
61-
$lockId = \Cog\DbLocker\LockId\PostgresLockId::fromKeyValue('user', '4');
60+
$locker = new \Cog\DbLocker\Postgres\PostgresAdvisoryLocker();
61+
$lockId = \Cog\DbLocker\Postgres\PostgresLockId::fromKeyValue('user', '4');
6262

6363
try {
6464
$lock = $locker->acquireSessionLevelLockHandler(
6565
$dbConnection,
6666
$lockId,
67-
\Cog\DbLocker\Locker\PostgresAdvisoryLockWaitModeEnum::NonBlocking,
68-
\Cog\DbLocker\Locker\PostgresLockAccessModeEnum::Exclusive,
67+
\Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum::NonBlocking,
68+
\Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum::Exclusive,
6969
);
7070
if ($lock->wasAcquired) {
7171
// Execute logic if lock was successful

src/Locker/PostgresLockAccessModeEnum.php renamed to src/Postgres/Enum/PostgresLockAccessModeEnum.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Cog\DbLocker\Locker;
5+
namespace Cog\DbLocker\Postgres\Enum;
66

77
/**
88
* PostgresLockAccessModeEnum defines the access mode of advisory lock acquisition.

src/Locker/PostgresAdvisoryLockLevelEnum.php renamed to src/Postgres/Enum/PostgresLockLevelEnum.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
declare(strict_types=1);
44

5-
namespace Cog\DbLocker\Locker;
5+
namespace Cog\DbLocker\Postgres\Enum;
66

77
/**
8-
* PostgresAdvisoryLockLevelEnum defines the level of advisory lock acquisition.
8+
* PostgresLockLevelEnum defines the level of advisory lock acquisition.
99
*
1010
* - Session. Session-level advisory lock (without _XACT_):
1111
* - PG_ADVISORY_LOCK
@@ -18,7 +18,7 @@
1818
* - PG_TRY_ADVISORY_XACT_LOCK
1919
* - PG_TRY_ADVISORY_XACT_LOCK_SHARED
2020
*/
21-
enum PostgresAdvisoryLockLevelEnum
21+
enum PostgresLockLevelEnum
2222
{
2323
case Session;
2424
case Transaction;

src/Locker/PostgresAdvisoryLockWaitModeEnum.php renamed to src/Postgres/Enum/PostgresLockWaitModeEnum.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
declare(strict_types=1);
44

5-
namespace Cog\DbLocker\Locker;
5+
namespace Cog\DbLocker\Postgres\Enum;
66

77
/**
8-
* PostgresAdvisoryLockWaitModeEnum defines the type of advisory lock acquisition.
8+
* PostgresLockWaitModeEnum 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 PostgresAdvisoryLockWaitModeEnum
21+
enum PostgresLockWaitModeEnum
2222
{
2323
case Blocking;
2424
case NonBlocking;

src/Locker/AdvisoryLockSessionLevel.php renamed to src/Postgres/LockHandle/PostgresSessionLevelLockHandle.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,17 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace Cog\DbLocker\Locker;
14+
namespace Cog\DbLocker\Postgres\LockHandle;
1515

16-
use Cog\DbLocker\LockId\PostgresLockId;
16+
use Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum;
17+
use Cog\DbLocker\Postgres\PostgresAdvisoryLocker;
18+
use Cog\DbLocker\Postgres\PostgresLockId;
1719
use PDO;
1820

1921
/**
2022
* @internal
2123
*/
22-
final class AdvisoryLockSessionLevel
24+
final class PostgresSessionLevelLockHandle
2325
{
2426
private bool $isReleased = false;
2527

src/Locker/AdvisoryLockTransactionLevel.php renamed to src/Postgres/LockHandle/PostgresTransactionLevelLockHandle.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace Cog\DbLocker\Locker;
14+
namespace Cog\DbLocker\Postgres\LockHandle;
1515

1616
/**
1717
* @internal
1818
*/
19-
final class AdvisoryLockTransactionLevel
19+
final class PostgresTransactionLevelLockHandle
2020
{
2121
public function __construct(
2222
public readonly bool $wasAcquired,

src/Locker/PostgresAdvisoryLocker.php renamed to src/Postgres/PostgresAdvisoryLocker.php

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace Cog\DbLocker\Locker;
14+
namespace Cog\DbLocker\Postgres;
1515

16-
use Cog\DbLocker\LockId\PostgresLockId;
16+
use Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum;
17+
use Cog\DbLocker\Postgres\Enum\PostgresLockLevelEnum;
18+
use Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum;
19+
use Cog\DbLocker\Postgres\LockHandle\PostgresSessionLevelLockHandle;
20+
use Cog\DbLocker\Postgres\LockHandle\PostgresTransactionLevelLockHandle;
1721
use LogicException;
1822
use PDO;
1923

@@ -27,14 +31,14 @@ final class PostgresAdvisoryLocker
2731
public function acquireTransactionLevelLockHandler(
2832
PDO $dbConnection,
2933
PostgresLockId $postgresLockId,
30-
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
34+
PostgresLockWaitModeEnum $waitMode = PostgresLockWaitModeEnum::NonBlocking,
3135
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
32-
): AdvisoryLockTransactionLevel {
33-
return new AdvisoryLockTransactionLevel(
36+
): PostgresTransactionLevelLockHandle {
37+
return new PostgresTransactionLevelLockHandle(
3438
wasAcquired: $this->acquireLock(
3539
$dbConnection,
3640
$postgresLockId,
37-
PostgresAdvisoryLockLevelEnum::Transaction,
41+
PostgresLockLevelEnum::Transaction,
3842
$waitMode,
3943
$accessMode,
4044
),
@@ -47,13 +51,13 @@ public function acquireTransactionLevelLockHandler(
4751
public function acquireTransactionLevelLock(
4852
PDO $dbConnection,
4953
PostgresLockId $postgresLockId,
50-
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
54+
PostgresLockWaitModeEnum $waitMode = PostgresLockWaitModeEnum::NonBlocking,
5155
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
5256
): bool {
5357
return $this->acquireLock(
5458
$dbConnection,
5559
$postgresLockId,
56-
PostgresAdvisoryLockLevelEnum::Transaction,
60+
PostgresLockLevelEnum::Transaction,
5761
$waitMode,
5862
$accessMode,
5963
);
@@ -68,18 +72,18 @@ public function acquireTransactionLevelLock(
6872
public function acquireSessionLevelLockHandler(
6973
PDO $dbConnection,
7074
PostgresLockId $postgresLockId,
71-
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
75+
PostgresLockWaitModeEnum $waitMode = PostgresLockWaitModeEnum::NonBlocking,
7276
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
73-
): AdvisoryLockSessionLevel {
74-
return new AdvisoryLockSessionLevel(
77+
): PostgresSessionLevelLockHandle {
78+
return new PostgresSessionLevelLockHandle(
7579
$dbConnection,
7680
$this,
7781
$postgresLockId,
7882
$accessMode,
7983
wasAcquired: $this->acquireLock(
8084
$dbConnection,
8185
$postgresLockId,
82-
PostgresAdvisoryLockLevelEnum::Session,
86+
PostgresLockLevelEnum::Session,
8387
$waitMode,
8488
$accessMode,
8589
),
@@ -94,13 +98,13 @@ public function acquireSessionLevelLockHandler(
9498
public function acquireSessionLevelLock(
9599
PDO $dbConnection,
96100
PostgresLockId $postgresLockId,
97-
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
101+
PostgresLockWaitModeEnum $waitMode = PostgresLockWaitModeEnum::NonBlocking,
98102
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
99103
): bool {
100104
return $this->acquireLock(
101105
$dbConnection,
102106
$postgresLockId,
103-
PostgresAdvisoryLockLevelEnum::Session,
107+
PostgresLockLevelEnum::Session,
104108
$waitMode,
105109
$accessMode,
106110
);
@@ -148,55 +152,55 @@ public function releaseAllSessionLevelLocks(
148152
private function acquireLock(
149153
PDO $dbConnection,
150154
PostgresLockId $postgresLockId,
151-
PostgresAdvisoryLockLevelEnum $level,
152-
PostgresAdvisoryLockWaitModeEnum $waitMode = PostgresAdvisoryLockWaitModeEnum::NonBlocking,
155+
PostgresLockLevelEnum $level,
156+
PostgresLockWaitModeEnum $waitMode = PostgresLockWaitModeEnum::NonBlocking,
153157
PostgresLockAccessModeEnum $accessMode = PostgresLockAccessModeEnum::Exclusive,
154158
): bool {
155-
if ($level === PostgresAdvisoryLockLevelEnum::Transaction && $dbConnection->inTransaction() === false) {
159+
if ($level === PostgresLockLevelEnum::Transaction && $dbConnection->inTransaction() === false) {
156160
throw new LogicException(
157161
"Transaction-level advisory lock `$postgresLockId->humanReadableValue` cannot be acquired outside of transaction",
158162
);
159163
}
160164

161165
$sql = match ([$level, $waitMode, $accessMode]) {
162166
[
163-
PostgresAdvisoryLockLevelEnum::Transaction,
164-
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
167+
PostgresLockLevelEnum::Transaction,
168+
PostgresLockWaitModeEnum::NonBlocking,
165169
PostgresLockAccessModeEnum::Exclusive,
166170
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK(:class_id, :object_id);',
167171
[
168-
PostgresAdvisoryLockLevelEnum::Transaction,
169-
PostgresAdvisoryLockWaitModeEnum::Blocking,
172+
PostgresLockLevelEnum::Transaction,
173+
PostgresLockWaitModeEnum::Blocking,
170174
PostgresLockAccessModeEnum::Exclusive,
171175
] => 'SELECT PG_ADVISORY_XACT_LOCK(:class_id, :object_id);',
172176
[
173-
PostgresAdvisoryLockLevelEnum::Transaction,
174-
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
177+
PostgresLockLevelEnum::Transaction,
178+
PostgresLockWaitModeEnum::NonBlocking,
175179
PostgresLockAccessModeEnum::Share,
176180
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id);',
177181
[
178-
PostgresAdvisoryLockLevelEnum::Transaction,
179-
PostgresAdvisoryLockWaitModeEnum::Blocking,
182+
PostgresLockLevelEnum::Transaction,
183+
PostgresLockWaitModeEnum::Blocking,
180184
PostgresLockAccessModeEnum::Share,
181185
] => 'SELECT PG_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id);',
182186
[
183-
PostgresAdvisoryLockLevelEnum::Session,
184-
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
187+
PostgresLockLevelEnum::Session,
188+
PostgresLockWaitModeEnum::NonBlocking,
185189
PostgresLockAccessModeEnum::Exclusive,
186190
] => 'SELECT PG_TRY_ADVISORY_LOCK(:class_id, :object_id);',
187191
[
188-
PostgresAdvisoryLockLevelEnum::Session,
189-
PostgresAdvisoryLockWaitModeEnum::Blocking,
192+
PostgresLockLevelEnum::Session,
193+
PostgresLockWaitModeEnum::Blocking,
190194
PostgresLockAccessModeEnum::Exclusive,
191195
] => 'SELECT PG_ADVISORY_LOCK(:class_id, :object_id);',
192196
[
193-
PostgresAdvisoryLockLevelEnum::Session,
194-
PostgresAdvisoryLockWaitModeEnum::NonBlocking,
197+
PostgresLockLevelEnum::Session,
198+
PostgresLockWaitModeEnum::NonBlocking,
195199
PostgresLockAccessModeEnum::Share,
196200
] => 'SELECT PG_TRY_ADVISORY_LOCK_SHARED(:class_id, :object_id);',
197201
[
198-
PostgresAdvisoryLockLevelEnum::Session,
199-
PostgresAdvisoryLockWaitModeEnum::Blocking,
202+
PostgresLockLevelEnum::Session,
203+
PostgresLockWaitModeEnum::Blocking,
200204
PostgresLockAccessModeEnum::Share,
201205
] => 'SELECT PG_ADVISORY_LOCK_SHARED(:class_id, :object_id);',
202206
};

src/LockId/PostgresLockId.php renamed to src/Postgres/PostgresLockId.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace Cog\DbLocker\LockId;
14+
namespace Cog\DbLocker\Postgres;
1515

1616
use InvalidArgumentException;
1717

test/Integration/AbstractIntegrationTestCase.php

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

1414
namespace Cog\Test\DbLocker\Integration;
1515

16-
use Cog\DbLocker\Locker\PostgresLockAccessModeEnum;
17-
use Cog\DbLocker\LockId\PostgresLockId;
16+
use Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum;
17+
use Cog\DbLocker\Postgres\PostgresLockId;
1818
use PDO;
1919
use PHPUnit\Framework\TestCase;
2020

test/Integration/Locker/PostgresAdvisoryLockerTest.php renamed to test/Integration/Postgres/PostgresAdvisoryLockerTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace Cog\Test\DbLocker\Integration\Locker;
14+
namespace Cog\Test\DbLocker\Integration\Postgres;
1515

16-
use Cog\DbLocker\Locker\PostgresAdvisoryLocker;
17-
use Cog\DbLocker\Locker\PostgresLockAccessModeEnum;
18-
use Cog\DbLocker\LockId\PostgresLockId;
16+
use Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum;
17+
use Cog\DbLocker\Postgres\PostgresAdvisoryLocker;
18+
use Cog\DbLocker\Postgres\PostgresLockId;
1919
use Cog\Test\DbLocker\Integration\AbstractIntegrationTestCase;
2020
use LogicException;
2121
use PHPUnit\Framework\Attributes\DataProvider;

0 commit comments

Comments
 (0)