From 0acd4030272355c909e29430022e1d6399367997 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Fri, 23 Jun 2023 16:03:28 +0200 Subject: [PATCH] [DoctrineBridge] Ignore invalid stores in `LockStoreSchemaListener` raised by `StoreFactory` --- .../SchemaListener/LockStoreSchemaListener.php | 17 +++++++++++++---- .../LockStoreSchemaListenerTest.php | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php b/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php index 0902b376d8968..5ab591d318225 100644 --- a/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php +++ b/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php @@ -12,6 +12,7 @@ namespace Symfony\Bridge\Doctrine\SchemaListener; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; +use Symfony\Component\Lock\Exception\InvalidArgumentException; use Symfony\Component\Lock\PersistingStoreInterface; use Symfony\Component\Lock\Store\DoctrineDbalStore; @@ -28,12 +29,20 @@ public function postGenerateSchema(GenerateSchemaEventArgs $event): void { $connection = $event->getEntityManager()->getConnection(); - foreach ($this->stores as $store) { - if (!$store instanceof DoctrineDbalStore) { - continue; + $storesIterator = new \ArrayIterator($this->stores); + while ($storesIterator->valid()) { + try { + $store = $storesIterator->current(); + if (!$store instanceof DoctrineDbalStore) { + continue; + } + + $store->configureSchema($event->getSchema(), $this->getIsSameDatabaseChecker($connection)); + } catch (InvalidArgumentException) { + // no-op } - $store->configureSchema($event->getSchema(), $this->getIsSameDatabaseChecker($connection)); + $storesIterator->next(); } } } diff --git a/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php b/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php index d8d06a5fe0524..6f23d680feb9f 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php @@ -17,6 +17,7 @@ use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Doctrine\SchemaListener\LockStoreSchemaListener; +use Symfony\Component\Lock\Exception\InvalidArgumentException; use Symfony\Component\Lock\Store\DoctrineDbalStore; class LockStoreSchemaListenerTest extends TestCase @@ -39,4 +40,20 @@ public function testPostGenerateSchemaLockPdo() $subscriber = new LockStoreSchemaListener([$lockStore]); $subscriber->postGenerateSchema($event); } + + public function testPostGenerateSchemaWithInvalidLockStore() + { + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects($this->once()) + ->method('getConnection') + ->willReturn($this->createMock(Connection::class)); + $event = new GenerateSchemaEventArgs($entityManager, new Schema()); + + $subscriber = new LockStoreSchemaListener((static function (): \Generator { + yield $this->createMock(DoctrineDbalStore::class); + + throw new InvalidArgumentException('Unsupported Connection'); + })()); + $subscriber->postGenerateSchema($event); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy