Skip to content

Commit cbcca93

Browse files
committed
allow configuring schema manager factory
1 parent 7feeb2c commit cbcca93

File tree

10 files changed

+53
-9
lines changed

10 files changed

+53
-9
lines changed

Command/CreateDatabaseDoctrineCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
6565
// Need to get rid of _every_ occurrence of dbname from connection configuration and we have already extracted all relevant info from url
6666
unset($params['dbname'], $params['path'], $params['url']);
6767

68-
$tmpConnection = DriverManager::getConnection($params);
68+
$tmpConnection = DriverManager::getConnection($params, $connection->getConfiguration());
6969

7070
$schemaManager = method_exists($tmpConnection, 'createSchemaManager')
7171
? $tmpConnection->createSchemaManager()

Command/DropDatabaseDoctrineCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
8888
// Reopen connection without database name set
8989
// as some vendors do not allow dropping the database connected to.
9090
$connection->close();
91-
$connection = DriverManager::getConnection($params);
91+
$connection = DriverManager::getConnection($params, $connection->getConfiguration());
9292
$schemaManager = method_exists($connection, 'createSchemaManager')
9393
? $connection->createSchemaManager()
9494
: $connection->getSchemaManager();

DependencyInjection/Configuration.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ private function getDbalConnectionsNode(): ArrayNodeDefinition
195195
->useAttributeAsKey('name')
196196
->prototype('scalar')->end()
197197
->end()
198+
->scalarNode('schema_manager_factory')
199+
->defaultValue('doctrine.dbal.default_schema_manager_factory')
200+
->end()
198201
->end();
199202

200203
// dbal < 2.11

DependencyInjection/DoctrineExtension.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ protected function loadDbalConnection($name, array $connection, ContainerBuilder
241241
ManagerRegistryAwareConnectionProvider::class,
242242
new Definition(ManagerRegistryAwareConnectionProvider::class, [$container->getDefinition('doctrine')])
243243
);
244+
245+
$configuration->addMethodCall('setSchemaManagerFactory', [new Reference($connection['schema_manager_factory'])]);
244246
}
245247

246248
/**
@@ -264,6 +266,7 @@ protected function getConnectionOptions(array $connection): array
264266
}
265267

266268
unset($options['override_url']);
269+
unset($options['schema_manager_factory']);
267270

268271
$options += $connectionDefaults;
269272

Resources/config/dbal.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,7 @@
9797
<tag name="controller.service_arguments" />
9898
</service>
9999

100+
<service id="doctrine.dbal.default_schema_manager_factory" class="Doctrine\DBAL\Schema\DefaultSchemaManagerFactory" />
101+
100102
</services>
101103
</container>

Resources/config/schema/doctrine-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
<xsd:attribute name="profiling-collect-backtrace" type="xsd:string" default="false" />
3939
<xsd:attribute name="profiling-collect-schema-errors" type="xsd:string" default="true" />
4040
<xsd:attribute name="server-version" type="xsd:string" />
41+
<xsd:attribute name="schema-manager-factory" type="xsd:string" default="doctrine.dbal.default_schema_manager_factory" />
4142
<xsd:attribute name="use-savepoints" type="xsd:boolean" />
4243
<xsd:attributeGroup ref="driver-config" />
4344
</xsd:attributeGroup>

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,23 @@ public function testDbalLoadSavepointsForNestedTransactions(): void
235235
$this->assertCount(0, $calls);
236236
}
237237

238+
public function testDbalSchemaManagerFactory(): void
239+
{
240+
$container = $this->loadContainer('dbal_schema_manager_factory');
241+
242+
$this->assertDICDefinitionMethodCallOnce(
243+
$container->getDefinition('doctrine.dbal.default_schema_manager_factory_connection.configuration'),
244+
'setSchemaManagerFactory',
245+
[new Reference('doctrine.dbal.default_schema_manager_factory')]
246+
);
247+
248+
$this->assertDICDefinitionMethodCallOnce(
249+
$container->getDefinition('doctrine.dbal.custom_schema_manager_factory_connection.configuration'),
250+
'setSchemaManagerFactory',
251+
[new Reference('custom_factory')]
252+
);
253+
}
254+
238255
public function testLoadSimpleSingleConnection(): void
239256
{
240257
if (! interface_exists(EntityManagerInterface::class)) {
@@ -1025,9 +1042,7 @@ public function testDbalSchemaFilterNewConfig(): void
10251042
}
10261043
}
10271044

1028-
/**
1029-
* @group legacy
1030-
*/
1045+
/** @group legacy */
10311046
public function testWellKnownSchemaFilterDefaultTables(): void
10321047
{
10331048
$container = $this->getContainer([]);
@@ -1063,9 +1078,7 @@ public function testWellKnownSchemaFilterDefaultTables(): void
10631078
$this->assertTrue($filter->__invoke('anything_else'));
10641079
}
10651080

1066-
/**
1067-
* @group legacy
1068-
*/
1081+
/** @group legacy */
10691082
public function testWellKnownSchemaFilterOverriddenTables(): void
10701083
{
10711084
$container = $this->getContainer([]);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" ?>
2+
3+
<srv:container xmlns="http://symfony.com/schema/dic/doctrine"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:srv="http://symfony.com/schema/dic/services"
6+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
7+
http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
8+
9+
<config>
10+
<dbal default-connection="custom_schema_manager_factory">
11+
<connection name="default_schema_manager_factory" />
12+
<connection name="custom_schema_manager_factory" schema-manager-factory="custom_factory" />
13+
</dbal>
14+
</config>
15+
</srv:container>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
doctrine:
2+
dbal:
3+
default_connection: custom_schema_manager_factory
4+
connections:
5+
default_schema_manager_factory: ~
6+
custom_schema_manager_factory:
7+
schema_manager_factory: custom_factory

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"require": {
3232
"php": "^7.4 || ^8.0",
3333
"doctrine/cache": "^1.11 || ^2.0",
34-
"doctrine/dbal": "^3.4.0",
34+
"doctrine/dbal": "^3.6.0",
3535
"doctrine/persistence": "^2.2 || ^3",
3636
"doctrine/sql-formatter": "^1.0.1",
3737
"symfony/cache": "^5.4 || ^6.0",

0 commit comments

Comments
 (0)