Viewing file: QueryCacheProfile.php (5.11 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Doctrine\DBAL\Cache;
use Doctrine\Common\Cache\Cache; use Doctrine\Common\Cache\Psr6\CacheAdapter; use Doctrine\Common\Cache\Psr6\DoctrineProvider; use Doctrine\DBAL\Types\Type; use Doctrine\Deprecations\Deprecation; use Psr\Cache\CacheItemPoolInterface; use TypeError;
use function get_class; use function hash; use function serialize; use function sha1; use function sprintf;
/** * Query Cache Profile handles the data relevant for query caching. * * It is a value object, setter methods return NEW instances. */ class QueryCacheProfile { private ?CacheItemPoolInterface $resultCache = null;
/** @var int */ private $lifetime;
/** @var string|null */ private $cacheKey;
/** * @param int $lifetime * @param string|null $cacheKey * @param CacheItemPoolInterface|Cache|null $resultCache */ public function __construct($lifetime = 0, $cacheKey = null, ?object $resultCache = null) { $this->lifetime = $lifetime; $this->cacheKey = $cacheKey; if ($resultCache instanceof CacheItemPoolInterface) { $this->resultCache = $resultCache; } elseif ($resultCache instanceof Cache) { Deprecation::trigger( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4620', 'Passing an instance of %s to %s as $resultCache is deprecated. Pass an instance of %s instead.', Cache::class, __METHOD__, CacheItemPoolInterface::class, );
$this->resultCache = CacheAdapter::wrap($resultCache); } elseif ($resultCache !== null) { throw new TypeError(sprintf( '$resultCache: Expected either null or an instance of %s or %s, got %s.', CacheItemPoolInterface::class, Cache::class, get_class($resultCache), )); } }
public function getResultCache(): ?CacheItemPoolInterface { return $this->resultCache; }
/** * @deprecated Use {@see getResultCache()} instead. * * @return Cache|null */ public function getResultCacheDriver() { Deprecation::trigger( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4620', '%s is deprecated, call getResultCache() instead.', __METHOD__, );
return $this->resultCache !== null ? DoctrineProvider::wrap($this->resultCache) : null; }
/** @return int */ public function getLifetime() { return $this->lifetime; }
/** * @return string * * @throws CacheException */ public function getCacheKey() { if ($this->cacheKey === null) { throw CacheException::noCacheKey(); }
return $this->cacheKey; }
/** * Generates the real cache key from query, params, types and connection parameters. * * @param string $sql * @param list<mixed>|array<string, mixed> $params * @param array<int, Type|int|string|null>|array<string, Type|int|string|null> $types * @param array<string, mixed> $connectionParams * * @return array{string, string} */ public function generateCacheKeys($sql, $params, $types, array $connectionParams = []) { if (isset($connectionParams['password'])) { unset($connectionParams['password']); }
$realCacheKey = 'query=' . $sql . '¶ms=' . serialize($params) . '&types=' . serialize($types) . '&connectionParams=' . hash('sha256', serialize($connectionParams));
// should the key be automatically generated using the inputs or is the cache key set? $cacheKey = $this->cacheKey ?? sha1($realCacheKey);
return [$cacheKey, $realCacheKey]; }
public function setResultCache(CacheItemPoolInterface $cache): QueryCacheProfile { return new QueryCacheProfile($this->lifetime, $this->cacheKey, $cache); }
/** * @deprecated Use {@see setResultCache()} instead. * * @return QueryCacheProfile */ public function setResultCacheDriver(Cache $cache) { Deprecation::trigger( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4620', '%s is deprecated, call setResultCache() instead.', __METHOD__, );
return new QueryCacheProfile($this->lifetime, $this->cacheKey, CacheAdapter::wrap($cache)); }
/** * @param string|null $cacheKey * * @return QueryCacheProfile */ public function setCacheKey($cacheKey) { return new QueryCacheProfile($this->lifetime, $cacheKey, $this->resultCache); }
/** * @param int $lifetime * * @return QueryCacheProfile */ public function setLifetime($lifetime) { return new QueryCacheProfile($lifetime, $this->cacheKey, $this->resultCache); } }
|