From bf6655a534a6775d30cafa67bd801276bda1d98d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 13 Aug 2024 23:45:21 +0200 Subject: =?UTF-8?q?VERSION=200.2=20doctrine=20ORM=20et=20entit=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doctrine/orm/src/Cache/DefaultCacheFactory.php | 189 +++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php (limited to 'vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php') diff --git a/vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php b/vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php new file mode 100644 index 0000000..84ea490 --- /dev/null +++ b/vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php @@ -0,0 +1,189 @@ +fileLockRegionDirectory = $fileLockRegionDirectory; + } + + public function getFileLockRegionDirectory(): string|null + { + return $this->fileLockRegionDirectory; + } + + public function setRegion(Region $region): void + { + $this->regions[$region->getName()] = $region; + } + + public function setTimestampRegion(TimestampRegion $region): void + { + $this->timestampRegion = $region; + } + + public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPersister $persister, ClassMetadata $metadata): CachedEntityPersister + { + assert($metadata->cache !== null); + $region = $this->getRegion($metadata->cache); + $usage = $metadata->cache['usage']; + + if ($usage === ClassMetadata::CACHE_USAGE_READ_ONLY) { + return new ReadOnlyCachedEntityPersister($persister, $region, $em, $metadata); + } + + if ($usage === ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE) { + return new NonStrictReadWriteCachedEntityPersister($persister, $region, $em, $metadata); + } + + if ($usage === ClassMetadata::CACHE_USAGE_READ_WRITE) { + if (! $region instanceof ConcurrentRegion) { + throw new InvalidArgumentException(sprintf('Unable to use access strategy type of [%s] without a ConcurrentRegion', $usage)); + } + + return new ReadWriteCachedEntityPersister($persister, $region, $em, $metadata); + } + + throw new InvalidArgumentException(sprintf('Unrecognized access strategy type [%s]', $usage)); + } + + public function buildCachedCollectionPersister( + EntityManagerInterface $em, + CollectionPersister $persister, + AssociationMapping $mapping, + ): CachedCollectionPersister { + assert(isset($mapping->cache)); + $usage = $mapping->cache['usage']; + $region = $this->getRegion($mapping->cache); + + if ($usage === ClassMetadata::CACHE_USAGE_READ_ONLY) { + return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $mapping); + } + + if ($usage === ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE) { + return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); + } + + if ($usage === ClassMetadata::CACHE_USAGE_READ_WRITE) { + if (! $region instanceof ConcurrentRegion) { + throw new InvalidArgumentException(sprintf('Unable to use access strategy type of [%s] without a ConcurrentRegion', $usage)); + } + + return new ReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); + } + + throw new InvalidArgumentException(sprintf('Unrecognized access strategy type [%s]', $usage)); + } + + public function buildQueryCache(EntityManagerInterface $em, string|null $regionName = null): QueryCache + { + return new DefaultQueryCache( + $em, + $this->getRegion( + [ + 'region' => $regionName ?: Cache::DEFAULT_QUERY_REGION_NAME, + 'usage' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE, + ], + ), + ); + } + + public function buildCollectionHydrator(EntityManagerInterface $em, AssociationMapping $mapping): CollectionHydrator + { + return new DefaultCollectionHydrator($em); + } + + public function buildEntityHydrator(EntityManagerInterface $em, ClassMetadata $metadata): EntityHydrator + { + return new DefaultEntityHydrator($em); + } + + /** + * {@inheritDoc} + */ + public function getRegion(array $cache): Region + { + if (isset($this->regions[$cache['region']])) { + return $this->regions[$cache['region']]; + } + + $name = $cache['region']; + $lifetime = $this->regionsConfig->getLifetime($cache['region']); + $region = new DefaultRegion($name, $this->cacheItemPool, $lifetime); + + if ($cache['usage'] === ClassMetadata::CACHE_USAGE_READ_WRITE) { + if ( + $this->fileLockRegionDirectory === '' || + $this->fileLockRegionDirectory === null + ) { + throw new LogicException( + 'If you want to use a "READ_WRITE" cache an implementation of "Doctrine\ORM\Cache\ConcurrentRegion" is required, ' . + 'The default implementation provided by doctrine is "Doctrine\ORM\Cache\Region\FileLockRegion" if you want to use it please provide a valid directory, DefaultCacheFactory#setFileLockRegionDirectory(). ', + ); + } + + $directory = $this->fileLockRegionDirectory . DIRECTORY_SEPARATOR . $cache['region']; + $region = new FileLockRegion($region, $directory, (string) $this->regionsConfig->getLockLifetime($cache['region'])); + } + + return $this->regions[$cache['region']] = $region; + } + + public function getTimestampRegion(): TimestampRegion + { + if ($this->timestampRegion === null) { + $name = Cache::DEFAULT_TIMESTAMP_REGION_NAME; + $lifetime = $this->regionsConfig->getLifetime($name); + + $this->timestampRegion = new UpdateTimestampCache($name, $this->cacheItemPool, $lifetime); + } + + return $this->timestampRegion; + } + + public function createCache(EntityManagerInterface $entityManager): Cache + { + return new DefaultCache($entityManager); + } +} -- cgit v1.2.3