Merge branch '5.1'

* 5.1:
  fix merge
  stop using the deprecated schema synchronizer API
This commit is contained in:
Christian Flothmann 2020-08-21 14:11:42 +02:00
commit 1f77f32d78
3 changed files with 29 additions and 22 deletions

View File

@ -18,7 +18,6 @@ use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\SchemaConfig; use Doctrine\DBAL\Schema\SchemaConfig;
use Doctrine\DBAL\Schema\Synchronizer\SchemaSynchronizer;
use Doctrine\DBAL\Statement; use Doctrine\DBAL\Statement;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage; use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage;
@ -30,7 +29,6 @@ class ConnectionTest extends TestCase
{ {
$queryBuilder = $this->getQueryBuilderMock(); $queryBuilder = $this->getQueryBuilderMock();
$driverConnection = $this->getDBALConnectionMock(); $driverConnection = $this->getDBALConnectionMock();
$schemaSynchronizer = $this->getSchemaSynchronizerMock();
$stmt = $this->getResultMock([ $stmt = $this->getResultMock([
'id' => 1, 'id' => 1,
'body' => '{"message":"Hi"}', 'body' => '{"message":"Hi"}',
@ -53,7 +51,7 @@ class ConnectionTest extends TestCase
->method('executeQuery') ->method('executeQuery')
->willReturn($stmt); ->willReturn($stmt);
$connection = new Connection([], $driverConnection, $schemaSynchronizer); $connection = new Connection([], $driverConnection);
$doctrineEnvelope = $connection->get(); $doctrineEnvelope = $connection->get();
$this->assertEquals(1, $doctrineEnvelope['id']); $this->assertEquals(1, $doctrineEnvelope['id']);
$this->assertEquals('{"message":"Hi"}', $doctrineEnvelope['body']); $this->assertEquals('{"message":"Hi"}', $doctrineEnvelope['body']);
@ -64,7 +62,6 @@ class ConnectionTest extends TestCase
{ {
$queryBuilder = $this->getQueryBuilderMock(); $queryBuilder = $this->getQueryBuilderMock();
$driverConnection = $this->getDBALConnectionMock(); $driverConnection = $this->getDBALConnectionMock();
$schemaSynchronizer = $this->getSchemaSynchronizerMock();
$stmt = $this->getResultMock(false); $stmt = $this->getResultMock(false);
$queryBuilder $queryBuilder
@ -82,7 +79,7 @@ class ConnectionTest extends TestCase
->method('executeQuery') ->method('executeQuery')
->willReturn($stmt); ->willReturn($stmt);
$connection = new Connection([], $driverConnection, $schemaSynchronizer); $connection = new Connection([], $driverConnection);
$doctrineEnvelope = $connection->get(); $doctrineEnvelope = $connection->get();
$this->assertNull($doctrineEnvelope); $this->assertNull($doctrineEnvelope);
} }
@ -155,11 +152,6 @@ class ConnectionTest extends TestCase
return $stmt; return $stmt;
} }
private function getSchemaSynchronizerMock(): SchemaSynchronizer
{
return $this->createMock(SchemaSynchronizer::class);
}
/** /**
* @dataProvider buildConfigurationProvider * @dataProvider buildConfigurationProvider
*/ */
@ -264,7 +256,6 @@ class ConnectionTest extends TestCase
{ {
$queryBuilder = $this->getQueryBuilderMock(); $queryBuilder = $this->getQueryBuilderMock();
$driverConnection = $this->getDBALConnectionMock(); $driverConnection = $this->getDBALConnectionMock();
$schemaSynchronizer = $this->getSchemaSynchronizerMock();
$id = 1; $id = 1;
$stmt = $this->getResultMock([ $stmt = $this->getResultMock([
'id' => $id, 'id' => $id,
@ -288,7 +279,7 @@ class ConnectionTest extends TestCase
->method('executeQuery') ->method('executeQuery')
->willReturn($stmt); ->willReturn($stmt);
$connection = new Connection([], $driverConnection, $schemaSynchronizer); $connection = new Connection([], $driverConnection);
$doctrineEnvelope = $connection->find($id); $doctrineEnvelope = $connection->find($id);
$this->assertEquals(1, $doctrineEnvelope['id']); $this->assertEquals(1, $doctrineEnvelope['id']);
$this->assertEquals('{"message":"Hi"}', $doctrineEnvelope['body']); $this->assertEquals('{"message":"Hi"}', $doctrineEnvelope['body']);
@ -299,7 +290,6 @@ class ConnectionTest extends TestCase
{ {
$queryBuilder = $this->getQueryBuilderMock(); $queryBuilder = $this->getQueryBuilderMock();
$driverConnection = $this->getDBALConnectionMock(); $driverConnection = $this->getDBALConnectionMock();
$schemaSynchronizer = $this->getSchemaSynchronizerMock();
$message1 = [ $message1 = [
'id' => 1, 'id' => 1,
'body' => '{"message":"Hi"}', 'body' => '{"message":"Hi"}',
@ -335,7 +325,7 @@ class ConnectionTest extends TestCase
->method('executeQuery') ->method('executeQuery')
->willReturn($stmt); ->willReturn($stmt);
$connection = new Connection([], $driverConnection, $schemaSynchronizer); $connection = new Connection([], $driverConnection);
$doctrineEnvelopes = $connection->findAll(); $doctrineEnvelopes = $connection->findAll();
$this->assertEquals(1, $doctrineEnvelopes[0]['id']); $this->assertEquals(1, $doctrineEnvelopes[0]['id']);

View File

@ -11,7 +11,6 @@
namespace Symfony\Component\Messenger\Bridge\Doctrine\Tests\Transport; namespace Symfony\Component\Messenger\Bridge\Doctrine\Tests\Transport;
use Doctrine\DBAL\Schema\Synchronizer\SchemaSynchronizer;
use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Table;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\PostgreSqlConnection; use Symfony\Component\Messenger\Bridge\Doctrine\Transport\PostgreSqlConnection;
@ -26,10 +25,9 @@ class PostgreSqlConnectionTest extends TestCase
$this->expectException(\BadMethodCallException::class); $this->expectException(\BadMethodCallException::class);
$this->expectExceptionMessage('Cannot serialize '.PostgreSqlConnection::class); $this->expectExceptionMessage('Cannot serialize '.PostgreSqlConnection::class);
$schemaSynchronizer = $this->createMock(SchemaSynchronizer::class);
$driverConnection = $this->createMock(\Doctrine\DBAL\Connection::class); $driverConnection = $this->createMock(\Doctrine\DBAL\Connection::class);
$connection = new PostgreSqlConnection([], $driverConnection, $schemaSynchronizer); $connection = new PostgreSqlConnection([], $driverConnection);
serialize($connection); serialize($connection);
} }
@ -38,10 +36,9 @@ class PostgreSqlConnectionTest extends TestCase
$this->expectException(\BadMethodCallException::class); $this->expectException(\BadMethodCallException::class);
$this->expectExceptionMessage('Cannot unserialize '.PostgreSqlConnection::class); $this->expectExceptionMessage('Cannot unserialize '.PostgreSqlConnection::class);
$schemaSynchronizer = $this->createMock(SchemaSynchronizer::class);
$driverConnection = $this->createMock(\Doctrine\DBAL\Connection::class); $driverConnection = $this->createMock(\Doctrine\DBAL\Connection::class);
$connection = new PostgreSqlConnection([], $driverConnection, $schemaSynchronizer); $connection = new PostgreSqlConnection([], $driverConnection);
$connection->__wakeup(); $connection->__wakeup();
} }

View File

@ -16,9 +16,9 @@ use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Driver\Result; use Doctrine\DBAL\Driver\Result;
use Doctrine\DBAL\Exception\TableNotFoundException; use Doctrine\DBAL\Exception\TableNotFoundException;
use Doctrine\DBAL\Query\QueryBuilder; use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\DBAL\Schema\Comparator;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\Synchronizer\SchemaSynchronizer; use Doctrine\DBAL\Schema\Synchronizer\SchemaSynchronizer;
use Doctrine\DBAL\Schema\Synchronizer\SingleDatabaseSynchronizer;
use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Symfony\Component\Messenger\Exception\InvalidArgumentException; use Symfony\Component\Messenger\Exception\InvalidArgumentException;
@ -63,7 +63,7 @@ class Connection implements ResetInterface
{ {
$this->configuration = array_replace_recursive(static::DEFAULT_OPTIONS, $configuration); $this->configuration = array_replace_recursive(static::DEFAULT_OPTIONS, $configuration);
$this->driverConnection = $driverConnection; $this->driverConnection = $driverConnection;
$this->schemaSynchronizer = $schemaSynchronizer ?? new SingleDatabaseSynchronizer($this->driverConnection); $this->schemaSynchronizer = $schemaSynchronizer;
$this->autoSetup = $this->configuration['auto_setup']; $this->autoSetup = $this->configuration['auto_setup'];
} }
@ -226,7 +226,7 @@ class Connection implements ResetInterface
$configuration = $this->driverConnection->getConfiguration(); $configuration = $this->driverConnection->getConfiguration();
$assetFilter = $configuration->getSchemaAssetsFilter(); $assetFilter = $configuration->getSchemaAssetsFilter();
$configuration->setSchemaAssetsFilter(null); $configuration->setSchemaAssetsFilter(null);
$this->schemaSynchronizer->updateSchema($this->getSchema(), true); $this->updateSchema();
$configuration->setSchemaAssetsFilter($assetFilter); $configuration->setSchemaAssetsFilter($assetFilter);
$this->autoSetup = false; $this->autoSetup = false;
} }
@ -406,5 +406,25 @@ class Connection implements ResetInterface
return $doctrineEnvelope; return $doctrineEnvelope;
} }
private function updateSchema(): void
{
if (null !== $this->schemaSynchronizer) {
$this->schemaSynchronizer->updateSchema($this->getSchema(), true);
return;
}
$comparator = new Comparator();
$schemaDiff = $comparator->compare($this->driverConnection->getSchemaManager()->createSchema(), $this->getSchema());
foreach ($schemaDiff->toSaveSql($this->driverConnection->getDatabasePlatform()) as $sql) {
if (method_exists($this->driverConnection, 'executeStatement')) {
$this->driverConnection->executeStatement($sql);
} else {
$this->driverConnection->exec($sql);
}
}
}
} }
class_alias(Connection::class, \Symfony\Component\Messenger\Transport\Doctrine\Connection::class); class_alias(Connection::class, \Symfony\Component\Messenger\Transport\Doctrine\Connection::class);