Skip to content

Commit 6ec6479

Browse files
committed
Aligns code well enough that both adapter interface config and named adapters will load a configured adapter service.
Signed-off-by: Joey Smith <jsmith@webinertia.net> Signed-off-by: Joey Smith <jsmith@webinertia.net>
1 parent 37d71e1 commit 6ec6479

25 files changed

Lines changed: 195 additions & 516 deletions

composer.lock

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

src/AdapterPlatform.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class AdapterPlatform extends AbstractPlatform
2727
protected string $quoteIdentifierTo = '\'';
2828

2929
public function __construct(
30-
protected readonly PdoDriverInterface|PDO $driver
30+
protected readonly PdoDriverInterface|PDO|null $driver = null
3131
) {
3232
}
3333

src/ConfigProvider.php

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,61 @@
44

55
namespace PhpDb\Adapter\Sqlite;
66

7-
use Laminas\ServiceManager\Factory\InvokableFactory;
87
use PhpDb\Adapter\AdapterInterface;
9-
use PhpDb\Adapter\Driver\ConnectionInterface;
10-
use PhpDb\Adapter\Driver\DriverInterface;
118
use PhpDb\Adapter\Driver\Pdo\Result;
129
use PhpDb\Adapter\Driver\Pdo\Statement;
1310
use PhpDb\Adapter\Driver\PdoConnectionInterface;
1411
use PhpDb\Adapter\Driver\PdoDriverInterface;
1512
use PhpDb\Adapter\Driver\ResultInterface;
1613
use PhpDb\Adapter\Driver\StatementInterface;
1714
use PhpDb\Adapter\Platform\PlatformInterface;
18-
use PhpDb\Adapter\Profiler\Profiler;
19-
use PhpDb\Adapter\Profiler\ProfilerInterface;
20-
use PhpDb\Container\AbstractAdapterInterfaceFactory;
2115
use PhpDb\Metadata\MetadataInterface;
22-
use PhpDb\ResultSet;
2316

