From 503283fa63a4e82751a677fc2d75843ea0164d21 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Tue, 26 Oct 2021 15:32:38 +0200 Subject: [PATCH] Provide array cache implementation doctrine/cache 2.0 no longer provides implementations of caches. It provides only interfaces. We need only PHP array cache so I chose to implement this simple cache instead of introducing new cache library. [MAILPOET-3892] --- lib/Doctrine/ArrayCache.php | 97 +++++++++++++++++++ lib/Doctrine/ConfigurationFactory.php | 1 - .../Doctrine/ConfigurationFactoryTest.php | 3 +- .../EventListeners/ValidationTest.php | 2 +- .../Doctrine/Types/JsonTypesTest.php | 2 +- 5 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 lib/Doctrine/ArrayCache.php diff --git a/lib/Doctrine/ArrayCache.php b/lib/Doctrine/ArrayCache.php new file mode 100644 index 0000000000..5284018d10 --- /dev/null +++ b/lib/Doctrine/ArrayCache.php @@ -0,0 +1,97 @@ +upTime = time(); + } + + /** + * {@inheritdoc} + */ + protected function doFetch($id) { + if (! $this->doContains($id)) { + $this->missesCount += 1; + return false; + } + $this->hitsCount += 1; + return $this->data[$id][0]; + } + + /** + * {@inheritdoc} + */ + protected function doContains($id) { + if (! isset($this->data[$id])) { + return false; + } + $expiration = $this->data[$id][1]; + if ($expiration && $expiration < \time()) { + $this->doDelete($id); + return false; + } + return true; + } + + /** + * {@inheritdoc} + */ + protected function doSave($id, $data, $lifeTime = 0) { + $this->data[$id] = [$data, $lifeTime ? \time() + $lifeTime : false]; + return true; + } + + /** + * {@inheritdoc} + */ + protected function doDelete($id) { + unset($this->data[$id]); + return true; + } + + /** + * {@inheritdoc} + */ + protected function doFlush() { + $this->data = []; + return true; + } + + /** + * {@inheritdoc} + */ + protected function doGetStats() { + return [ + CacheProvider::STATS_HITS => $this->hitsCount, + CacheProvider::STATS_MISSES => $this->missesCount, + CacheProvider::STATS_UPTIME => $this->upTime, + CacheProvider::STATS_MEMORY_USAGE => null, + CacheProvider::STATS_MEMORY_AVAILABLE => null, + ]; + } +} diff --git a/lib/Doctrine/ConfigurationFactory.php b/lib/Doctrine/ConfigurationFactory.php index a8b8d03746..18f6e8d16a 100644 --- a/lib/Doctrine/ConfigurationFactory.php +++ b/lib/Doctrine/ConfigurationFactory.php @@ -3,7 +3,6 @@ namespace MailPoet\Doctrine; use MailPoet\Doctrine\Annotations\AnnotationReaderProvider; -use MailPoetVendor\Doctrine\Common\Cache\ArrayCache; use MailPoetVendor\Doctrine\Common\Proxy\AbstractProxyFactory; use MailPoetVendor\Doctrine\ORM\Configuration; use MailPoetVendor\Doctrine\ORM\Mapping\Driver\AnnotationDriver; diff --git a/tests/integration/Doctrine/ConfigurationFactoryTest.php b/tests/integration/Doctrine/ConfigurationFactoryTest.php index a01c8e1ab1..7babec6297 100644 --- a/tests/integration/Doctrine/ConfigurationFactoryTest.php +++ b/tests/integration/Doctrine/ConfigurationFactoryTest.php @@ -3,11 +3,10 @@ namespace MailPoet\Test\Config; use MailPoet\Doctrine\Annotations\AnnotationReaderProvider; +use MailPoet\Doctrine\ArrayCache; use MailPoet\Doctrine\ConfigurationFactory; -use MailPoet\Doctrine\MetadataCache; use MailPoet\Doctrine\PSRMetadataCache; use MailPoet\Doctrine\TablePrefixMetadataFactory; -use MailPoetVendor\Doctrine\Common\Cache\ArrayCache; use MailPoetVendor\Doctrine\Common\Proxy\AbstractProxyFactory; use MailPoetVendor\Doctrine\ORM\Configuration; use MailPoetVendor\Doctrine\ORM\Mapping\Driver\AnnotationDriver; diff --git a/tests/integration/Doctrine/EventListeners/ValidationTest.php b/tests/integration/Doctrine/EventListeners/ValidationTest.php index 856970b8d9..15e04942d8 100644 --- a/tests/integration/Doctrine/EventListeners/ValidationTest.php +++ b/tests/integration/Doctrine/EventListeners/ValidationTest.php @@ -3,6 +3,7 @@ namespace MailPoet\Test\Doctrine\EventListeners; use MailPoet\Doctrine\Annotations\AnnotationReaderProvider; +use MailPoet\Doctrine\ArrayCache; use MailPoet\Doctrine\ConfigurationFactory; use MailPoet\Doctrine\EntityManagerFactory; use MailPoet\Doctrine\EventListeners\EmojiEncodingListener; @@ -13,7 +14,6 @@ use MailPoet\Doctrine\Validator\ValidationException; use MailPoet\Doctrine\Validator\ValidatorFactory; use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; -use MailPoetVendor\Doctrine\Common\Cache\ArrayCache; require_once __DIR__ . '/ValidatedEntity.php'; diff --git a/tests/integration/Doctrine/Types/JsonTypesTest.php b/tests/integration/Doctrine/Types/JsonTypesTest.php index d472640504..dc42aaf365 100644 --- a/tests/integration/Doctrine/Types/JsonTypesTest.php +++ b/tests/integration/Doctrine/Types/JsonTypesTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Doctrine\EventListeners; use Exception; use MailPoet\Doctrine\Annotations\AnnotationReaderProvider; +use MailPoet\Doctrine\ArrayCache; use MailPoet\Doctrine\ConfigurationFactory; use MailPoet\Doctrine\EntityManagerFactory; use MailPoet\Doctrine\EventListeners\EmojiEncodingListener; @@ -14,7 +15,6 @@ use MailPoet\Doctrine\Validator\ValidatorFactory; use MailPoet\Test\Doctrine\Types\JsonEntity; use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; -use MailPoetVendor\Doctrine\Common\Cache\ArrayCache; use RuntimeException; require_once __DIR__ . '/JsonEntity.php';