From 1385213a9adf6bc6723b67c8bbe3a4e02e36de5a Mon Sep 17 00:00:00 2001 From: "Alexander M. Turek" Date: Thu, 28 May 2020 01:00:48 +0200 Subject: [PATCH] Handle fetch mode deprecation of DBAL 2.11. --- .../Component/Cache/Traits/PdoTrait.php | 2 +- src/Symfony/Component/Lock/Store/PdoStore.php | 2 +- .../Transport/Doctrine/ConnectionTest.php | 21 +++++++++++++------ .../Doctrine/DoctrineIntegrationTest.php | 7 +++---- .../Transport/Doctrine/Connection.php | 17 ++++++++------- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/Symfony/Component/Cache/Traits/PdoTrait.php b/src/Symfony/Component/Cache/Traits/PdoTrait.php index 943d34e5ebd4..cb5bb0511f25 100644 --- a/src/Symfony/Component/Cache/Traits/PdoTrait.php +++ b/src/Symfony/Component/Cache/Traits/PdoTrait.php @@ -226,7 +226,7 @@ protected function doHave($id) $stmt->bindValue(':time', time(), \PDO::PARAM_INT); $stmt->execute(); - return (bool) $stmt->fetchColumn(); + return (bool) (method_exists($stmt, 'fetchOne') ? $stmt->fetchOne() : $stmt->fetchColumn()); } /** diff --git a/src/Symfony/Component/Lock/Store/PdoStore.php b/src/Symfony/Component/Lock/Store/PdoStore.php index 5e2f01caa408..7af7f3870fad 100644 --- a/src/Symfony/Component/Lock/Store/PdoStore.php +++ b/src/Symfony/Component/Lock/Store/PdoStore.php @@ -203,7 +203,7 @@ public function exists(Key $key) $stmt->bindValue(':token', $this->getUniqueToken($key)); $stmt->execute(); - return (bool) $stmt->fetchColumn(); + return (bool) (method_exists($stmt, 'fetchOne') ? $stmt->fetchOne() : $stmt->fetchColumn()); } /** diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php index bd7fff769bcc..d34e45d2ce51 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php @@ -12,7 +12,8 @@ namespace Symfony\Component\Messenger\Tests\Transport\Doctrine; use Doctrine\DBAL\DBALException; -use Doctrine\DBAL\Driver\Statement; +use Doctrine\DBAL\Driver\ResultStatement; +use Doctrine\DBAL\ForwardCompatibility\Driver\ResultStatement as ForwardCompatibleResultStatement; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Query\QueryBuilder; use Doctrine\DBAL\Schema\AbstractSchemaManager; @@ -142,11 +143,16 @@ private function getQueryBuilderMock() return $queryBuilder; } - private function getStatementMock($expectedResult): Statement + private function getStatementMock($expectedResult): ResultStatement { - $stmt = $this->createMock(Statement::class); + $mockedInterface = interface_exists(ForwardCompatibleResultStatement::class) + ? ForwardCompatibleResultStatement::class + : ResultStatement::class; + + $stmt = $this->createMock($mockedInterface); + $stmt->expects($this->once()) - ->method('fetch') + ->method(method_exists($mockedInterface, 'fetchAssociative') ? 'fetchAssociative' : 'fetch') ->willReturn($expectedResult); return $stmt; @@ -306,9 +312,12 @@ public function testFindAll() 'headers' => json_encode(['type' => DummyMessage::class]), ]; - $stmt = $this->createMock(Statement::class); + $mockedInterface = interface_exists(ForwardCompatibleResultStatement::class) + ? ForwardCompatibleResultStatement::class + : ResultStatement::class; + $stmt = $this->createMock($mockedInterface); $stmt->expects($this->once()) - ->method('fetchAll') + ->method(method_exists($mockedInterface, 'fetchAllAssociative') ? 'fetchAllAssociative' : 'fetchAll') ->willReturn([$message1, $message2]); $driverConnection diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php index f417283aa5bb..45ca64b77106 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php @@ -64,15 +64,14 @@ public function testSendWithDelay() { $this->connection->send('{"message": "Hi i am delayed"}', ['type' => DummyMessage::class], 600000); - $available_at = $this->driverConnection->createQueryBuilder() + $stmt = $this->driverConnection->createQueryBuilder() ->select('m.available_at') ->from('messenger_messages', 'm') ->where('m.body = :body') ->setParameter(':body', '{"message": "Hi i am delayed"}') - ->execute() - ->fetchColumn(); + ->execute(); - $available_at = new \DateTime($available_at); + $available_at = new \DateTime(method_exists($stmt, 'fetchOne') ? $stmt->fetchOne() : $stmt->fetchColumn()); $now = new \DateTime(); $now->modify('+60 seconds'); diff --git a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php index 6004bf360e3b..4f5b43c4ac8d 100644 --- a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php @@ -159,11 +159,12 @@ public function get(): ?array ->setMaxResults(1); // use SELECT ... FOR UPDATE to lock table - $doctrineEnvelope = $this->executeQuery( + $stmt = $this->executeQuery( $query->getSQL().' '.$this->driverConnection->getDatabasePlatform()->getWriteLockSQL(), $query->getParameters(), $query->getParameterTypes() - )->fetch(); + ); + $doctrineEnvelope = method_exists($stmt, 'fetchAssociative') ? $stmt->fetchAssociative() : $stmt->fetch(); if (false === $doctrineEnvelope) { $this->driverConnection->commit(); @@ -249,7 +250,9 @@ public function getMessageCount(): int ->select('COUNT(m.id) as message_count') ->setMaxResults(1); - return $this->executeQuery($queryBuilder->getSQL(), $queryBuilder->getParameters(), $queryBuilder->getParameterTypes())->fetchColumn(); + $stmt = $this->executeQuery($queryBuilder->getSQL(), $queryBuilder->getParameters(), $queryBuilder->getParameterTypes()); + + return method_exists($stmt, 'fetchOne') ? $stmt->fetchOne() : $stmt->fetchColumn(); } public function findAll(int $limit = null): array @@ -259,7 +262,8 @@ public function findAll(int $limit = null): array $queryBuilder->setMaxResults($limit); } - $data = $this->executeQuery($queryBuilder->getSQL(), $queryBuilder->getParameters(), $queryBuilder->getParameterTypes())->fetchAll(); + $stmt = $this->executeQuery($queryBuilder->getSQL(), $queryBuilder->getParameters(), $queryBuilder->getParameterTypes()); + $data = method_exists($stmt, 'fetchAllAssociative') ? $stmt->fetchAllAssociative() : $stmt->fetchAll(); return array_map(function ($doctrineEnvelope) { return $this->decodeEnvelopeHeaders($doctrineEnvelope); @@ -271,9 +275,8 @@ public function find($id): ?array $queryBuilder = $this->createQueryBuilder() ->where('m.id = ?'); - $data = $this->executeQuery($queryBuilder->getSQL(), [ - $id, - ])->fetch(); + $stmt = $this->executeQuery($queryBuilder->getSQL(), [$id]); + $data = method_exists($stmt, 'fetchAssociative') ? $stmt->fetchAssociative() : $stmt->fetch(); return false === $data ? null : $this->decodeEnvelopeHeaders($data); }