From 622cf46858fee77e12aed9df4de3f371dfd8b0e7 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 24 Jul 2021 11:01:55 +0300 Subject: [PATCH] orm order expression fix --- .../ORM/QueryComposer/BaseQueryComposer.php | 2 +- .../unit/Espo/ORM/MysqlQueryComposerTest.php | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php index d8f57f599c..dedbec22d2 100644 --- a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php @@ -2048,7 +2048,7 @@ abstract class BaseQueryComposer implements QueryComposer protected function getAttributePathForOrderBy(Entity $entity, string $orderBy, array $params): ?string { - if (strpos($orderBy, '.') !== false || strpos($orderBy, ':') !== false) { + if (Util::isComplexExpression($orderBy)) { return $this->convertComplexExpression( $entity, $orderBy, diff --git a/tests/unit/Espo/ORM/MysqlQueryComposerTest.php b/tests/unit/Espo/ORM/MysqlQueryComposerTest.php index a2b5679826..59ba3f08e9 100644 --- a/tests/unit/Espo/ORM/MysqlQueryComposerTest.php +++ b/tests/unit/Espo/ORM/MysqlQueryComposerTest.php @@ -36,6 +36,7 @@ use Espo\ORM\{ QueryBuilder, EntityManager, MetadataDataProvider, + Query\Part\Expression, }; use Espo\ORM\Query\{ @@ -1097,6 +1098,26 @@ class MysqlQueryComposerTest extends \PHPUnit\Framework\TestCase $this->assertEquals($expectedSql, $sql); } + public function testOrderByExpression3() + { + $select = $this->queryBuilder + ->select() + ->from('Article') + ->distinct() + ->select(['id']) + ->order(Expression::create('1'), 'DESC') + ->build(); + + $expectedSql = + "SELECT DISTINCT article.id AS `id` " . + "FROM `article` WHERE article.deleted = 0 ". + "ORDER BY 1 DESC"; + + $sql = $this->query->compose($select); + + $this->assertEquals($expectedSql, $sql); + } + public function testOrderBy2() { $select = $this->queryBuilder