2417
final class ConfigProvider
2518
{
2619
public function __invoke(): array
2720
{
2821
return [
2922
'dependencies' => $this->getDependencies(),
23+
//AdapterInterface::class => $this->getConfig(),
3024
];
3125
}
3226

33-
public function getDependencies(): array
27+
public function getConfig(): array
3428
{
3529
return [
36-
'abstract_factories' => [
37-
AbstractAdapterInterfaceFactory::class,
30+
'driver' => PdoDriverInterface::class,
31+
'connection' => [
32+
'dsn' => 'sqlite::memory:',
3833
],
39-
'aliases' => [
40-
'SQLite' => Pdo\Driver::class,
41-
'Sqlite' => Pdo\Driver::class,
42-
'sqlite' => Pdo\Driver::class,
43-
'pdo' => Pdo\Driver::class,
44-
'pdo_sqlite' => Pdo\Driver::class,
45-
'pdosqlite' => Pdo\Driver::class,
46-
'pdodriver' => Pdo\Driver::class,
47-
ConnectionInterface::class => Pdo\Connection::class,
48-
PdoConnectionInterface::class => Pdo\Connection::class,
49-
DriverInterface::class => Pdo\Driver::class,
50-
PdoDriverInterface::class => Pdo\Driver::class,
51-
PlatformInterface::class => AdapterPlatform::class,
52-
ProfilerInterface::class => Profiler::class,
53-
ResultInterface::class => Result::class,
54-
ResultSet\ResultSetInterface::class => ResultSet\ResultSet::class,
55-
StatementInterface::class => Statement::class,
56-
MetadataInterface::class => Metadata\Source::class,
34+
];
35+
}
36+
37+
public function getDependencies(): array
38+
{
39+
return [
40+
'aliases' => [
41+
'SQLite' => Pdo\Driver::class,
42+
'Sqlite' => Pdo\Driver::class,
43+
'sqlite' => Pdo\Driver::class,
44+
'pdo' => Pdo\Driver::class,
45+
'pdo_sqlite' => Pdo\Driver::class,
46+
'pdosqlite' => Pdo\Driver::class,
47+
'pdodriver' => Pdo\Driver::class,
48+
PdoConnectionInterface::class => Pdo\Connection::class,
49+
PdoDriverInterface::class => Pdo\Driver::class,
50+
PlatformInterface::class => AdapterPlatform::class,
51+
ResultInterface::class => Result::class,
52+
StatementInterface::class => Statement::class,
53+
MetadataInterface::class => Metadata\Source::class,
5754
],
58-
'factories' => [
59-
AdapterInterface::class => Container\AdapterInterfaceFactory::class,
60-
Pdo\Connection::class => Container\PdoConnectionFactory::class,
61-
Pdo\Driver::class => Container\PdoDriverFactory::class,
62-
Result::class => Container\PdoResultFactory::class,
63-
Statement::class => Container\PdoStatementFactory::class,
64-
AdapterPlatform::class => Container\PlatformInterfaceFactory::class,
65-
Profiler::class => InvokableFactory::class,
66-
ResultSet\ResultSet::class => InvokableFactory::class,
67-
Metadata\Source::class => Container\MetadataInterfaceFactory::class,
55+
'factories' => [
56+
Pdo\Connection::class => Container\PdoConnectionFactory::class,
57+
Pdo\Driver::class => Container\PdoDriverInterfaceFactory::class,
58+
Result::class => Container\PdoResultFactory::class,
59+
Statement::class => Container\PdoStatementFactory::class,
60+
AdapterPlatform::class => Container\PlatformInterfaceFactory::class,
61+
Metadata\Source::class => Container\MetadataInterfaceFactory::class,
6862
],
6963
];
7064
}

src/Container/AdapterInterfaceFactory.php

Lines changed: 0 additions & 79 deletions
This file was deleted.

src/Container/MetadataInterfaceFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpDb\Adapter\Sqlite\Container;
66

77
use PhpDb\Adapter\AdapterInterface;
8+
use PhpDb\Adapter\SchemaAwareInterface;
89
use PhpDb\Adapter\Sqlite\Metadata;
910
use PhpDb\Metadata\MetadataInterface;
1011
use Psr\Container\ContainerInterface;

src/Container/PdoConnectionFactory.php

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
namespace PhpDb\Adapter\Sqlite\Container;
66

7+
use PhpDb\Adapter\AdapterInterface;
78
use PhpDb\Adapter\Driver\ConnectionInterface;
8-
use PhpDb\Adapter\Sqlite\Driver\Pdo\Connection;
9+
use PhpDb\Adapter\Sqlite\Pdo\Connection;
910
use Psr\Container\ContainerInterface;
1011

1112
final class PdoConnectionFactory
@@ -16,19 +17,11 @@ public function __invoke(ContainerInterface $container): ConnectionInterface&Con
1617
$config = $container->get('config');
1718

1819
/** @var array $dbConfig */
19-
$dbConfig = $config['db'] ?? [];
20+
$dbConfig = $config[AdapterInterface::class] ?? [];
2021

2122
/** @var array $connectionConfig */
2223
$connectionConfig = $dbConfig['connection'] ?? [];
2324

2425
return new Connection($connectionConfig);
2526
}
26-
27-
public static function createFromConfig(
28-
ContainerInterface $container,
29-
string $requestedName
30-
): ConnectionInterface&Connection {
31-
$adapterConfig = $container->get('config')['db']['adapters'][$requestedName] ?? [];
32-
return new Connection($adapterConfig['connection'] ?? []);
33-
}
3427
}

src/Container/PdoDriverFactory.php

Lines changed: 0 additions & 63 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpDb\Adapter\Sqlite\Container;
6+
7+
use Laminas\ServiceManager\ServiceManager;
8+
use PhpDb\Adapter\Driver\Pdo\Result;
9+
use PhpDb\Adapter\Driver\Pdo\Statement;
10+
use PhpDb\Adapter\Driver\PdoDriverInterface;
11+
use PhpDb\Adapter\Driver\ResultInterface;
12+
use PhpDb\Adapter\Sqlite\Pdo;
13+
use Psr\Container\ContainerInterface;
14+
15+
final class PdoDriverInterfaceFactory
16+
{
17+
public function __invoke(
18+
ContainerInterface&ServiceManager $container,
19+
string $requestedName,
20+
?array $options = null
21+
): PdoDriverInterface&Pdo\Driver {
22+
// if (! $container->has('config')) {
23+
// throw ContainerException::forService(
24+
// Pdo\Driver::class,
25+
// self::class,
26+
// 'Container is missing config service'
27+
// );
28+
// }
29+
30+
/** @var Pdo\Connection $connectionInstance */
31+
$connectionInstance = $container->build(
32+
Pdo\Connection::class, ['connection' => $options['connection'] ?? []]
33+
);
34+
35+
/** @var ResultInterface&Result $resultInstance */
36+
$resultInstance = $container->has(ResultInterface::class)
37+
? $container->get(ResultInterface::class)
38+
: new Result();
39+
40+
return new Pdo\Driver(
41+
connection:$connectionInstance,
42+
statementPrototype: $container->build(Statement::class, $options['options'] ?? []),
43+
resultPrototype: $resultInstance,
44+
features: [new Pdo\Feature\SqliteRowCounter()],
45+
);
46+
}
47+
}

0 commit comments

Comments
 (0)