Skip to content

Commit 3d0d283

Browse files
committed
Wire the per-connection type provider via setTypeProvider()
DBAL 4.5 renamed the Configuration accessors to get/setTypeProvider(), typed against the new TypeProvider interface. The version guard has to follow the rename: method_exists() on the old name would silently take the DBAL < 4.5 branch, leaving per-connection registries unwired with no error. DoctrineDataCollectorTest can now stub TypeProvider instead of instantiating a real TypeRegistry, which the final class made impossible.
1 parent b7956a1 commit 3d0d283

3 files changed

Lines changed: 19 additions & 18 deletions

File tree

src/DependencyInjection/Compiler/RegisterDbalTypePass.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static function autoconfigureFromAttribute(ChildDefinition $definition, A
4040

4141
public function process(ContainerBuilder $container): void
4242
{
43-
if (method_exists(DbalConfiguration::class, 'setTypeRegistry')) {
43+
if (method_exists(DbalConfiguration::class, 'setTypeProvider')) {
4444
$this->registerInTypeRegistry($container);
4545
} else {
4646
$this->registerInConfig($container);
@@ -115,10 +115,10 @@ private function registerInTypeRegistry(ContainerBuilder $container): void
115115

116116
$container
117117
->getDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name))
118-
->addMethodCall('setTypeRegistry', [$registryRef]);
118+
->addMethodCall('setTypeProvider', [$registryRef]);
119119

120120
foreach ($connectionToOrmConfigs[$name] ?? [] as $ormConfigId) {
121-
$container->getDefinition($ormConfigId)->addMethodCall('setTypeRegistry', [$registryRef]);
121+
$container->getDefinition($ormConfigId)->addMethodCall('setTypeProvider', [$registryRef]);
122122
}
123123
}
124124
}

tests/DataCollector/DoctrineDataCollectorTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Doctrine\DBAL\Configuration as DBALConfiguration;
99
use Doctrine\DBAL\Connection;
1010
use Doctrine\DBAL\Types\Type;
11-
use Doctrine\DBAL\Types\TypeRegistry;
11+
use Doctrine\DBAL\Types\TypeProvider;
1212
use Doctrine\ORM\Configuration;
1313
use Doctrine\ORM\EntityManager;
1414
use Doctrine\ORM\EntityManagerInterface;
@@ -60,9 +60,10 @@ public function testCollectEntities(): void
6060

6161
$manager->method('getMetadataFactory')->willReturn($factory);
6262
$manager->method('getConfiguration')->willReturn($config);
63-
if (method_exists(DBALConfiguration::class, 'getTypeRegistry')) {
63+
if (method_exists(DBALConfiguration::class, 'getTypeProvider')) {
6464
$dbalConfig = $this->createStub(DBALConfiguration::class);
65-
$dbalConfig->method('getTypeRegistry')->willReturn(new TypeRegistry());
65+
// TypeProvider is an interface, so it can simply be stubbed.
66+
$dbalConfig->method('getTypeProvider')->willReturn($this->createStub(TypeProvider::class));
6667
$connection = $this->createStub(Connection::class);
6768
$connection->method('getConfiguration')->willReturn($dbalConfig);
6869
$manager->method('getConnection')->willReturn($connection);

tests/DependencyInjection/Compiler/RegisterDbalTypePassTest.php

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class RegisterDbalTypePassTest extends TestCase
4141
{
4242
private static function requiresTypeRegistry(): void
4343
{
44-
if (method_exists(DbalConfiguration::class, 'setTypeRegistry')) {
44+
if (method_exists(DbalConfiguration::class, 'setTypeProvider')) {
4545
return;
4646
}
4747

@@ -50,7 +50,7 @@ private static function requiresTypeRegistry(): void
5050

5151
private static function requiresNoTypeRegistry(): void
5252
{
53-
if (! method_exists(DbalConfiguration::class, 'setTypeRegistry')) {
53+
if (! method_exists(DbalConfiguration::class, 'setTypeProvider')) {
5454
return;
5555
}
5656

@@ -67,7 +67,7 @@ public function testNoTaggedTypesSkipsTypeRegistrySetup(): void
6767
});
6868

6969
foreach ($container->getDefinition('conf_conn1')->getMethodCalls() as [$method]) {
70-
self::assertNotSame('setTypeRegistry', $method);
70+
self::assertNotSame('setTypeProvider', $method);
7171
}
7272
}
7373

@@ -222,13 +222,13 @@ public function testTypeRegistryIsSetOnConfiguration(): void
222222
$container->setAlias('conf_conn1', 'doctrine.dbal.conn1_connection.configuration')->setPublic(true);
223223
});
224224

225-
$setTypeRegistryCalls = array_filter(
225+
$setTypeProviderCalls = array_filter(
226226
$container->getDefinition('conf_conn1')->getMethodCalls(),
227-
static fn (array $call): bool => $call[0] === 'setTypeRegistry',
227+
static fn (array $call): bool => $call[0] === 'setTypeProvider',
228228
);
229229

230-
self::assertCount(1, $setTypeRegistryCalls);
231-
$registryArg = array_values($setTypeRegistryCalls)[0][1][0];
230+
self::assertCount(1, $setTypeProviderCalls);
231+
$registryArg = array_values($setTypeProviderCalls)[0][1][0];
232232

233233
if ($registryArg instanceof Reference) {
234234
$registryArg = $container->getDefinition((string) $registryArg);
@@ -254,12 +254,12 @@ static function (ContainerBuilder $container): void {
254254
);
255255

256256
foreach (['orm_conf_conn1', 'orm_conf_conn2'] as $alias) {
257-
$setTypeRegistryCalls = array_filter(
257+
$setTypeProviderCalls = array_filter(
258258
$container->getDefinition($alias)->getMethodCalls(),
259-
static fn (array $call): bool => $call[0] === 'setTypeRegistry',
259+
static fn (array $call): bool => $call[0] === 'setTypeProvider',
260260
);
261261

262-
self::assertCount(1, $setTypeRegistryCalls, sprintf('setTypeRegistry not called on %s', $alias));
262+
self::assertCount(1, $setTypeProviderCalls, sprintf('setTypeProvider not called on %s', $alias));
263263
}
264264
}
265265

@@ -280,8 +280,8 @@ public function testCustomTypeIsAvailableForOrmEntityMapping(): void
280280
$metadata = $em->getClassMetadata(MoneyEntity::class);
281281
self::assertSame('money', $metadata->fieldMappings['amount']['type']);
282282

283-
if (method_exists(DbalConfiguration::class, 'setTypeRegistry')) {
284-
$typeRegistry = $em->getConnection()->getConfiguration()->getTypeRegistry();
283+
if (method_exists(DbalConfiguration::class, 'setTypeProvider')) {
284+
$typeRegistry = $em->getConnection()->getConfiguration()->getTypeProvider();
285285
self::assertInstanceOf(MoneyTypeFixture::class, $typeRegistry->get('money'));
286286
} else {
287287
self::assertTrue(Type::hasType('money'));

0 commit comments

Comments
 (0)