From 03969a20fe9b0ba4500bda3330d6464a97785336 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Tue, 25 Mar 2025 13:36:14 +0200 Subject: [PATCH] select for share mysql fix --- .../ORM/QueryComposer/BaseQueryComposer.php | 2 +- .../QueryComposer/PostgresqlQueryComposer.php | 19 +++++++++++++++++++ .../unit/Espo/ORM/MysqlQueryComposerTest.php | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php index 853db49cf2..a60799ace4 100644 --- a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php @@ -2032,7 +2032,7 @@ abstract class BaseQueryComposer implements QueryComposer $forUpdate = $params['forUpdate'] ?? null; if ($forShare) { - return "FOR SHARE"; + return "LOCK IN SHARE MODE"; } if ($forUpdate) { diff --git a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php index f277930670..3760e52263 100644 --- a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php @@ -591,4 +591,23 @@ class PostgresqlQueryComposer extends BaseQueryComposer return $sql; } + + /** + * @param array $params + */ + protected function getSelectTailPart(array $params): ?string + { + $forShare = $params['forShare'] ?? null; + $forUpdate = $params['forUpdate'] ?? null; + + if ($forShare) { + return "FOR SHARE"; + } + + if ($forUpdate) { + return "FOR UPDATE"; + } + + return null; + } } diff --git a/tests/unit/Espo/ORM/MysqlQueryComposerTest.php b/tests/unit/Espo/ORM/MysqlQueryComposerTest.php index 3b5e7507b1..055f1e9939 100644 --- a/tests/unit/Espo/ORM/MysqlQueryComposerTest.php +++ b/tests/unit/Espo/ORM/MysqlQueryComposerTest.php @@ -3031,7 +3031,7 @@ class MysqlQueryComposerTest extends \PHPUnit\Framework\TestCase $expectedSql = "SELECT account.id AS `id` ". "FROM `account` ". - "FOR SHARE"; + "LOCK IN SHARE MODE"; $this->assertEquals($expectedSql, $sql); }