From 39fccf4fc9e9a283384a2447c9cdb61adb511a4e Mon Sep 17 00:00:00 2001 From: Yurii Date: Thu, 25 Jun 2026 09:07:30 +0300 Subject: [PATCH] ORM: Skip foreign if for share --- .../ORM/QueryComposer/BaseQueryComposer.php | 8 ++++++-- .../QueryComposer/PostgresqlQueryComposer.php | 2 +- .../Espo/ORM/PostgresqlQueryComposerTest.php | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php index ea9542641a..74ddcdf1d7 100644 --- a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php @@ -162,7 +162,7 @@ abstract class BaseQueryComposer implements QueryComposer protected int $aliasMaxLength = 256; protected bool $indexHints = true; - protected bool $skipForeignIfForUpdate = false; + protected bool $skipForeignIfLock = false; protected Helper $helper; @@ -712,7 +712,11 @@ abstract class BaseQueryComposer implements QueryComposer */ private function skipForeign(array $params): bool { - return $this->skipForeignIfForUpdate && ($params['forUpdate'] ?? false); + return $this->skipForeignIfLock && + ( + ($params['forUpdate'] ?? false) || + ($params['forShare'] ?? false) + ); } /** diff --git a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php index e19bfc4295..f0769ea36b 100644 --- a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php @@ -46,7 +46,7 @@ class PostgresqlQueryComposer extends BaseQueryComposer { protected string $identifierQuoteCharacter = '"'; protected bool $indexHints = false; - protected bool $skipForeignIfForUpdate = true; + protected bool $skipForeignIfLock = true; protected int $aliasMaxLength = 128; /** @var array */ diff --git a/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php b/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php index 6dd49842a4..74066e35d0 100644 --- a/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php +++ b/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php @@ -157,6 +157,23 @@ class PostgresqlQueryComposerTest extends TestCase $this->assertEquals($expectedSql, $sql); } + public function testSelectForShare() + { + $query = SelectBuilder::create() + ->from('Comment') + ->select(['name', 'postId', 'postName']) + ->forShare() + ->build(); + + $sql = $this->queryComposer->composeSelect($query); + + $expectedSql = + 'SELECT "comment"."name" AS "name", "comment"."post_id" AS "postId" ' . + 'FROM "comment" WHERE "comment"."deleted" = false FOR SHARE'; + + $this->assertEquals($expectedSql, $sql); + } + public function testDelete1(): void { $query = DeleteBuilder::create()