Skip to content

Commit

Permalink
feat: add support for ORM fetch_mode_subselect_batch_size configuation
Browse files Browse the repository at this point in the history
  • Loading branch information
simPod committed Oct 13, 2024
1 parent e1abb90 commit c2454a3
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions config/schema/doctrine-1.0.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@
<xsd:attribute name="connection" type="xsd:string" />
<xsd:attribute name="default-repository-class" type="xsd:string" />
<xsd:attribute name="class-metadata-factory-name" type="xsd:string" />
<xsd:attribute name="fetch-mode-subselect-batch-size" type="xsd:int" />
<xsd:attribute name="naming-strategy" type="xsd:string" />
<xsd:attribute name="quote-strategy" type="xsd:string" />
<xsd:attribute name="typed-field-mapper" type="xsd:string" />
Expand Down
1 change: 1 addition & 0 deletions docs/en/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ Configuration Reference
- Acme\AppBundle\Entity\Order
- Acme\AppBundle\Entity\PhoneNumber
fetch_mode_subselect_batch_size: 2000
# Search for the "ResolveTargetEntityListener" class for a cookbook about this
resolve_target_entities:
Expand Down
1 change: 1 addition & 0 deletions src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,7 @@ private function getOrmEntityManagersNode(): ArrayNodeDefinition
->scalarNode('quote_strategy')->defaultValue('doctrine.orm.quote_strategy.default')->end()
->scalarNode('typed_field_mapper')->defaultValue('doctrine.orm.typed_field_mapper.default')->end()
->scalarNode('entity_listener_resolver')->defaultNull()->end()
->scalarNode('fetch_mode_subselect_batch_size')->defaultNull()->end()
->scalarNode('repository_factory')->defaultValue('doctrine.orm.container_repository_factory')->end()
->arrayNode('schema_ignore_classes')
->prototype('scalar')->end()
Expand Down
1 change: 1 addition & 0 deletions src/DependencyInjection/DoctrineExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,7 @@ protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $
'setEntityListenerResolver' => new Reference(sprintf('doctrine.orm.%s_entity_listener_resolver', $entityManager['name'])),
'setLazyGhostObjectEnabled' => '%doctrine.orm.enable_lazy_ghost_objects%',
'setIdentityGenerationPreferences' => $entityManager['identity_generation_preferences'],
'setFetchModeSubselectBatchSize' => $entityManager['fetch_mode_subselect_batch_size'],
];

if (! method_exists(OrmConfiguration::class, 'setLazyGhostObjectEnabled')) {
Expand Down
13 changes: 13 additions & 0 deletions tests/DependencyInjection/AbstractDoctrineExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1053,6 +1053,19 @@ public function testSchemaIgnoreClasses(): void
$this->assertDICDefinitionMethodCallOnce($def1, 'setSchemaIgnoreClasses', [0 => ['Class\A', 'Class\B']]);
}

public function testFetchModeSubselectBatchSize(): void
{
if (! interface_exists(EntityManagerInterface::class)) {
self::markTestSkipped('This test requires ORM');
}

$container = $this->loadContainer('orm_fetch_mode_subselect_batch_size');

$def1 = $container->getDefinition('doctrine.orm.default_configuration');

$this->assertDICDefinitionMethodCallOnce($def1, 'setFetchModeSubselectBatchSize', [10000]);
}

public function testAttachEntityListeners(): void
{
if (! interface_exists(EntityManagerInterface::class)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" ?>

<srv:container xmlns="http://symfony.com/schema/dic/doctrine"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">

<config>
<dbal default-connection="default">
</dbal>

<orm fetch-mode-subselect-batch-size="10000">
</orm>
</config>
</srv:container>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
doctrine:
dbal:
default_connection: default

orm:
fetch_mode_subselect_batch_size: 10000

0 comments on commit c2454a3

Please sign in to comment.