11
11
12
12
declare (strict_types=1 );
13
13
14
- namespace Cog \DbLocker \Locker ;
14
+ namespace Cog \DbLocker \Postgres ;
15
15
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 ;
17
21
use LogicException ;
18
22
use PDO ;
19
23
@@ -27,14 +31,14 @@ final class PostgresAdvisoryLocker
27
31
public function acquireTransactionLevelLockHandler (
28
32
PDO $ dbConnection ,
29
33
PostgresLockId $ postgresLockId ,
30
- PostgresAdvisoryLockWaitModeEnum $ waitMode = PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
34
+ PostgresLockWaitModeEnum $ waitMode = PostgresLockWaitModeEnum ::NonBlocking,
31
35
PostgresLockAccessModeEnum $ accessMode = PostgresLockAccessModeEnum::Exclusive,
32
- ): AdvisoryLockTransactionLevel {
33
- return new AdvisoryLockTransactionLevel (
36
+ ): PostgresTransactionLevelLockHandle {
37
+ return new PostgresTransactionLevelLockHandle (
34
38
wasAcquired: $ this ->acquireLock (
35
39
$ dbConnection ,
36
40
$ postgresLockId ,
37
- PostgresAdvisoryLockLevelEnum ::Transaction,
41
+ PostgresLockLevelEnum ::Transaction,
38
42
$ waitMode ,
39
43
$ accessMode ,
40
44
),
@@ -47,13 +51,13 @@ public function acquireTransactionLevelLockHandler(
47
51
public function acquireTransactionLevelLock (
48
52
PDO $ dbConnection ,
49
53
PostgresLockId $ postgresLockId ,
50
- PostgresAdvisoryLockWaitModeEnum $ waitMode = PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
54
+ PostgresLockWaitModeEnum $ waitMode = PostgresLockWaitModeEnum ::NonBlocking,
51
55
PostgresLockAccessModeEnum $ accessMode = PostgresLockAccessModeEnum::Exclusive,
52
56
): bool {
53
57
return $ this ->acquireLock (
54
58
$ dbConnection ,
55
59
$ postgresLockId ,
56
- PostgresAdvisoryLockLevelEnum ::Transaction,
60
+ PostgresLockLevelEnum ::Transaction,
57
61
$ waitMode ,
58
62
$ accessMode ,
59
63
);
@@ -68,18 +72,18 @@ public function acquireTransactionLevelLock(
68
72
public function acquireSessionLevelLockHandler (
69
73
PDO $ dbConnection ,
70
74
PostgresLockId $ postgresLockId ,
71
- PostgresAdvisoryLockWaitModeEnum $ waitMode = PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
75
+ PostgresLockWaitModeEnum $ waitMode = PostgresLockWaitModeEnum ::NonBlocking,
72
76
PostgresLockAccessModeEnum $ accessMode = PostgresLockAccessModeEnum::Exclusive,
73
- ): AdvisoryLockSessionLevel {
74
- return new AdvisoryLockSessionLevel (
77
+ ): PostgresSessionLevelLockHandle {
78
+ return new PostgresSessionLevelLockHandle (
75
79
$ dbConnection ,
76
80
$ this ,
77
81
$ postgresLockId ,
78
82
$ accessMode ,
79
83
wasAcquired: $ this ->acquireLock (
80
84
$ dbConnection ,
81
85
$ postgresLockId ,
82
- PostgresAdvisoryLockLevelEnum ::Session,
86
+ PostgresLockLevelEnum ::Session,
83
87
$ waitMode ,
84
88
$ accessMode ,
85
89
),
@@ -94,13 +98,13 @@ public function acquireSessionLevelLockHandler(
94
98
public function acquireSessionLevelLock (
95
99
PDO $ dbConnection ,
96
100
PostgresLockId $ postgresLockId ,
97
- PostgresAdvisoryLockWaitModeEnum $ waitMode = PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
101
+ PostgresLockWaitModeEnum $ waitMode = PostgresLockWaitModeEnum ::NonBlocking,
98
102
PostgresLockAccessModeEnum $ accessMode = PostgresLockAccessModeEnum::Exclusive,
99
103
): bool {
100
104
return $ this ->acquireLock (
101
105
$ dbConnection ,
102
106
$ postgresLockId ,
103
- PostgresAdvisoryLockLevelEnum ::Session,
107
+ PostgresLockLevelEnum ::Session,
104
108
$ waitMode ,
105
109
$ accessMode ,
106
110
);
@@ -148,55 +152,55 @@ public function releaseAllSessionLevelLocks(
148
152
private function acquireLock (
149
153
PDO $ dbConnection ,
150
154
PostgresLockId $ postgresLockId ,
151
- PostgresAdvisoryLockLevelEnum $ level ,
152
- PostgresAdvisoryLockWaitModeEnum $ waitMode = PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
155
+ PostgresLockLevelEnum $ level ,
156
+ PostgresLockWaitModeEnum $ waitMode = PostgresLockWaitModeEnum ::NonBlocking,
153
157
PostgresLockAccessModeEnum $ accessMode = PostgresLockAccessModeEnum::Exclusive,
154
158
): bool {
155
- if ($ level === PostgresAdvisoryLockLevelEnum ::Transaction && $ dbConnection ->inTransaction () === false ) {
159
+ if ($ level === PostgresLockLevelEnum ::Transaction && $ dbConnection ->inTransaction () === false ) {
156
160
throw new LogicException (
157
161
"Transaction-level advisory lock ` $ postgresLockId ->humanReadableValue ` cannot be acquired outside of transaction " ,
158
162
);
159
163
}
160
164
161
165
$ sql = match ([$ level , $ waitMode , $ accessMode ]) {
162
166
[
163
- PostgresAdvisoryLockLevelEnum ::Transaction,
164
- PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
167
+ PostgresLockLevelEnum ::Transaction,
168
+ PostgresLockWaitModeEnum ::NonBlocking,
165
169
PostgresLockAccessModeEnum::Exclusive,
166
170
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK(:class_id, :object_id); ' ,
167
171
[
168
- PostgresAdvisoryLockLevelEnum ::Transaction,
169
- PostgresAdvisoryLockWaitModeEnum ::Blocking,
172
+ PostgresLockLevelEnum ::Transaction,
173
+ PostgresLockWaitModeEnum ::Blocking,
170
174
PostgresLockAccessModeEnum::Exclusive,
171
175
] => 'SELECT PG_ADVISORY_XACT_LOCK(:class_id, :object_id); ' ,
172
176
[
173
- PostgresAdvisoryLockLevelEnum ::Transaction,
174
- PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
177
+ PostgresLockLevelEnum ::Transaction,
178
+ PostgresLockWaitModeEnum ::NonBlocking,
175
179
PostgresLockAccessModeEnum::Share,
176
180
] => 'SELECT PG_TRY_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id); ' ,
177
181
[
178
- PostgresAdvisoryLockLevelEnum ::Transaction,
179
- PostgresAdvisoryLockWaitModeEnum ::Blocking,
182
+ PostgresLockLevelEnum ::Transaction,
183
+ PostgresLockWaitModeEnum ::Blocking,
180
184
PostgresLockAccessModeEnum::Share,
181
185
] => 'SELECT PG_ADVISORY_XACT_LOCK_SHARED(:class_id, :object_id); ' ,
182
186
[
183
- PostgresAdvisoryLockLevelEnum ::Session,
184
- PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
187
+ PostgresLockLevelEnum ::Session,
188
+ PostgresLockWaitModeEnum ::NonBlocking,
185
189
PostgresLockAccessModeEnum::Exclusive,
186
190
] => 'SELECT PG_TRY_ADVISORY_LOCK(:class_id, :object_id); ' ,
187
191
[
188
- PostgresAdvisoryLockLevelEnum ::Session,
189
- PostgresAdvisoryLockWaitModeEnum ::Blocking,
192
+ PostgresLockLevelEnum ::Session,
193
+ PostgresLockWaitModeEnum ::Blocking,
190
194
PostgresLockAccessModeEnum::Exclusive,
191
195
] => 'SELECT PG_ADVISORY_LOCK(:class_id, :object_id); ' ,
192
196
[
193
- PostgresAdvisoryLockLevelEnum ::Session,
194
- PostgresAdvisoryLockWaitModeEnum ::NonBlocking,
197
+ PostgresLockLevelEnum ::Session,
198
+ PostgresLockWaitModeEnum ::NonBlocking,
195
199
PostgresLockAccessModeEnum::Share,
196
200
] => 'SELECT PG_TRY_ADVISORY_LOCK_SHARED(:class_id, :object_id); ' ,
197
201
[
198
- PostgresAdvisoryLockLevelEnum ::Session,
199
- PostgresAdvisoryLockWaitModeEnum ::Blocking,
202
+ PostgresLockLevelEnum ::Session,
203
+ PostgresLockWaitModeEnum ::Blocking,
200
204
PostgresLockAccessModeEnum::Share,
201
205
] => 'SELECT PG_ADVISORY_LOCK_SHARED(:class_id, :object_id); ' ,
202
206
};
0 commit comments