From 30b4b8d50128ab09e29720711a74923efa438f29 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 1 Apr 2022 11:12:21 +0300 Subject: [PATCH] refactoring --- application/Espo/Core/Select/Where/Item.php | 20 +-- .../Espo/Core/Select/Where/Item/Type.php | 149 ++++++++++++++++++ .../Espo/Core/Select/Where/ItemBuilder.php | 5 + .../Select/Where/ItemGeneralConverter.php | 42 ++--- 4 files changed, 186 insertions(+), 30 deletions(-) create mode 100644 application/Espo/Core/Select/Where/Item/Type.php diff --git a/application/Espo/Core/Select/Where/Item.php b/application/Espo/Core/Select/Where/Item.php index 07d9716481..2d934f1365 100644 --- a/application/Espo/Core/Select/Where/Item.php +++ b/application/Espo/Core/Select/Where/Item.php @@ -34,9 +34,9 @@ use RuntimeException; class Item { - public const TYPE_AND = 'and'; + public const TYPE_AND = Item\Type::AND; - public const TYPE_OR = 'or'; + public const TYPE_OR = Item\Type::OR; private string $type; @@ -55,11 +55,11 @@ class Item * @var string[] */ private $noAttributeTypeList = [ - self::TYPE_OR, - self::TYPE_AND, - 'not', - 'subQueryNotIn', - 'subQueryIn', + Item\Type::AND, + Item\Type::OR, + Item\Type::NOT, + Item\Type::SUBQUERY_IN, + Item\Type::SUBQUERY_NOT_IN, 'having', // @todo Check usage. Maybe to be removed. ]; @@ -67,8 +67,8 @@ class Item * @var string[] */ private $withNestedItemsTypeList = [ - self::TYPE_OR, - self::TYPE_AND, + Item\Type::AND, + Item\Type::OR, ]; private function __construct(string $type) @@ -129,7 +129,7 @@ class Item public static function fromRawAndGroup(array $paramList): self { return self::fromRaw([ - 'type' => self::TYPE_AND, + 'type' => Item\Type::AND, 'value' => $paramList, ]); } diff --git a/application/Espo/Core/Select/Where/Item/Type.php b/application/Espo/Core/Select/Where/Item/Type.php new file mode 100644 index 0000000000..6de8c5c1f5 --- /dev/null +++ b/application/Espo/Core/Select/Where/Item/Type.php @@ -0,0 +1,149 @@ +type = $type; diff --git a/application/Espo/Core/Select/Where/ItemGeneralConverter.php b/application/Espo/Core/Select/Where/ItemGeneralConverter.php index 90a0003352..13825226ab 100644 --- a/application/Espo/Core/Select/Where/ItemGeneralConverter.php +++ b/application/Espo/Core/Select/Where/ItemGeneralConverter.php @@ -29,6 +29,8 @@ namespace Espo\Core\Select\Where; +use Espo\Core\Select\Where\Item\Type; + use Espo\{ Core\Exceptions\Error, ORM\Query\SelectBuilder as QueryBuilder, @@ -115,7 +117,10 @@ class ItemGeneralConverter implements ItemConverter if ($attribute) { if ($this->itemConverterFactory->has($this->entityType, $attribute, $type)) { $converter = $this->itemConverterFactory->create( - $this->entityType, $attribute, $type, $this->user + $this->entityType, + $attribute, + $type, + $this->user ); return $converter->convert($queryBuilder, $item); @@ -129,17 +134,16 @@ class ItemGeneralConverter implements ItemConverter } switch ($type) { - - case 'or': - case 'and': + case Type::OR: + case Type::AND: return WhereClause::fromRaw( $this->groupProcessAndOr($queryBuilder, $type, $attribute, $value) ); - case 'not': - case 'subQueryNotIn': - case 'subQueryIn': + case Type::NOT: + case Type::SUBQUERY_NOT_IN: + case Type::SUBQUERY_IN: return WhereClause::fromRaw( $this->groupProcessSubQuery($queryBuilder, $type, $attribute, $value) @@ -163,11 +167,11 @@ class ItemGeneralConverter implements ItemConverter $this->groupProcessColumn($queryBuilder, $type, $attribute, $value) ); - case 'arrayAnyOf': - case 'arrayNoneOf': - case 'arrayIsEmpty': - case 'arrayIsNotEmpty': - case 'arrayAllOf': + case Type::ARRAY_ANY_OF: + case Type::ARRAY_NONE_OF: + case Type::ARRAY_IS_EMPTY: + case Type::ARRAY_IS_EMPTY: + case Type::ARRAY_ALL_OF: return WhereClause::fromRaw( $this->groupProcessArray($queryBuilder, $type, $attribute, $value) @@ -246,7 +250,7 @@ class ItemGeneralConverter implements ItemConverter ->from($this->entityType); $whereItem = Item::fromRaw([ - 'type' => 'and', + 'type' => Type::AND, 'value' => $value, ]); @@ -286,7 +290,6 @@ class ItemGeneralConverter implements ItemConverter $alias = $link . 'ColumnFilter' . $this->randomStringGenerator->generate(); $queryBuilder->distinct(); - $queryBuilder->leftJoin($link, $alias); $columnKey = $alias . 'Middle.' . $column; @@ -393,7 +396,7 @@ class ItemGeneralConverter implements ItemConverter } } - if ($type === 'arrayAnyOf') { + if ($type === Type::ARRAY_ANY_OF) { if (is_null($value) || !$value && !is_array($value)) { throw new Error("Bad where item. No value."); } @@ -415,7 +418,7 @@ class ItemGeneralConverter implements ItemConverter ]; } - if ($type === 'arrayNoneOf') { + if ($type === Type::ARRAY_NONE_OF) { if (is_null($value) || !$value && !is_array($value)) { throw new Error("Bad where item 'array'. No value."); } @@ -438,7 +441,7 @@ class ItemGeneralConverter implements ItemConverter ]; } - if ($type === 'arrayIsEmpty') { + if ($type === Type::ARRAY_IS_EMPTY) { $queryBuilder->distinct(); $queryBuilder->leftJoin( @@ -456,7 +459,7 @@ class ItemGeneralConverter implements ItemConverter ]; } - if ($type === 'arrayIsNotEmpty') { + if ($type === Type::ARRAY_IS_NOT_EMPTY) { $queryBuilder->distinct(); $queryBuilder->leftJoin( @@ -474,7 +477,7 @@ class ItemGeneralConverter implements ItemConverter ]; } - if ($type === 'arrayAllOf') { + if ($type === Type::ARRAY_ALL_OF) { if (is_null($value) || !$value && !is_array($value)) { throw new Error("Bad where item 'array'. No value."); } @@ -1223,7 +1226,6 @@ class ItemGeneralConverter implements ItemConverter $alias = $link . 'IsLinkedFilter' . $this->randomStringGenerator->generate(); $queryBuilder->distinct(); - $queryBuilder->leftJoin($link, $alias); return [