Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 31 additions & 60 deletions src/EntityPreloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@
use function is_a;
use function method_exists;

/**
* @template E of object
*/
class EntityPreloader
{

Expand All @@ -36,12 +33,10 @@ public function __construct(
}

/**
* @param list<S> $sourceEntities
* @param list<object> $sourceEntities
* @param positive-int|null $batchSize
* @param non-negative-int|null $maxFetchJoinSameFieldCount
* @return list<E>
*
* @template S of E
* @return list<object>
*/
public function preload(
array $sourceEntities,
Expand All @@ -59,7 +54,7 @@ public function preload(
$sourceClassMetadata = $this->entityManager->getClassMetadata($sourceEntitiesCommonAncestor);
$associationMapping = $sourceClassMetadata->getAssociationMapping($sourcePropertyName);

/** @var ClassMetadata<E> $targetClassMetadata */
/** @var ClassMetadata<object> $targetClassMetadata */
$targetClassMetadata = $this->entityManager->getClassMetadata($associationMapping['targetEntity']);

if (isset($associationMapping['indexBy'])) {
Expand All @@ -79,10 +74,8 @@ public function preload(
}

/**
* @param list<S> $entities
* @return class-string<S>|null
*
* @template S of E
* @param list<object> $entities
* @return class-string<object>|null
*/
private function getCommonAncestor(array $entities): ?string
{
Expand All @@ -97,7 +90,6 @@ private function getCommonAncestor(array $entities): ?string
}

while (!is_a($entityClassName, $commonAncestor, true)) {
/** @var class-string<S>|false $commonAncestor */
$commonAncestor = get_parent_class($commonAncestor);

if ($commonAncestor === false) {
Expand All @@ -110,13 +102,11 @@ private function getCommonAncestor(array $entities): ?string
}

/**
* @param ClassMetadata<T> $classMetadata
* @param list<T> $entities
* @param ClassMetadata<object> $classMetadata
* @param list<object> $entities
* @param positive-int $batchSize
* @param non-negative-int $maxFetchJoinSameFieldCount
* @return list<T>
*
* @template T of E
* @return list<object>
*/
private function loadProxies(
ClassMetadata $classMetadata,
Expand Down Expand Up @@ -153,15 +143,12 @@ private function loadProxies(
}

/**
* @param list<S> $sourceEntities
* @param ClassMetadata<S> $sourceClassMetadata
* @param ClassMetadata<T> $targetClassMetadata
* @param list<object> $sourceEntities
* @param ClassMetadata<object> $sourceClassMetadata
* @param ClassMetadata<object> $targetClassMetadata
* @param positive-int|null $batchSize
* @param non-negative-int $maxFetchJoinSameFieldCount
* @return list<T>
*
* @template S of E
* @template T of E
* @return list<object>
*/
private function preloadToMany(
array $sourceEntities,
Expand Down Expand Up @@ -242,15 +229,12 @@ private function preloadToMany(

/**
* @param array<string, mixed>|ArrayAccess<string, mixed> $associationMapping
* @param ClassMetadata<S> $sourceClassMetadata
* @param ClassMetadata<T> $targetClassMetadata
* @param ClassMetadata<object> $sourceClassMetadata
* @param ClassMetadata<object> $targetClassMetadata
* @param list<mixed> $uninitializedSourceEntityIdsChunk
* @param array<string, PersistentCollection<int, T>> $uninitializedCollections
* @param array<string, PersistentCollection<int, object>> $uninitializedCollections
* @param non-negative-int $maxFetchJoinSameFieldCount
* @return array<string, T>
*
* @template S of E
* @template T of E
* @return array<string, object>
*/
private function preloadOneToManyInner(
array|ArrayAccess $associationMapping,
Expand Down Expand Up @@ -295,15 +279,12 @@ private function preloadOneToManyInner(

/**
* @param array<string, mixed>|ArrayAccess<string, mixed> $associationMapping
* @param ClassMetadata<S> $sourceClassMetadata
* @param ClassMetadata<T> $targetClassMetadata
* @param ClassMetadata<object> $sourceClassMetadata
* @param ClassMetadata<object> $targetClassMetadata
* @param list<mixed> $uninitializedSourceEntityIdsChunk
* @param array<string, PersistentCollection<int, T>> $uninitializedCollections
* @param array<string, PersistentCollection<int, object>> $uninitializedCollections
* @param non-negative-int $maxFetchJoinSameFieldCount
* @return array<string, T>
*
* @template S of E
* @template T of E
* @return array<string, object>
*/
private function preloadManyToManyInner(
array|ArrayAccess $associationMapping,
Expand Down Expand Up @@ -346,7 +327,7 @@ private function preloadManyToManyInner(
$targetEntityId = $manyToManyRow['targetId'];
$targetEntityKey = (string) $targetEntityId;

/** @var T|false $targetEntity */
/** @var object|false $targetEntity */
$targetEntity = $this->entityManager->getUnitOfWork()->tryGetById($targetEntityId, $targetClassMetadata->getName());

if ($targetEntity !== false && !$this->entityManager->isUninitializedObject($targetEntity)) {
Expand All @@ -372,15 +353,12 @@ private function preloadManyToManyInner(
}

/**
* @param list<S> $sourceEntities
* @param ClassMetadata<S> $sourceClassMetadata
* @param ClassMetadata<T> $targetClassMetadata
* @param list<object> $sourceEntities
* @param ClassMetadata<object> $sourceClassMetadata
* @param ClassMetadata<object> $targetClassMetadata
* @param positive-int|null $batchSize
* @param non-negative-int $maxFetchJoinSameFieldCount
* @return list<T>
*
* @template S of E
* @template T of E
* @return list<object>
*/
private function preloadToOne(
array $sourceEntities,
Expand Down Expand Up @@ -414,15 +392,12 @@ private function preloadToOne(
}

/**
* @param ClassMetadata<T> $targetClassMetadata
* @param ClassMetadata<object> $targetClassMetadata
* @param list<mixed> $fieldValues
* @param ClassMetadata<R> $referencedClassMetadata
* @param ClassMetadata<object> $referencedClassMetadata
* @param non-negative-int $maxFetchJoinSameFieldCount
* @param array<string, 'asc'|'desc'> $orderBy
* @return list<T>
*
* @template T of E
* @template R of E
* @return list<object>
*/
private function loadEntitiesBy(
ClassMetadata $targetClassMetadata,
Expand Down Expand Up @@ -491,9 +466,7 @@ private function convertFieldValuesToDatabaseValues(
}

/**
* @param ClassMetadata<C> $classMetadata
*
* @template C of E
* @param ClassMetadata<object> $classMetadata
*/
private function getIdentifierFieldType(ClassMetadata $classMetadata): Type
{
Expand All @@ -508,10 +481,8 @@ private function getIdentifierFieldType(ClassMetadata $classMetadata): Type
}

/**
* @param ClassMetadata<S> $sourceClassMetadata
* @param ClassMetadata<object> $sourceClassMetadata
* @param array<string, array<string, int>> $alreadyPreloadedJoins
*
* @template S of E
*/
private function addFetchJoinsToPreventFetchDuringHydration(
string $alias,
Expand All @@ -530,7 +501,7 @@ private function addFetchJoinsToPreventFetchDuringHydration(
continue;
}

/** @var ClassMetadata<E> $targetClassMetadata */
/** @var ClassMetadata<object> $targetClassMetadata */
$targetClassMetadata = $this->entityManager->getClassMetadata($associationMapping['targetEntity']);

$isToOne = ($associationMapping['type'] & ClassMetadata::TO_ONE) !== 0;
Expand Down
9 changes: 0 additions & 9 deletions tests/Lib/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,6 @@ abstract class TestCase extends PhpUnitTestCase

private ?EntityManagerInterface $entityManager = null;

/**
* @var EntityPreloader<object>|null
*/
private ?EntityPreloader $entityPreloader = null;

/**
Expand Down Expand Up @@ -221,9 +218,6 @@ protected function getEntityManager(): EntityManagerInterface
return $this->entityManager;
}

/**
* @return EntityPreloader<object>
*/
protected function getEntityPreloader(): EntityPreloader
{
return $this->entityPreloader ??= $this->createEntityPreloader($this->getEntityManager());
Expand Down Expand Up @@ -271,9 +265,6 @@ private function createEntityManager(
return $entityManager;
}

/**
* @return EntityPreloader<object>
*/
private function createEntityPreloader(EntityManagerInterface $entityManager): EntityPreloader
{
return new EntityPreloader($entityManager);
Expand Down