Passed
Push — multiple-schemas-support ( 638643 )
by Damien
08:07
created

TableSchemaSubscriber   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 14
c 1
b 0
f 0
dl 0
loc 30
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A loadClassMetadata() 0 13 4
A getSubscribedEvents() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Auditor\Provider\Doctrine\Persistence\Event;
6
7
use DH\Auditor\Provider\Doctrine\DoctrineProvider;
8
use DH\Auditor\Provider\Doctrine\Persistence\Schema\SchemaManager;
9
use DH\Auditor\Provider\Doctrine\Service\StorageService;
10
use Doctrine\Common\EventSubscriber;
11
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
12
13
class TableSchemaSubscriber implements EventSubscriber
14
{
15
    private DoctrineProvider $provider;
16
17
    public function __construct(DoctrineProvider $provider)
18
    {
19
        $this->provider = $provider;
20
    }
21
22
    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
23
    {
24
        $classMetadata = $eventArgs->getClassMetadata();
25
        if (!$classMetadata->isInheritanceTypeSingleTable() || $classMetadata->getName() === $classMetadata->rootEntityName) {
0 ignored issues
show
Bug introduced by
Accessing rootEntityName on the interface Doctrine\Persistence\Mapping\ClassMetadata suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
26
            $schemaManager = new SchemaManager($this->provider);
27
            $storageService = $this->provider->getStorageServiceForEntity($classMetadata->getName());
28
29
            \assert($storageService instanceof StorageService);
30
            $platform = $storageService->getEntityManager()->getConnection()->getDatabasePlatform();
31
            if (!$platform->supportsSchemas()) {
32
                $classMetadata->setPrimaryTable([
33
                    'name' => $schemaManager->resolveTableName($classMetadata->getTableName(), $classMetadata->getSchemaName() ?? '', $platform),
34
                    'schema' => '',
35
                ]);
36
            }
37
        }
38
    }
39
40
    public function getSubscribedEvents()
41
    {
42
        return ['loadClassMetadata'];
43
    }
44
}
45