@@ -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