diff --git a/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php b/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php index a85d159df837b..c4c3b0b7ffcad 100644 --- a/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php +++ b/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php @@ -12,7 +12,6 @@ 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; @@ -30,20 +29,12 @@ public function postGenerateSchema(GenerateSchemaEventArgs $event): void { $connection = $event->getEntityManager()->getConnection(); - $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 + foreach ($this->stores as $store) { + if (!$store instanceof DoctrineDbalStore) { + continue; } - $storesIterator->next(); + $store->configureSchema($event->getSchema(), $this->getIsSameDatabaseChecker($connection)); } } } diff --git a/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php b/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php index 6f23d680feb9f..d8d06a5fe0524 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php @@ -17,7 +17,6 @@ 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 @@ -40,20 +39,4 @@ 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); - } } diff --git a/src/Symfony/Component/Lock/Store/NullStore.php b/src/Symfony/Component/Lock/Store/NullStore.php new file mode 100644 index 0000000000000..f80ddce7a97d5 --- /dev/null +++ b/src/Symfony/Component/Lock/Store/NullStore.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Lock\Store; + +use Symfony\Component\Lock\BlockingSharedLockStoreInterface; +use Symfony\Component\Lock\Key; + +/** + * NullStore is a PersistingStoreInterface implementation which discards all operations. + * + * @author Pavel BartoĊˆ + */ +class NullStore implements BlockingSharedLockStoreInterface +{ + public function save(Key $key): void + { + } + + public function saveRead(Key $key): void + { + } + + public function waitAndSaveRead(Key $key): void + { + } + + public function delete(Key $key): void + { + } + + public function exists(Key $key): bool + { + return false; + } + + public function putOffExpiration(Key $key, float $ttl): void + { + } +} diff --git a/src/Symfony/Component/Lock/Store/StoreFactory.php b/src/Symfony/Component/Lock/Store/StoreFactory.php index 7e962ed55da18..68022da08b092 100644 --- a/src/Symfony/Component/Lock/Store/StoreFactory.php +++ b/src/Symfony/Component/Lock/Store/StoreFactory.php @@ -106,6 +106,9 @@ public static function createStore(#[\SensitiveParameter] object|string $connect case 'in-memory' === $connection: return new InMemoryStore(); + + case 'null' === $connection: + return new NullStore(); } throw new InvalidArgumentException(sprintf('Unsupported Connection: "%s".', $connection));