Skip to content

Commit

Permalink
minor #36992 Handle fetch mode deprecation of DBAL 2.11 (derrabus)
Browse files Browse the repository at this point in the history
This PR was merged into the 4.4 branch.

Discussion
----------

Handle fetch mode deprecation of DBAL 2.11

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | N/A
| License       | MIT
| Doc PR        | N/A

Continuation of #36987 on the 4.4 branch.

Commits
-------

1385213 Handle fetch mode deprecation of DBAL 2.11.
  • Loading branch information
nicolas-grekas committed May 28, 2020
2 parents dfe8c81 + 1385213 commit 5fe0f94
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 20 deletions.
Expand Up @@ -13,7 +13,7 @@
*/
class DoctrineTokenProviderTest extends TestCase
{
public static function setUpBeforeClass()
public static function setUpBeforeClass(): void
{
if (\PHP_VERSION_ID >= 80000) {
self::markTestSkipped('Doctrine DBAL 2.x is incompatible with PHP 8.');
Expand Down
2 changes: 1 addition & 1 deletion src/Symfony/Component/Cache/Traits/PdoTrait.php
Expand Up @@ -232,7 +232,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());
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Symfony/Component/Lock/Store/PdoStore.php
Expand Up @@ -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());
}

/**
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
Expand Up @@ -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');
Expand Down
17 changes: 10 additions & 7 deletions src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php
Expand Up @@ -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();
Expand Down Expand Up @@ -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
Expand All @@ -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);
Expand All @@ -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);
}
Expand Down

0 comments on commit 5fe0f94

Please sign in to comment.