X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fdoctrine%2Fcache%2Flib%2FDoctrine%2FCommon%2FCache%2FChainCache.php;h=32534aa4e3ed76043bcf986f87afc7d85fc7bd28;hp=96c9b5479fbec039c1c883f6dceac00cf4a4c269;hb=refs%2Fheads%2Ft2;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php index 96c9b5479..32534aa4e 100644 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php +++ b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php @@ -29,16 +29,18 @@ class ChainCache extends CacheProvider /** * @var CacheProvider[] */ - private $cacheProviders = array(); + private $cacheProviders = []; /** * Constructor * * @param CacheProvider[] $cacheProviders */ - public function __construct($cacheProviders = array()) + public function __construct($cacheProviders = []) { - $this->cacheProviders = $cacheProviders; + $this->cacheProviders = $cacheProviders instanceof \Traversable + ? iterator_to_array($cacheProviders, false) + : array_values($cacheProviders); } /** @@ -74,6 +76,34 @@ class ChainCache extends CacheProvider return false; } + /** + * {@inheritdoc} + */ + protected function doFetchMultiple(array $keys) + { + /* @var $traversedProviders CacheProvider[] */ + $traversedProviders = []; + $keysCount = count($keys); + $fetchedValues = []; + + foreach ($this->cacheProviders as $key => $cacheProvider) { + $fetchedValues = $cacheProvider->doFetchMultiple($keys); + + // We populate all the previous cache layers (that are assumed to be faster) + if (count($fetchedValues) === $keysCount) { + foreach ($traversedProviders as $previousCacheProvider) { + $previousCacheProvider->doSaveMultiple($fetchedValues); + } + + return $fetchedValues; + } + + $traversedProviders[] = $cacheProvider; + } + + return $fetchedValues; + } + /** * {@inheritDoc} */ @@ -102,6 +132,20 @@ class ChainCache extends CacheProvider return $stored; } + /** + * {@inheritdoc} + */ + protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) + { + $stored = true; + + foreach ($this->cacheProviders as $cacheProvider) { + $stored = $cacheProvider->doSaveMultiple($keysAndValues, $lifetime) && $stored; + } + + return $stored; + } + /** * {@inheritDoc} */ @@ -116,6 +160,20 @@ class ChainCache extends CacheProvider return $deleted; } + /** + * {@inheritdoc} + */ + protected function doDeleteMultiple(array $keys) + { + $deleted = true; + + foreach ($this->cacheProviders as $cacheProvider) { + $deleted = $cacheProvider->doDeleteMultiple($keys) && $deleted; + } + + return $deleted; + } + /** * {@inheritDoc} */ @@ -136,7 +194,7 @@ class ChainCache extends CacheProvider protected function doGetStats() { // We return all the stats from all adapters - $stats = array(); + $stats = []; foreach ($this->cacheProviders as $cacheProvider) { $stats[] = $cacheProvider->doGetStats();