From b71a237cad708b3d51de33a386cbd14f11c0ab9a Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 14 May 2025 13:58:35 +0300 Subject: [PATCH] postgresql delete alias fix --- .../QueryComposer/PostgresqlQueryComposer.php | 36 +++++++++++++++++++ .../Espo/ORM/PostgresqlQueryComposerTest.php | 19 ++++++++++ 2 files changed, 55 insertions(+) diff --git a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php index 9a1d71cf5b..d9288021f2 100644 --- a/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/PostgresqlQueryComposer.php @@ -617,4 +617,40 @@ class PostgresqlQueryComposer extends BaseQueryComposer return null; } + + protected function composeDeleteQuery( + string $table, + ?string $alias, + string $where, + ?string $joins, + ?string $order, + ?int $limit + ): string { + + $sql = "DELETE "; + + $sql .= "FROM " . $this->quoteIdentifier($table); + + if ($alias) { + $sql .= " AS " . $this->quoteIdentifier($alias); + } + + if ($joins) { + $sql .= " $joins"; + } + + if ($where) { + $sql .= " WHERE $where"; + } + + if ($order) { + $sql .= " ORDER BY $order"; + } + + if ($limit !== null) { + $sql = $this->limit($sql, null, $limit); + } + + return $sql; + } } diff --git a/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php b/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php index 6f9bf7f2e9..247b718783 100644 --- a/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php +++ b/tests/unit/Espo/ORM/PostgresqlQueryComposerTest.php @@ -347,4 +347,23 @@ class PostgresqlQueryComposerTest extends \PHPUnit\Framework\TestCase $this->assertEquals($expectedSql, $sql); } + + public function testDeleteWithAlias() + { + $query = $this->queryBuilder + ->delete() + ->from('Account', 'a') + ->where([ + 'a.name' => 'test', + ]) + ->build(); + + $sql = $this->queryComposer->compose($query); + + $expectedSql = + "DELETE FROM \"account\" AS \"a\" " . + "WHERE \"a\".\"name\" = 'test'"; + + $this->assertEquals($expectedSql, $sql); + } }