Skip to content

Commit ac71ef4

Browse files
committed
Cleanup
1 parent 2937631 commit ac71ef4

6 files changed

+73
-129
lines changed

ConnectionFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ public function createConnection(array $params, Configuration $config = null, Ev
4545
$this->initializeTypes();
4646
}
4747

48-
$connectionOverrideOptions = $params['connection_override_options'] ?? [];
48+
$overriddenOptions = $params['connection_override_options'] ?? [];
4949
unset($params['connection_override_options']);
5050

51-
if (! isset($params['pdo']) && (! isset($params['charset']) || (! empty($connectionOverrideOptions) && isset($params['url'])))) {
51+
if (! isset($params['pdo']) && (! isset($params['charset']) || $overriddenOptions)) {
5252
$wrapperClass = null;
5353

5454
if (isset($params['wrapperClass'])) {
@@ -65,7 +65,7 @@ public function createConnection(array $params, Configuration $config = null, Ev
6565
}
6666

6767
$connection = DriverManager::getConnection($params, $config, $eventManager);
68-
$params = array_merge($connection->getParams(), $connectionOverrideOptions);
68+
$params = array_merge($connection->getParams(), $overriddenOptions);
6969
$driver = $connection->getDriver();
7070

7171
if ($driver instanceof AbstractMySQLDriver) {

DependencyInjection/Configuration.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,10 @@ private function configureDbalDriverNode(ArrayNodeDefinition $node): void
319319
->end()
320320
->beforeNormalization()
321321
->ifTrue(static function ($v) {
322-
return ! ($v['override_url'] ?? false) && isset($v['url']);
322+
return empty($v['override_url']) && isset($v['url']);
323323
})
324324
->then(static function ($v) {
325-
trigger_error('Not setting doctrine.dbal.override_url to true is deprecated. True is the only value that will be supported in doctrine-bundle 3.0.', E_USER_DEPRECATED);
325+
@trigger_error('Not setting doctrine.dbal.override_url to true is deprecated. True is the only value that will be supported in doctrine-bundle 3.0.', E_USER_DEPRECATED);
326326

327327
return $v;
328328
})

DependencyInjection/DoctrineExtension.php

+8-33
Original file line numberDiff line numberDiff line change
@@ -262,35 +262,26 @@ protected function loadDbalConnection($name, array $connection, ContainerBuilder
262262

263263
protected function getConnectionOptions($connection)
264264
{
265-
$options = $connection;
266-
267-
$options['connection_override_options'] = [];
265+
$options = ['connection_override_options' => []] + $connection;
268266

269267
$connectionDefaults = [
270-
'dbname' => null,
271268
'host' => 'localhost',
272269
'port' => null,
273270
'user' => 'root',
274271
'password' => null,
275272
];
276273

277-
if (($options['override_url'] ?? false)) {
278-
$options['connection_override_options'] = array_intersect_key($options, $connectionDefaults);
274+
if ($options['override_url']) {
275+
$options['connection_override_options'] = array_intersect_key($options, ['dbname' => null] + $connectionDefaults);
279276
}
280277

281-
unset($options['override_url'], $connectionDefaults['dbname']);
282-
283-
foreach ($connectionDefaults as $defaultKey => $defaultValue) {
284-
if (! array_key_exists($defaultKey, $options)) {
285-
$options[$defaultKey] = $defaultValue;
286-
}
278+
unset($options['override_url']);
287279

288-
foreach (['shards', 'replicas', 'slaves'] as $connectionKey) {
289-
if (! array_key_exists($connectionKey, $options)) {
290-
continue;
291-
}
280+
$options += $connectionDefaults;
292281

293-
$options[$connectionKey] = $this->setDefaultOnNestedConnectionOption($options[$connectionKey], $defaultKey, $defaultValue);
282+
foreach (['shards', 'replicas', 'slaves'] as $connectionKey) {
283+
foreach (array_keys($options[$connectionKey]) as $name) {
284+
$options[$connectionKey][$name] += $connectionDefaults;
294285
}
295286
}
296287

@@ -1022,22 +1013,6 @@ private function createArrayAdapterCachePool(ContainerBuilder $container, string
10221013
return $id;
10231014
}
10241015

1025-
/**
1026-
* @return array<string|int, array<string|int, mixed>>
1027-
*/
1028-
private function setDefaultOnNestedConnectionOption(array $connectionOptions, string $paramName, $defaultValue): array
1029-
{
1030-
foreach ($connectionOptions as $connectionKey => $connection) {
1031-
if (array_key_exists($paramName, $connection)) {
1032-
continue;
1033-
}
1034-
1035-
$connectionOptions[$connectionKey][$paramName] = $defaultValue;
1036-
}
1037-
1038-
return $connectionOptions;
1039-
}
1040-
10411016
private function registerMetadataPhpArrayCaching(string $entityManagerName, ContainerBuilder $container): void
10421017
{
10431018
$metadataCacheAlias = $this->getObjectManagerElementName($entityManagerName . '_metadata_cache');

Tests/ConnectionFactoryTest.php

+4-11
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,8 @@ public function testDefaultCharsetMySql(): void
7272
$this->assertSame('utf8mb4', $connection->getParams()['charset']);
7373
}
7474

75-
public function testUrlOverride(): void
75+
public function testConnectionOverrideOptions(): void
7676
{
77-
$factory = new ConnectionFactory([]);
78-
$url = 'mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8';
79-
8077
$params = [
8178
'dbname' => 'main_test',
8279
'host' => 'db_test',
@@ -85,16 +82,12 @@ public function testUrlOverride(): void
8582
'password' => 'wordpass',
8683
];
8784

88-
$connection = $factory->createConnection([
89-
'url' => $url,
85+
$connection = (new ConnectionFactory([]))->createConnection([
86+
'url' => 'mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8',
9087
'connection_override_options' => $params,
9188
]);
9289

93-
$result = $connection->getParams();
94-
95-
foreach ($params as $paramKey => $expectedValue) {
96-
self::assertSame($expectedValue, $result[$paramKey]);
97-
}
90+
$this->assertEquals($params, array_intersect_key($connection->getParams(), $params));
9891
}
9992
}
10093

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php

+7-23
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,7 @@ public function testDbalLoadFromXmlMultipleConnections(): void
102102
public function testDbalLoadFromXmlSingleConnections(): void
103103
{
104104
$container = $this->loadContainer('dbal_service_single_connection');
105-
106-
// doctrine.dbal.mysql_connection
107-
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
105+
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
108106

109107
$this->assertEquals('mysql_s3cr3t', $config['password']);
110108
$this->assertEquals('mysql_user', $config['user']);
@@ -116,9 +114,7 @@ public function testDbalLoadFromXmlSingleConnections(): void
116114
public function testDbalLoadUrlOverride(): void
117115
{
118116
$container = $this->loadContainer('dbal_allow_url_override');
119-
120-
// doctrine.dbal.mysql_connection
121-
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
117+
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
122118

123119
$this->assertSame('mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8', $config['url']);
124120

@@ -130,20 +126,15 @@ public function testDbalLoadUrlOverride(): void
130126
'port' => 4321,
131127
];
132128

133-
foreach ($expectedOverrides as $param => $value) {
134-
$this->assertSame($value, $config[$param]);
135-
}
136-
129+
$this->assertEquals($expectedOverrides, array_intersect_key($config, $expectedOverrides));
137130
$this->assertSame($expectedOverrides, $config['connection_override_options']);
138131
$this->assertFalse(isset($config['override_url']));
139132
}
140133

141134
public function testDbalLoadPartialUrlOverrideSetsDefaults(): void
142135
{
143136
$container = $this->loadContainer('dbal_allow_partial_url_override');
144-
145-
// doctrine.dbal.mysql_connection
146-
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
137+
$config = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
147138

148139
$expectedDefaults = [
149140
'host' => 'localhost',
@@ -152,10 +143,7 @@ public function testDbalLoadPartialUrlOverrideSetsDefaults(): void
152143
'port' => null,
153144
];
154145

155-
foreach ($expectedDefaults as $paramName => $defaultConfigValue) {
156-
$this->assertSame($defaultConfigValue, $config[$paramName]);
157-
}
158-
146+
$this->assertEquals($expectedDefaults, array_intersect_key($config, $expectedDefaults));
159147
$this->assertSame('mysql://root:password@database:3306/main?serverVersion=mariadb-10.5.8', $config['url']);
160148
$this->assertCount(1, $config['connection_override_options']);
161149
$this->assertSame('main_test', $config['connection_override_options']['dbname']);
@@ -165,9 +153,7 @@ public function testDbalLoadPartialUrlOverrideSetsDefaults(): void
165153
public function testDbalLoadSingleMasterSlaveConnection(): void
166154
{
167155
$container = $this->loadContainer('dbal_service_single_master_slave_connection');
168-
169-
// doctrine.dbal.mysql_connection
170-
$param = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
156+
$param = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
171157

172158
$this->assertEquals(
173159
class_exists(PrimaryReadReplicaConnection::class) ?
@@ -206,9 +192,7 @@ class_exists(PrimaryReadReplicaConnection::class) ?
206192
public function testDbalLoadPoolShardingConnection(): void
207193
{
208194
$container = $this->loadContainer('dbal_service_pool_sharding_connection');
209-
210-
// doctrine.dbal.mysql_connection
211-
$param = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
195+
$param = $container->getDefinition('doctrine.dbal.default_connection')->getArgument(0);
212196

213197
$this->assertEquals('Doctrine\\DBAL\\Sharding\\PoolingShardConnection', $param['wrapperClass']);
214198
$this->assertEquals(new Reference('foo.shard_choser'), $param['shardChoser']);

Tests/UrlOverrideTest.php

+49-57
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Doctrine\Bundle\DoctrineBundle\Tests;
44

55
use Doctrine\Bundle\DoctrineBundle\Tests\DependencyInjection\Fixtures\DbalTestKernel;
6-
use Generator;
76

87
class UrlOverrideTest extends TestCase
98
{
@@ -12,70 +11,63 @@ class UrlOverrideTest extends TestCase
1211
*/
1312
public function testConnectionConfiguration(array $config, array $expectedParams): void
1413
{
15-
$kernel = new UrlOverrideTestKernel($config);
14+
$kernel = new DbalTestKernel($config);
1615
$kernel->boot();
1716

18-
$doctrine = $kernel->getContainer()->get('doctrine');
19-
$params = $doctrine->getConnection()->getParams();
20-
21-
foreach ($expectedParams as $paramName => $value) {
22-
self::assertSame($value, $params[$paramName]);
23-
}
17+
$this->assertEquals(
18+
$expectedParams,
19+
array_intersect_key(
20+
$kernel->getContainer()->get('doctrine.dbal.default_connection')->getParams(),
21+
$expectedParams
22+
)
23+
);
2424
}
2525

26-
public function connectionDataProvider(): Generator
26+
public function connectionDataProvider(): array
2727
{
28-
yield [
29-
[
30-
'override_url' => true,
31-
'url' => 'mysql://database/main?serverVersion=mariadb-10.5.8',
32-
'password' => 'wordPass',
33-
'host' => '127.0.0.1',
34-
],
35-
[
36-
'user' => 'root',
37-
'password' => 'wordPass',
38-
'host' => '127.0.0.1',
39-
'port' => null,
40-
'dbname' => 'main',
28+
return [
29+
'override some' => [
30+
[
31+
'override_url' => true,
32+
'url' => 'mysql://database/main',
33+
'password' => 'wordPass',
34+
'host' => '127.0.0.1',
35+
],
36+
[
37+
'user' => 'root',
38+
'password' => 'wordPass',
39+
'host' => '127.0.0.1',
40+
'port' => null,
41+
'dbname' => 'main',
42+
],
4143
],
42-
];
43-
44-
yield [
45-
[
46-
'override_url' => true,
47-
'url' => 'mysql://someone@database/main?serverVersion=mariadb-10.5.8',
48-
'user' => 'someone',
44+
'override with same value as in URL' => [
45+
[
46+
'override_url' => true,
47+
'url' => 'mysql://someone@database/main',
48+
'user' => 'someone',
49+
],
50+
[
51+
'user' => 'someone',
52+
'password' => null,
53+
'host' => 'database',
54+
'port' => null,
55+
'dbname' => 'main',
56+
],
4957
],
50-
[
51-
'user' => 'someone',
52-
'password' => null,
53-
'host' => 'database',
54-
'port' => null,
55-
'dbname' => 'main',
58+
'nothing to override' => [
59+
[
60+
'override_url' => true,
61+
'url' => 'mysql://database/main',
62+
],
63+
[
64+
'user' => 'root',
65+
'password' => null,
66+
'host' => 'database',
67+
'port' => null,
68+
'dbname' => 'main',
69+
],
5670
],
5771
];
58-
59-
yield [
60-
[
61-
'override_url' => true,
62-
'url' => 'mysql://database/main?serverVersion=mariadb-10.5.8',
63-
],
64-
[
65-
'user' => 'root',
66-
'password' => null,
67-
'host' => 'database',
68-
'port' => null,
69-
'dbname' => 'main',
70-
],
71-
];
72-
}
73-
}
74-
75-
class UrlOverrideTestKernel extends DbalTestKernel
76-
{
77-
public function __construct(array $dbalConfig)
78-
{
79-
parent::__construct($dbalConfig);
8072
}
8173
}

0 commit comments

Comments
 (0)