diff --git a/application/Espo/ORM/CollectionFactory.php b/application/Espo/ORM/CollectionFactory.php index 506ac34053..f4658ec2ce 100644 --- a/application/Espo/ORM/CollectionFactory.php +++ b/application/Espo/ORM/CollectionFactory.php @@ -36,14 +36,12 @@ use Espo\ORM\Query\Select; */ class CollectionFactory { - protected EntityManager $entityManager; - - public function __construct(EntityManager $entityManager) - { - $this->entityManager = $entityManager; - } + public function __construct(protected EntityManager $entityManager) + {} /** + * Create. + * * @param array> $dataList * @return EntityCollection */ @@ -53,6 +51,8 @@ class CollectionFactory } /** + * Create from an SQL. + * * @return SthCollection */ public function createFromSql(string $entityType, string $sql): SthCollection @@ -61,6 +61,8 @@ class CollectionFactory } /** + * Create from a query. + * * @return SthCollection */ public function createFromQuery(Select $query): SthCollection @@ -69,6 +71,8 @@ class CollectionFactory } /** + * Create EntityCollection from SthCollection. + * * @template TEntity of Entity * @param SthCollection $sthCollection * @return EntityCollection diff --git a/application/Espo/ORM/Defs.php b/application/Espo/ORM/Defs.php index 79494f4126..2aee0804db 100644 --- a/application/Espo/ORM/Defs.php +++ b/application/Espo/ORM/Defs.php @@ -33,6 +33,4 @@ namespace Espo\ORM; * Definitions. */ class Defs extends Defs\Defs -{ - -} +{} diff --git a/application/Espo/ORM/EntityCollection.php b/application/Espo/ORM/EntityCollection.php index 2f67f5dc8f..86d0450de5 100644 --- a/application/Espo/ORM/EntityCollection.php +++ b/application/Espo/ORM/EntityCollection.php @@ -36,15 +36,16 @@ use SeekableIterator; use RuntimeException; use OutOfBoundsException; use InvalidArgumentException; +use stdClass; /** * A standard collection of entities. It allocates a memory for all entities. * * @template TEntity of Entity - * @implements Iterator + * @implements Iterator * @implements Collection - * @implements ArrayAccess - * @implements SeekableIterator + * @implements ArrayAccess + * @implements SeekableIterator */ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, SeekableIterator { @@ -56,7 +57,7 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, protected array $dataList = []; /** - * @param array> $dataList + * @param array> $dataList */ public function __construct( array $dataList = [], @@ -237,7 +238,7 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, } /** - * @param array $dataArray + * @param array $dataArray * @return TEntity */ protected function buildEntityFromArray(array $dataArray): Entity @@ -304,7 +305,7 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, /** * Whether a collection contains a specific item. * - * @param TEntity|array $value + * @param TEntity|array $value */ public function contains($value): bool { @@ -316,7 +317,7 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, } /** - * @param TEntity|array $value + * @param TEntity|array $value * @return false|int */ public function indexOf($value) @@ -361,7 +362,7 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, /** * @deprecated As of v6.0. Use `getValueMapList`. - * @return array>|\stdClass[] + * @return array>|stdClass[] */ public function toArray(bool $itemsAsObjects = false): array { @@ -381,9 +382,12 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, return $arr; } + /** + * {@inheritDoc} + */ public function getValueMapList(): array { - /** @var \stdClass[] */ + /** @var stdClass[] */ return $this->toArray(true); } @@ -404,6 +408,8 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, } /** + * Create from SthCollection. + * * @param SthCollection $sthCollection * @return self */ @@ -417,7 +423,6 @@ class EntityCollection implements Collection, Iterator, Countable, ArrayAccess, /** @var self $obj */ $obj = new EntityCollection($entityList, $sthCollection->getEntityType()); - $obj->setAsFetched(); return $obj; diff --git a/application/Espo/ORM/EventDispatcher.php b/application/Espo/ORM/EventDispatcher.php index 60772ac23d..8d07c3c64c 100644 --- a/application/Espo/ORM/EventDispatcher.php +++ b/application/Espo/ORM/EventDispatcher.php @@ -34,9 +34,7 @@ namespace Espo\ORM; */ class EventDispatcher { - /** - * @var array{'metadataUpdate': callable[]} - */ + /** @var array{'metadataUpdate': callable[]} */ private $data; private const METADATA_UPDATE = 'metadataUpdate'; diff --git a/application/Espo/ORM/Mapper/BaseMapper.php b/application/Espo/ORM/Mapper/BaseMapper.php index 1c4b8b0209..d5adeb2120 100644 --- a/application/Espo/ORM/Mapper/BaseMapper.php +++ b/application/Espo/ORM/Mapper/BaseMapper.php @@ -214,7 +214,7 @@ class BaseMapper implements RDBMapper } /** - * Select entities from DB by a SQL query. + * Select entities from DB by aт SQL query. * * @return SthCollection */ diff --git a/application/Espo/ORM/Metadata.php b/application/Espo/ORM/Metadata.php index f86ac534a2..d35db00eec 100644 --- a/application/Espo/ORM/Metadata.php +++ b/application/Espo/ORM/Metadata.php @@ -29,10 +29,7 @@ namespace Espo\ORM; -use Espo\ORM\{ - Defs\DefsData, - Defs, -}; +use Espo\ORM\Defs\DefsData; use InvalidArgumentException; @@ -41,29 +38,20 @@ use InvalidArgumentException; */ class Metadata { - /** - * @var array - */ + /** @var array */ private array $data; private Defs $defs; - private DefsData $defsData; - - private MetadataDataProvider $dataProvider; - private EventDispatcher $eventDispatcher; - public function __construct(MetadataDataProvider $dataProvider, ?EventDispatcher $eventDispatcher = null) - { + public function __construct( + private MetadataDataProvider $dataProvider, + ?EventDispatcher $eventDispatcher = null + ) { $this->data = $dataProvider->get(); - - $this->dataProvider = $dataProvider; - $this->defsData = new DefsData($this); - $this->defs = new Defs($this->defsData); - $this->eventDispatcher = $eventDispatcher ?? new EventDispatcher(); } @@ -92,7 +80,7 @@ class Metadata * * @param string $entityType An entity type. * @param string[]|string|null $key A Key. - * @param mixed $default A default value. * + * @param mixed $default A default value. * @return mixed */ public function get(string $entityType, $key = null, $default = null) diff --git a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php index 045021f90d..373fb1d658 100644 --- a/application/Espo/ORM/QueryComposer/BaseQueryComposer.php +++ b/application/Espo/ORM/QueryComposer/BaseQueryComposer.php @@ -3666,7 +3666,7 @@ abstract class BaseQueryComposer implements QueryComposer } /** - * Add a LIMIT part to a SQL query. + * Add a LIMIT part to an SQL query. */ abstract protected function limit(string $sql, ?int $offset = null, ?int $limit = null): string; } diff --git a/application/Espo/ORM/QueryExecutor.php b/application/Espo/ORM/QueryExecutor.php index 2cc70bb090..8f1e8f6ea1 100644 --- a/application/Espo/ORM/QueryExecutor.php +++ b/application/Espo/ORM/QueryExecutor.php @@ -39,14 +39,10 @@ use PDOStatement; */ class QueryExecutor { - private SqlExecutor $sqlExecutor; - private QueryComposerWrapper $queryComposer; - - public function __construct(SqlExecutor $sqlExecutor, QueryComposerWrapper $queryComposer) - { - $this->sqlExecutor = $sqlExecutor; - $this->queryComposer = $queryComposer; - } + public function __construct( + private SqlExecutor $sqlExecutor, + private QueryComposerWrapper $queryComposer + ) {} /** * Execute a query. diff --git a/application/Espo/ORM/Repository/RDBRepository.php b/application/Espo/ORM/Repository/RDBRepository.php index ac9e1a78cf..bf61cc4435 100644 --- a/application/Espo/ORM/Repository/RDBRepository.php +++ b/application/Espo/ORM/Repository/RDBRepository.php @@ -278,7 +278,7 @@ class RDBRepository implements Repository } /** - * Find records by a SQL query. + * Find records by an SQL query. * * @return SthCollection */ diff --git a/application/Espo/ORM/SqlExecutor.php b/application/Espo/ORM/SqlExecutor.php index 1df3e4e562..ed0806f970 100644 --- a/application/Espo/ORM/SqlExecutor.php +++ b/application/Espo/ORM/SqlExecutor.php @@ -32,7 +32,6 @@ namespace Espo\ORM; use PDO; use PDOStatement; use PDOException; - use Exception; use RuntimeException; @@ -41,14 +40,10 @@ use RuntimeException; */ class SqlExecutor { - private $pdo; - private const MAX_ATTEMPT_COUNT = 4; - public function __construct(PDO $pdo) - { - $this->pdo = $pdo; - } + public function __construct(private PDO $pdo) + {} /** * Execute a query. @@ -73,9 +68,7 @@ class SqlExecutor $counter--; if ($counter === 0 || !$this->isExceptionIsDeadlock($e)) { - /** - * @var PDOException $e - */ + /** @var PDOException $e */ throw $e; } diff --git a/application/Espo/ORM/SthCollection.php b/application/Espo/ORM/SthCollection.php index e362227f35..6b191fab5b 100644 --- a/application/Espo/ORM/SthCollection.php +++ b/application/Espo/ORM/SthCollection.php @@ -34,6 +34,7 @@ use Espo\ORM\QueryComposer\QueryComposer as QueryComposer; use IteratorAggregate; use Countable; +use stdClass; use Traversable; use PDO; use PDOStatement; @@ -52,20 +53,13 @@ use RuntimeException; */ class SthCollection implements Collection, IteratorAggregate, Countable { - private EntityManager $entityManager; - private string $entityType; - private ?SelectQuery $query = null; - private ?PDOStatement $sth = null; - private ?string $sql = null; - private function __construct(EntityManager $entityManager) - { - $this->entityManager = $entityManager; - } + private function __construct(private EntityManager $entityManager) + {} private function getQueryComposer(): QueryComposer { @@ -134,7 +128,7 @@ class SthCollection implements Collection, IteratorAggregate, Countable } /** - * @return array + * @return array */ private function fetchRow() { @@ -145,6 +139,9 @@ class SthCollection implements Collection, IteratorAggregate, Countable return $this->sth->fetch(PDO::FETCH_ASSOC); } + /** + * Get count. Can be slow. Use EntityCollection if you need count. + */ public function count(): int { $this->executeQueryIfNotExecuted(); @@ -158,16 +155,15 @@ class SthCollection implements Collection, IteratorAggregate, Countable return $rowCount; } - return count($this->getValueMapList()); + return iterator_count($this); } protected function prepareEntity(Entity $entity): void - { - } + {} /** * @deprecated As of v6.0. Use `getValueMapList`. - * @return array>|\stdClass[] + * @return array>|stdClass[] */ public function toArray(bool $itemsAsObjects = false): array { @@ -190,15 +186,18 @@ class SthCollection implements Collection, IteratorAggregate, Countable return $arr; } + /** + * {@inheritDoc} + */ public function getValueMapList(): array { - /** @var \stdClass[] */ + /** @var stdClass[] */ return $this->toArray(true); } /** - * Whether Is fetched from DB. SthCollection is always fetched. + * Whether is fetched from DB. SthCollection is always fetched. */ public function isFetched(): bool { @@ -214,6 +213,8 @@ class SthCollection implements Collection, IteratorAggregate, Countable } /** + * Create from a query. + * * @return self */ public static function fromQuery(SelectQuery $query, EntityManager $entityManager): self @@ -234,6 +235,8 @@ class SthCollection implements Collection, IteratorAggregate, Countable } /** + * Create from an SQL. + * * @return self */ public static function fromSql(string $entityType, string $sql, EntityManager $entityManager): self diff --git a/application/Espo/ORM/TransactionManager.php b/application/Espo/ORM/TransactionManager.php index 847f9dbfa7..b66a8ba898 100644 --- a/application/Espo/ORM/TransactionManager.php +++ b/application/Espo/ORM/TransactionManager.php @@ -41,15 +41,8 @@ class TransactionManager { private int $level = 0; - private PDO $pdo; - - private QueryComposer $queryComposer; - - public function __construct(PDO $pdo, QueryComposer $queryComposer) - { - $this->pdo = $pdo; - $this->queryComposer = $queryComposer; - } + public function __construct(private PDO $pdo, private QueryComposer $queryComposer) + {} /** * Whether a transaction is started.