Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 583ab2a

Browse files
committed
Run high-deps tests with ORM 3 and DBAL 4
1 parent 7aaa92a commit 583ab2a

File tree

12 files changed

+130
-53
lines changed

12 files changed

+130
-53
lines changed

src/Symfony/Bridge/Doctrine/Test/TestRepositoryFactory.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,51 @@
1212
namespace Symfony\Bridge\Doctrine\Test;
1313

1414
use Doctrine\ORM\EntityManagerInterface;
15+
use Doctrine\ORM\EntityRepository;
1516
use Doctrine\ORM\Mapping\ClassMetadata;
1617
use Doctrine\ORM\Repository\RepositoryFactory;
1718
use Doctrine\Persistence\ObjectRepository;
1819

20+
if ((new \ReflectionMethod(RepositoryFactory::class, 'getRepository'))->hasReturnType()) {
21+
/** @internal */
22+
trait GetRepositoryTrait
23+
{
24+
public function getRepository(EntityManagerInterface $entityManager, string $entityName): EntityRepository
25+
{
26+
return $this->doGetRepository($entityManager, $entityName);
27+
}
28+
}
29+
} else {
30+
/** @internal */
31+
trait GetRepositoryTrait
32+
{
33+
/**
34+
* {@inheritdoc}
35+
*
36+
* @return ObjectRepository
37+
*/
38+
public function getRepository(EntityManagerInterface $entityManager, $entityName)
39+
{
40+
return $this->doGetRepository($entityManager, $entityName);
41+
}
42+
}
43+
}
44+
1945
/**
2046
* @author Andreas Braun <[email protected]>
2147
*
2248
* @deprecated since Symfony 5.3
2349
*/
2450
class TestRepositoryFactory implements RepositoryFactory
2551
{
52+
use GetRepositoryTrait;
53+
2654
/**
2755
* @var ObjectRepository[]
2856
*/
2957
private $repositoryList = [];
3058

31-
/**
32-
* {@inheritdoc}
33-
*
34-
* @return ObjectRepository
35-
*/
36-
public function getRepository(EntityManagerInterface $entityManager, $entityName)
59+
private function doGetRepository(EntityManagerInterface $entityManager, string $entityName): ObjectRepository
3760
{
3861
if (__CLASS__ === static::class) {
3962
trigger_deprecation('symfony/doctrine-bridge', '5.3', '"%s" is deprecated and will be removed in 6.0.', __CLASS__);

src/Symfony/Bridge/Doctrine/Tests/Form/DoctrineOrmTypeGuesserTest.php

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
use Doctrine\DBAL\Types\Types;
1515
use Doctrine\ORM\Mapping\ClassMetadata;
16+
use Doctrine\ORM\Mapping\JoinColumnMapping;
17+
use Doctrine\ORM\Mapping\ManyToOneAssociationMapping;
1618
use Doctrine\Persistence\ManagerRegistry;
1719
use Doctrine\Persistence\ObjectManager;
1820
use PHPUnit\Framework\TestCase;
@@ -69,33 +71,49 @@ public function testRequiredGuesserSimpleFieldNullable()
6971

7072
public function testRequiredGuesserOneToOneNullable()
7173
{
72-
$classMetadata = $this->createMock(ClassMetadata::class);
73-
$classMetadata->expects($this->once())->method('isAssociationWithSingleJoinColumn')->with('field')->willReturn(true);
74+
$classMetadata = new ClassMetadata('Acme\Entity\Foo');
7475

75-
$mapping = ['joinColumns' => [[]]];
76-
$classMetadata->expects($this->once())->method('getAssociationMapping')->with('field')->willReturn($mapping);
76+
if (class_exists(ManyToOneAssociationMapping::class)) {
77+
$associationMapping = new ManyToOneAssociationMapping('field', 'Acme\Entity\Foo', 'Acme\Entity\Bar');
78+
$associationMapping->joinColumns[] = new JoinColumnMapping('field', 'field');
79+
} else {
80+
$associationMapping = ['joinColumns' => [[]]];
81+
}
82+
$classMetadata->associationMappings['field'] = $associationMapping;
7783

7884
$this->assertEquals(new ValueGuess(false, Guess::HIGH_CONFIDENCE), $this->getGuesser($classMetadata)->guessRequired('TestEntity', 'field'));
7985
}
8086

8187
public function testRequiredGuesserOneToOneExplicitNullable()
8288
{
83-
$classMetadata = $this->createMock(ClassMetadata::class);
84-
$classMetadata->expects($this->once())->method('isAssociationWithSingleJoinColumn')->with('field')->willReturn(true);
85-
86-
$mapping = ['joinColumns' => [['nullable' => true]]];
87-
$classMetadata->expects($this->once())->method('getAssociationMapping')->with('field')->willReturn($mapping);
89+
$classMetadata = new ClassMetadata('Acme\Entity\Foo');
90+
91+
if (class_exists(ManyToOneAssociationMapping::class)) {
92+
$associationMapping = new ManyToOneAssociationMapping('field', 'Acme\Entity\Foo', 'Acme\Entity\Bar');
93+
$joinColumnMapping = new JoinColumnMapping('field', 'field');
94+
$joinColumnMapping->nullable = true;
95+
$associationMapping->joinColumns[] = $joinColumnMapping;
96+
} else {
97+
$associationMapping = ['joinColumns' => [['nullable' => true]]];
98+
}
99+
$classMetadata->associationMappings['field'] = $associationMapping;
88100

89101
$this->assertEquals(new ValueGuess(false, Guess::HIGH_CONFIDENCE), $this->getGuesser($classMetadata)->guessRequired('TestEntity', 'field'));
90102
}
91103

92104
public function testRequiredGuesserOneToOneNotNullable()
93105
{
94-
$classMetadata = $this->createMock(ClassMetadata::class);
95-
$classMetadata->expects($this->once())->method('isAssociationWithSingleJoinColumn')->with('field')->willReturn(true);
96-
97-
$mapping = ['joinColumns' => [['nullable' => false]]];
98-
$classMetadata->expects($this->once())->method('getAssociationMapping')->with('field')->willReturn($mapping);
106+
$classMetadata = new ClassMetadata('Acme\Entity\Foo');
107+
108+
if (class_exists(ManyToOneAssociationMapping::class)) {
109+
$associationMapping = new ManyToOneAssociationMapping('field', 'Acme\Entity\Foo', 'Acme\Entity\Bar');
110+
$joinColumnMapping = new JoinColumnMapping('field', 'field');
111+
$joinColumnMapping->nullable = false;
112+
$associationMapping->joinColumns[] = $joinColumnMapping;
113+
} else {
114+
$associationMapping = ['joinColumns' => [['nullable' => false]]];
115+
}
116+
$classMetadata->associationMappings['field'] = $associationMapping;
99117

100118
$this->assertEquals(new ValueGuess(true, Guess::HIGH_CONFIDENCE), $this->getGuesser($classMetadata)->guessRequired('TestEntity', 'field'));
101119
}

src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bridge\Doctrine\Tests\Security\User;
1313

1414
use Doctrine\ORM\EntityManager;
15+
use Doctrine\ORM\EntityRepository;
1516
use Doctrine\ORM\Tools\SchemaTool;
1617
use Doctrine\Persistence\ManagerRegistry;
1718
use Doctrine\Persistence\ObjectManager;
@@ -251,12 +252,12 @@ private function createSchema($em)
251252
}
252253
}
253254

254-
abstract class UserLoaderRepository implements ObjectRepository, UserLoaderInterface
255+
abstract class UserLoaderRepository extends EntityRepository implements UserLoaderInterface
255256
{
256257
abstract public function loadUserByIdentifier(string $identifier): ?UserInterface;
257258
}
258259

259-
abstract class PasswordUpgraderRepository implements ObjectRepository, PasswordUpgraderInterface
260+
abstract class PasswordUpgraderRepository extends EntityRepository implements PasswordUpgraderInterface
260261
{
261262
abstract public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void;
262263
}

src/Symfony/Bridge/Doctrine/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
"doctrine/annotations": "^1.10.4|^2",
4747
"doctrine/collections": "^1.0|^2.0",
4848
"doctrine/data-fixtures": "^1.1",
49-
"doctrine/dbal": "^2.13.1|^3.0",
50-
"doctrine/orm": "^2.7.4",
49+
"doctrine/dbal": "^2.13.1|^3|^4",
50+
"doctrine/orm": "^2.7.4|^3",
5151
"psr/log": "^1|^2|^3"
5252
},
5353
"conflict": {

src/Symfony/Component/Cache/Tests/Fixtures/DriverWrapper.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Doctrine\DBAL\Driver;
1616
use Doctrine\DBAL\Platforms\AbstractPlatform;
1717
use Doctrine\DBAL\Schema\AbstractSchemaManager;
18+
use Doctrine\DBAL\ServerVersionProvider;
1819

1920
class DriverWrapper implements Driver
2021
{
@@ -31,9 +32,9 @@ public function connect(array $params, $username = null, $password = null, array
3132
return $this->driver->connect($params, $username, $password, $driverOptions);
3233
}
3334

34-
public function getDatabasePlatform(): AbstractPlatform
35+
public function getDatabasePlatform(ServerVersionProvider $versionProvider = null): AbstractPlatform
3536
{
36-
return $this->driver->getDatabasePlatform();
37+
return $this->driver->getDatabasePlatform($versionProvider);
3738
}
3839

3940
public function getSchemaManager(Connection $conn, AbstractPlatform $platform): AbstractSchemaManager

src/Symfony/Component/Cache/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"require-dev": {
3535
"cache/integration-tests": "dev-master",
3636
"doctrine/cache": "^1.6|^2.0",
37-
"doctrine/dbal": "^2.13.1|^3.0",
37+
"doctrine/dbal": "^2.13.1|^3|^4",
3838
"predis/predis": "^1.1",
3939
"psr/simple-cache": "^1.0|^2.0",
4040
"symfony/config": "^4.4|^5.0|^6.0",

src/Symfony/Component/Lock/Tests/Store/DoctrineDbalStoreTest.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,22 @@ public function testCreatesTableInTransaction(string $platform)
150150
$store->save($key);
151151
}
152152

153-
public static function providePlatforms()
153+
public static function providePlatforms(): \Generator
154154
{
155155
yield [\Doctrine\DBAL\Platforms\PostgreSQLPlatform::class];
156-
yield [\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class];
156+
157+
// DBAL < 4
158+
if (class_exists(\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class)) {
159+
yield [\Doctrine\DBAL\Platforms\PostgreSQL94Platform::class];
160+
}
161+
157162
yield [\Doctrine\DBAL\Platforms\SqlitePlatform::class];
158163
yield [\Doctrine\DBAL\Platforms\SQLServerPlatform::class];
159-
yield [\Doctrine\DBAL\Platforms\SQLServer2012Platform::class];
164+
165+
// DBAL < 4
166+
if (class_exists(\Doctrine\DBAL\Platforms\SQLServer2012Platform::class)) {
167+
yield [\Doctrine\DBAL\Platforms\SQLServer2012Platform::class];
168+
}
160169
}
161170

162171
public function testTableCreationInTransactionNotSupported()

src/Symfony/Component/Lock/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"symfony/polyfill-php80": "^1.16"
2323
},
2424
"require-dev": {
25-
"doctrine/dbal": "^2.13|^3.0",
25+
"doctrine/dbal": "^2.13|^3|^4",
2626
"predis/predis": "~1.0"
2727
},
2828
"conflict": {

src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/ConnectionTest.php

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
use Doctrine\DBAL\Platforms\AbstractPlatform;
2020
use Doctrine\DBAL\Platforms\MariaDBPlatform;
2121
use Doctrine\DBAL\Platforms\MySQL57Platform;
22+
use Doctrine\DBAL\Platforms\MySQLPlatform;
2223
use Doctrine\DBAL\Platforms\OraclePlatform;
2324
use Doctrine\DBAL\Platforms\SQLServer2012Platform;
25+
use Doctrine\DBAL\Platforms\SQLServerPlatform;
2426
use Doctrine\DBAL\Query\QueryBuilder;
2527
use Doctrine\DBAL\Result;
2628
use Doctrine\DBAL\Schema\AbstractSchemaManager;
@@ -98,7 +100,7 @@ public function testItThrowsATransportExceptionIfItCannotAcknowledgeMessage()
98100
{
99101
$this->expectException(TransportException::class);
100102
$driverConnection = $this->getDBALConnectionMock();
101-
$driverConnection->method('delete')->willThrowException(new DBALException());
103+
$driverConnection->method('delete')->willThrowException($this->createStub(DBALException::class));
102104

103105
$connection = new Connection([], $driverConnection);
104106
$connection->ack('dummy_id');
@@ -108,7 +110,7 @@ public function testItThrowsATransportExceptionIfItCannotRejectMessage()
108110
{
109111
$this->expectException(TransportException::class);
110112
$driverConnection = $this->getDBALConnectionMock();
111-
$driverConnection->method('delete')->willThrowException(new DBALException());
113+
$driverConnection->method('delete')->willThrowException($this->createStub(DBALException::class));
112114

113115
$connection = new Connection([], $driverConnection);
114116
$connection->reject('dummy_id');
@@ -391,7 +393,7 @@ public function testGeneratedSql(AbstractPlatform $platform, string $expectedSql
391393
public static function providePlatformSql(): iterable
392394
{
393395
yield 'MySQL' => [
394-
new MySQL57Platform(),
396+
class_exists(MySQLPlatform::class) ? new MySQLPlatform() : new MySQL57Platform(),
395397
'SELECT m.* FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC LIMIT 1 FOR UPDATE',
396398
];
397399

@@ -403,14 +405,23 @@ public static function providePlatformSql(): iterable
403405
}
404406

405407
yield 'SQL Server' => [
406-
new SQLServer2012Platform(),
408+
class_exists(SQLServerPlatform::class) ? new SQLServerPlatform() : new SQLServer2012Platform(),
407409
'SELECT m.* FROM messenger_messages m WITH (UPDLOCK, ROWLOCK) WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY ',
408410
];
409411

410-
yield 'Oracle' => [
411-
new OraclePlatform(),
412-
'SELECT w.id AS "id", w.body AS "body", w.headers AS "headers", w.queue_name AS "queue_name", w.created_at AS "created_at", w.available_at AS "available_at", w.delivered_at AS "delivered_at" FROM messenger_messages w WHERE w.id IN (SELECT a.id FROM (SELECT m.id FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC) a WHERE ROWNUM <= 1) FOR UPDATE',
413-
];
412+
if (!class_exists(MySQL57Platform::class)) {
413+
// DBAL >= 4
414+
yield 'Oracle' => [
415+
new OraclePlatform(),
416+
'SELECT w.id AS "id", w.body AS "body", w.headers AS "headers", w.queue_name AS "queue_name", w.created_at AS "created_at", w.available_at AS "available_at", w.delivered_at AS "delivered_at" FROM messenger_messages w WHERE w.id IN (SELECT m.id FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC FETCH NEXT 1 ROWS ONLY) FOR UPDATE',
417+
];
418+
} else {
419+
// DBAL < 4
420+
yield 'Oracle' => [
421+
new OraclePlatform(),
422+
'SELECT w.id AS "id", w.body AS "body", w.headers AS "headers", w.queue_name AS "queue_name", w.created_at AS "created_at", w.available_at AS "available_at", w.delivered_at AS "delivered_at" FROM messenger_messages w WHERE w.id IN (SELECT a.id FROM (SELECT m.id FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY available_at ASC) a WHERE ROWNUM <= 1) FOR UPDATE',
423+
];
424+
}
414425
}
415426

416427
public function testConfigureSchema()
@@ -483,7 +494,7 @@ public function testFindAllSqlGenerated(AbstractPlatform $platform, string $expe
483494
public function provideFindAllSqlGeneratedByPlatform(): iterable
484495
{
485496
yield 'MySQL' => [
486-
new MySQL57Platform(),
497+
class_exists(MySQLPlatform::class) ? new MySQLPlatform() : new MySQL57Platform(),
487498
'SELECT m.* FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) LIMIT 50',
488499
];
489500

@@ -495,13 +506,22 @@ public function provideFindAllSqlGeneratedByPlatform(): iterable
495506
}
496507

497508
yield 'SQL Server' => [
498-
new SQLServer2012Platform(),
509+
class_exists(SQLServerPlatform::class) ? new SQLServerPlatform() : new SQLServer2012Platform(),
499510
'SELECT m.* FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) ORDER BY (SELECT 0) OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY',
500511
];
501512

502-
yield 'Oracle' => [
503-
new OraclePlatform(),
504-
'SELECT a.* FROM (SELECT m.id AS "id", m.body AS "body", m.headers AS "headers", m.queue_name AS "queue_name", m.created_at AS "created_at", m.available_at AS "available_at", m.delivered_at AS "delivered_at" FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?)) a WHERE ROWNUM <= 50',
505-
];
513+
if (!class_exists(MySQL57Platform::class)) {
514+
// DBAL >= 4
515+
yield 'Oracle' => [
516+
new OraclePlatform(),
517+
'SELECT m.id AS "id", m.body AS "body", m.headers AS "headers", m.queue_name AS "queue_name", m.created_at AS "created_at", m.available_at AS "available_at", m.delivered_at AS "delivered_at" FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?) FETCH NEXT 50 ROWS ONLY',
518+
];
519+
} else {
520+
// DBAL < 4
521+
yield 'Oracle' => [
522+
new OraclePlatform(),
523+
'SELECT a.* FROM (SELECT m.id AS "id", m.body AS "body", m.headers AS "headers", m.queue_name AS "queue_name", m.created_at AS "created_at", m.available_at AS "available_at", m.delivered_at AS "delivered_at" FROM messenger_messages m WHERE (m.delivered_at is null OR m.delivered_at < ?) AND (m.available_at <= ?) AND (m.queue_name = ?)) a WHERE ROWNUM <= 50',
524+
];
525+
}
506526
}
507527
}

src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineTransportFactoryTest.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ public function testCreateTransport()
4646
$schemaConfig = $this->createMock(SchemaConfig::class);
4747
$platform = $this->createMock(AbstractPlatform::class);
4848
$schemaManager->method('createSchemaConfig')->willReturn($schemaConfig);
49-
$driverConnection->method('getSchemaManager')->willReturn($schemaManager);
49+
$driverConnection->method(
50+
method_exists(\Doctrine\DBAL\Connection::class, 'createSchemaManager')
51+
? 'createSchemaManager'
52+
: 'getSchemaManager'
53+
)->willReturn($schemaManager);
5054
$driverConnection->method('getDatabasePlatform')->willReturn($platform);
5155
$registry = $this->createMock(ConnectionRegistry::class);
5256

@@ -70,7 +74,11 @@ public function testCreateTransportNotifyWithPostgreSQLPlatform()
7074
$schemaConfig = $this->createMock(SchemaConfig::class);
7175
$platform = $this->createMock(PostgreSQLPlatform::class);
7276
$schemaManager->method('createSchemaConfig')->willReturn($schemaConfig);
73-
$driverConnection->method('getSchemaManager')->willReturn($schemaManager);
77+
$driverConnection->method(
78+
method_exists(\Doctrine\DBAL\Connection::class, 'createSchemaManager')
79+
? 'createSchemaManager'
80+
: 'getSchemaManager'
81+
)->willReturn($schemaManager);
7482
$driverConnection->method('getDatabasePlatform')->willReturn($platform);
7583
$registry = $this->createMock(ConnectionRegistry::class);
7684

src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,8 @@ public function get(): ?array
177177

178178
// Append pessimistic write lock to FROM clause if db platform supports it
179179
$sql = $query->getSQL();
180-
if (($fromPart = $query->getQueryPart('from')) &&
181-
($table = $fromPart[0]['table'] ?? null) &&
182-
($alias = $fromPart[0]['alias'] ?? null)
183-
) {
184-
$fromClause = sprintf('%s %s', $table, $alias);
180+
if (preg_match('/FROM (.+) WHERE/', (string) $sql, $matches)) {
181+
$fromClause = $matches[1];
185182
$sql = str_replace(
186183
sprintf('FROM %s WHERE', $fromClause),
187184
sprintf('FROM %s WHERE', $this->driverConnection->getDatabasePlatform()->appendLockHint($fromClause, LockMode::PESSIMISTIC_WRITE)),

src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"symfony/service-contracts": "^1.1|^2|^3"
2222
},
2323
"require-dev": {
24-
"doctrine/dbal": "^2.13|^3.0",
24+
"doctrine/dbal": "^2.13|^3|^4",
2525
"doctrine/persistence": "^1.3|^2|^3",
2626
"symfony/property-access": "^4.4|^5.0|^6.0",
2727
"symfony/serializer": "^4.4|^5.0|^6.0"

0 commit comments

Comments
 (0)