Skip to content

Commit 871bcfc

Browse files
authored
Merge pull request #22 from php-db/x.x.2-adaptermanager-delegator-refactor
X.x.2 adaptermanager delegator refactor
2 parents 26f442d + 5fe7cab commit 871bcfc

File tree

7 files changed

+141
-71
lines changed

7 files changed

+141
-71
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
},
3434
"require": {
3535
"php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
36-
"php-db/phpdb": "0.0.x-dev"
36+
"php-db/phpdb": "dev-x.x.2"
3737
},
3838
"require-dev": {
3939
"ext-mysqli": "*",

composer.lock

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

psalm-baseline.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="6.12.0@cf420941d061a57050b6c468ef2c778faf40aee2">
3-
<file src="src/ConfigProvider.php">
4-
<ClassMustBeFinal>
5-
<code><![CDATA[ConfigProvider]]></code>
6-
</ClassMustBeFinal>
7-
</file>
2+
<files psalm-version="6.12.1@e71404b0465be25cf7f8a631b298c01c5ddd864f">
83
<file src="src/Container/AdapterFactory.php">
94
<UnnecessaryVarAnnotation>
105
<code><![CDATA[PlatformInterface]]></code>
116
<code><![CDATA[ProfilerInterface|null]]></code>
127
<code><![CDATA[ResultSetInterface]]></code>
138
</UnnecessaryVarAnnotation>
149
</file>
10+
<file src="src/Container/AdapterManagerDelegator.php">
11+
<InvalidClass>
12+
<code><![CDATA[ConfigProvider]]></code>
13+
</InvalidClass>
14+
</file>
1515
<file src="src/Container/MysqliResultFactory.php">
1616
<UnusedParam>
1717
<code><![CDATA[$container]]></code>

src/ConfigProvider.php

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,82 @@
44

55
namespace PhpDb\Adapter\Mysql;
66

7+
use Laminas\ServiceManager\Factory\InvokableFactory;
8+
use PhpDb\Adapter\AdapterInterface;
9+
use PhpDb\Adapter\Driver\DriverInterface;
10+
use PhpDb\Adapter\Driver\Pdo\Result;
11+
use PhpDb\Adapter\Driver\Pdo\Statement as PdoStatement;
12+
use PhpDb\Adapter\Driver\PdoDriverInterface;
13+
use PhpDb\Adapter\Mysql\Driver;
14+
use PhpDb\Adapter\Mysql\Metadata\Source\MysqlMetadata;
15+
use PhpDb\Adapter\Platform\PlatformInterface;
16+
use PhpDb\Adapter\Profiler;
717
use PhpDb\Container\AdapterManager;
18+
use PhpDb\Container\MetadataFactory;
19+
use PhpDb\Metadata\MetadataInterface;
20+
use PhpDb\ResultSet;
821

9-
readonly class ConfigProvider
22+
final class ConfigProvider
1023
{
1124
public function __invoke(): array
1225
{
1326
return [
14-
'dependencies' => $this->getDependencies(),
27+
'dependencies' => $this->getDependencies(),
28+
AdapterManager::class => $this->getAdapterManagerConfig(),
1529
];
1630
}
1731

1832
public function getDependencies(): array
1933
{
2034
return [
35+
'aliases' => [
36+
MetadataInterface::class => MysqlMetadata::class,
37+
],
38+
'factories' => [
39+
MysqlMetadata::class => MetadataFactory::class,
40+
],
2141
'delegators' => [
2242
AdapterManager::class => [
2343
Container\AdapterManagerDelegator::class,
2444
],
2545
],
2646
];
2747
}
48+
49+
public function getAdapterManagerConfig(): array
50+
{
51+
return [
52+
'aliases' => [
53+
'MySqli' => Driver\Mysqli\Mysqli::class,
54+
'MySQLi' => Driver\Mysqli\Mysqli::class,
55+
'Mysqli' => Driver\Mysqli\Mysqli::class,
56+
'mysqli' => Driver\Mysqli\Mysqli::class,
57+
'PDO_MySQL' => Driver\Pdo\Pdo::class,
58+
'Pdo_MySQL' => Driver\Pdo\Pdo::class,
59+
'Pdo_Mysql' => Driver\Pdo\Pdo::class,
60+
'pdo_mysql' => Driver\Pdo\Pdo::class,
61+
'pdomysql' => Driver\Pdo\Pdo::class,
62+
'pdodriver' => Driver\Pdo\Pdo::class,
63+
'pdo' => Driver\Pdo\Pdo::class,
64+
DriverInterface::class => Driver\Mysqli\Mysqli::class,
65+
PdoDriverInterface::class => Driver\Pdo\Pdo::class,
66+
Profiler\ProfilerInterface::class => Profiler\Profiler::class,
67+
ResultSet\ResultSetInterface::class => ResultSet\ResultSet::class,
68+
],
69+
'factories' => [
70+
AdapterInterface::class => Container\AdapterFactory::class,
71+
Driver\Mysqli\Mysqli::class => Container\MysqliDriverFactory::class,
72+
Driver\Mysqli\Connection::class => Container\MysqliConnectionFactory::class,
73+
Driver\Mysqli\Result::class => Container\MysqliResultFactory::class,
74+
Driver\Mysqli\Statement::class => Container\MysqliStatementFactory::class,
75+
Driver\Pdo\Pdo::class => Container\PdoDriverFactory::class,
76+
Driver\Pdo\Connection::class => Container\PdoConnectionFactory::class,
77+
Result::class => Container\PdoResultFactory::class,
78+
PdoStatement::class => Container\PdoStatementFactory::class,
79+
PlatformInterface::class => Container\PlatformInterfaceFactory::class,
80+
Profiler\Profiler::class => InvokableFactory::class,
81+
ResultSet\ResultSet::class => InvokableFactory::class,
82+
],
83+
];
84+
}
2885
}

src/Container/AdapterManagerDelegator.php

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,8 @@
55
namespace PhpDb\Adapter\Mysql\Container;
66

77
use Laminas\ServiceManager\Factory\DelegatorFactoryInterface;
8-
use Laminas\ServiceManager\Factory\InvokableFactory;
9-
use PhpDb\Adapter\AdapterInterface;
10-
use PhpDb\Adapter\Driver\DriverInterface;
11-
use PhpDb\Adapter\Driver\Pdo\Result;
12-
use PhpDb\Adapter\Driver\Pdo\Statement as PdoStatement;
13-
use PhpDb\Adapter\Driver\PdoDriverInterface;
14-
use PhpDb\Adapter\Mysql\Driver;
15-
use PhpDb\Adapter\Platform\PlatformInterface;
16-
use PhpDb\Adapter\Profiler;
8+
use PhpDB\Adapter\Mysql\ConfigProvider;
179
use PhpDb\Container\AdapterManager;
18-
use PhpDb\ResultSet;
1910
use Psr\Container\ContainerInterface;
2011

2112
final class AdapterManagerDelegator implements DelegatorFactoryInterface
@@ -28,39 +19,9 @@ public function __invoke(
2819
): AdapterManager {
2920
/** @var AdapterManager $adapterManager */
3021
$adapterManager = $callback();
31-
$adapterManager->configure([
32-
'aliases' => [
33-
'MySqli' => Driver\Mysqli\Mysqli::class,
34-
'MySQLi' => Driver\Mysqli\Mysqli::class,
35-
'Mysqli' => Driver\Mysqli\Mysqli::class,
36-
'mysqli' => Driver\Mysqli\Mysqli::class,
37-
'PDO_MySQL' => Driver\Pdo\Pdo::class,
38-
'Pdo_MySQL' => Driver\Pdo\Pdo::class,
39-
'Pdo_Mysql' => Driver\Pdo\Pdo::class,
40-
'pdo_mysql' => Driver\Pdo\Pdo::class,
41-
'pdomysql' => Driver\Pdo\Pdo::class,
42-
'pdodriver' => Driver\Pdo\Pdo::class,
43-
'pdo' => Driver\Pdo\Pdo::class,
44-
DriverInterface::class => Driver\Mysqli\Mysqli::class,
45-
PdoDriverInterface::class => Driver\Pdo\Pdo::class,
46-
Profiler\ProfilerInterface::class => Profiler\Profiler::class,
47-
ResultSet\ResultSetInterface::class => ResultSet\ResultSet::class,
48-
],
49-
'factories' => [
50-
AdapterInterface::class => AdapterFactory::class,
51-
Driver\Mysqli\Mysqli::class => MysqliDriverFactory::class,
52-
Driver\Mysqli\Connection::class => MysqliConnectionFactory::class,
53-
Driver\Mysqli\Result::class => MysqliResultFactory::class,
54-
Driver\Mysqli\Statement::class => MysqliStatementFactory::class,
55-
Driver\Pdo\Pdo::class => PdoDriverFactory::class,
56-
Driver\Pdo\Connection::class => PdoConnectionFactory::class,
57-
Result::class => PdoResultFactory::class,
58-
PdoStatement::class => PdoStatementFactory::class,
59-
PlatformInterface::class => PlatformInterfaceFactory::class,
60-
Profiler\Profiler::class => InvokableFactory::class,
61-
ResultSet\ResultSet::class => InvokableFactory::class,
62-
],
63-
]);
22+
$adapterManager->configure(
23+
(new ConfigProvider())->getAdapterManagerConfig()
24+
);
6425

6526
return $adapterManager;
6627
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpDb\Adapter\Mysql\Container;
6+
7+
use PhpDb\Adapter\AdapterInterface;
8+
use PhpDb\Adapter\Mysql\Metadata\Source\MysqlMetadata;
9+
use PhpDb\Adapter\SchemaAwareInterface;
10+
use PhpDb\Metadata\MetadataInterface;
11+
use Psr\Container\ContainerInterface;
12+
13+
final class MysqlMetadataFactory
14+
{
15+
public function __invoke(ContainerInterface $container): MetadataInterface&MysqlMetadata
16+
{
17+
/** @var AdapterInterface&SchemaAwareInterface $adapter */
18+
$adapter = $container->get(AdapterInterface::class);
19+
20+
return new MysqlMetadata(
21+
$adapter
22+
);
23+
}
24+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpDbIntegrationTest\Adapter\Mysql\Container;
6+
7+
use PhpDb\Adapter\Mysql\Container\MysqlMetadataFactory;
8+
use PhpDb\Adapter\Mysql\Metadata\Source\MysqlMetadata;
9+
use PhpDb\Metadata\MetadataInterface;
10+
use PhpDbIntegrationTest\Adapter\Mysql\Container\TestAsset\SetupTrait;
11+
use PHPUnit\Framework\Attributes\CoversClass;
12+
use PHPUnit\Framework\Attributes\CoversMethod;
13+
use PHPUnit\Framework\TestCase;
14+
15+
#[CoversClass(MysqlMetadataFactory::class)]
16+
#[CoversMethod(MysqlMetadataFactory::class, '__invoke')]
17+
final class MysqlMetadataFactoryTest extends TestCase
18+
{
19+
use SetupTrait;
20+
21+
public function testFactoryReturnsMysqlMetadata(): void
22+
{
23+
$factory = new MysqlMetadataFactory();
24+
$metadata = $factory($this->container);
25+
self::assertInstanceOf(MetadataInterface::class, $metadata);
26+
self::assertInstanceOf(MysqlMetadata::class, $metadata);
27+
}
28+
}

0 commit comments

Comments
 (0)