77 <a href="https://github.com/cybercog/php-db-locker/blob/master/LICENSE"><img src="https://img.shields.io/github/license/cybercog/php-db-locker.svg?style=flat-square" alt="License"></a>
88</p >
99
10+ ## Things to decide
11+
12+ - [ ] Should wait mode be blocking or non-blocking by default?
13+ - [ ] Should callback for session lock be at the end of the params (after optional ones)?
14+
1015## Introduction
1116
1217> WARNING! This library is currently under development and may not be stable. Use in your services at your own risk.
@@ -38,7 +43,7 @@ $locker = new \Cog\DbLocker\Postgres\PostgresAdvisoryLocker();
3843$lockId = \Cog\DbLocker\Postgres\PostgresLockKey::create('user', '4');
3944
4045$dbConnection->beginTransaction();
41- $lock = $locker->acquireSessionLevelLockHandler (
46+ $lock = $locker->acquireSessionLevelLock (
4247 $dbConnection,
4348 $lockId,
4449 \Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum::NonBlocking,
@@ -54,18 +59,45 @@ $dbConnection->commit();
5459
5560#### Session-level advisory lock
5661
62+ Callback API
63+
5764``` php
5865$dbConnection = new PDO($dsn, $username, $password);
5966
6067$locker = new \Cog\DbLocker\Postgres\PostgresAdvisoryLocker();
61- $lockId = \Cog\DbLocker\Postgres\PostgresLockKey::create('user', '4');
68+ $lockKey = \Cog\DbLocker\Postgres\PostgresLockKey::create('user', '4');
69+
70+ $payment = $locker->withinSessionLevelLock(
71+ dbConnection: $dbConnection,
72+ key: $lockKey,
73+ callback: function (
74+ \Cog\DbLocker\Postgres\LockHandle\SessionLevelLockHandle $lock,
75+ ): Payment { // Define a type of $payment variable, so it will be resolved by analyzers
76+ if ($lock->wasAcquired) {
77+ // Execute logic if lock was successful
78+ } else {
79+ // Execute logic if lock acquisition has been failed
80+ }
81+ },
82+ waitMode: \Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum::NonBlocking,
83+ accessMode: \Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum::Exclusive,
84+ );
85+ ```
86+
87+ Low-level API
88+
89+ ``` php
90+ $dbConnection = new PDO($dsn, $username, $password);
91+
92+ $locker = new \Cog\DbLocker\Postgres\PostgresAdvisoryLocker();
93+ $lockKey = \Cog\DbLocker\Postgres\PostgresLockKey::create('user', '4');
6294
6395try {
64- $lock = $locker->acquireSessionLevelLockHandler (
65- $dbConnection,
66- $lockId ,
67- \Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum::NonBlocking,
68- \Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum::Exclusive,
96+ $lock = $locker->acquireSessionLevelLock (
97+ dbConnection: $dbConnection,
98+ key: $lockKey ,
99+ waitMode: \Cog\DbLocker\Postgres\Enum\PostgresLockWaitModeEnum::NonBlocking,
100+ accessMode: \Cog\DbLocker\Postgres\Enum\PostgresLockAccessModeEnum::Exclusive,
69101 );
70102 if ($lock->wasAcquired) {
71103 // Execute logic if lock was successful
0 commit comments