From ab82b01494aba013d20cd04e7668523958f8d5b8 Mon Sep 17 00:00:00 2001 From: Joey Smith Date: Tue, 9 Sep 2025 00:51:27 -0500 Subject: [PATCH 1/2] First VERY ROUGH draft. (just makes it work) No psalm work No code cleanup No additional test Signed-off-by: Joey Smith Signed-off-by: Joey Smith --- src/{Container => }/ConfigProvider.php | 9 ++---- .../AdapterAbstractServiceFactory.php | 32 ++++++++++++------- .../AdapterServiceDelegator.php | 5 ++- .../AdapterServiceFactory.php | 2 +- 4 files changed, 28 insertions(+), 20 deletions(-) rename src/{Container => }/ConfigProvider.php (56%) rename src/{Adapter => Container}/AdapterAbstractServiceFactory.php (63%) rename src/{Adapter => Container}/AdapterServiceDelegator.php (91%) rename src/{Adapter => Container}/AdapterServiceFactory.php (94%) diff --git a/src/Container/ConfigProvider.php b/src/ConfigProvider.php similarity index 56% rename from src/Container/ConfigProvider.php rename to src/ConfigProvider.php index 6751d2bbe..960aa7bb3 100644 --- a/src/Container/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -2,10 +2,7 @@ declare(strict_types=1); -namespace PhpDb\Container; - -use PhpDb\Adapter\AdapterInterface; -use PhpDb\Adapter\AdapterServiceFactory; +namespace PhpDb; final class ConfigProvider { @@ -20,8 +17,8 @@ public function getDependencies(): array { return [ 'factories' => [ - AdapterInterface::class => AdapterServiceFactory::class, - AdapterManager::class => AdapterManagerFactory::class, + Adapter\AdapterInterface::class => Container\AdapterServiceFactory::class, + Container\AdapterManager::class => Container\AdapterManagerFactory::class, ], ]; } diff --git a/src/Adapter/AdapterAbstractServiceFactory.php b/src/Container/AdapterAbstractServiceFactory.php similarity index 63% rename from src/Adapter/AdapterAbstractServiceFactory.php rename to src/Container/AdapterAbstractServiceFactory.php index f8229d1c4..8482f2c68 100644 --- a/src/Adapter/AdapterAbstractServiceFactory.php +++ b/src/Container/AdapterAbstractServiceFactory.php @@ -1,9 +1,14 @@ getConfig($container); if (empty($config)) { @@ -38,14 +40,20 @@ public function canCreate(ContainerInterface $container, $requestedName) /** * Create a DB adapter - * - * @param string $requestedName - * @return Adapter */ - public function __invoke(ContainerInterface $container, $requestedName, ?array $options = null) + public function __invoke(ContainerInterface $container, string $requestedName, ?array $options = null): AdapterInterface { - $config = $this->getConfig($container); - return new Adapter($config[$requestedName]); + $manager = $container->get(AdapterManager::class); + $driverFactory = ($manager->get('DriverFactoryFactory'))($container, $requestedName); + $driverInstance = $driverFactory::createFromConfig($container, $requestedName); + $platformFactory = ($manager->get('PlatformFactoryFactory'))(); + + //$config = $this->getConfig($container); + return new Adapter( + $driverInstance, + $platformFactory::fromDriver($driverInstance), + $manager->get(ResultSetInterface::class), + ); } /** diff --git a/src/Adapter/AdapterServiceDelegator.php b/src/Container/AdapterServiceDelegator.php similarity index 91% rename from src/Adapter/AdapterServiceDelegator.php rename to src/Container/AdapterServiceDelegator.php index ffba58cc4..e521b5255 100644 --- a/src/Adapter/AdapterServiceDelegator.php +++ b/src/Container/AdapterServiceDelegator.php @@ -2,9 +2,12 @@ declare(strict_types=1); -namespace PhpDb\Adapter; +namespace PhpDb\Container; use Laminas\ServiceManager\Exception\ServiceNotFoundException; +use PhpDb\Adapter\AdapterInterface; +use PhpDb\Adapter\AdapterAwareInterface; +use PhpDb\Exception; use Psr\Container\ContainerInterface; use function sprintf; diff --git a/src/Adapter/AdapterServiceFactory.php b/src/Container/AdapterServiceFactory.php similarity index 94% rename from src/Adapter/AdapterServiceFactory.php rename to src/Container/AdapterServiceFactory.php index d11c9fd05..2e38763e6 100644 --- a/src/Adapter/AdapterServiceFactory.php +++ b/src/Container/AdapterServiceFactory.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PhpDb\Adapter; +namespace PhpDb\Container; use PhpDb\Adapter\AdapterInterface; use PhpDb\Container\AdapterManager; From e4832766e7b44cf59f09e622b8d8ccd87de1fbef Mon Sep 17 00:00:00 2001 From: Joey Smith Date: Sun, 14 Sep 2025 20:39:09 -0500 Subject: [PATCH 2/2] Introduces marker *FactoryFactoryInterface to allow adapter packages to alias the required FactoryFactories. Signed-off-by: Joey Smith Signed-off-by: Joey Smith --- src/Container/AdapterAbstractServiceFactory.php | 5 ++--- .../ConnectionInterfaceFactoryFactoryInterface.php | 9 +++++++++ .../DriverInterfaceFactoryFactoryInterface.php | 9 +++++++++ src/Container/FactoryFactoryInterface.php | 12 ++++++++++++ .../PlatformInterfaceFactoryFactoryInterface.php | 9 +++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/Container/ConnectionInterfaceFactoryFactoryInterface.php create mode 100644 src/Container/DriverInterfaceFactoryFactoryInterface.php create mode 100644 src/Container/FactoryFactoryInterface.php create mode 100644 src/Container/PlatformInterfaceFactoryFactoryInterface.php diff --git a/src/Container/AdapterAbstractServiceFactory.php b/src/Container/AdapterAbstractServiceFactory.php index 8482f2c68..19a8d5379 100644 --- a/src/Container/AdapterAbstractServiceFactory.php +++ b/src/Container/AdapterAbstractServiceFactory.php @@ -7,7 +7,6 @@ use Laminas\ServiceManager\Factory\AbstractFactoryInterface; use PhpDb\Adapter\Adapter; use PhpDb\Adapter\AdapterInterface; -use PhpDb\Adapter\Platform\PlatformInterface; use PhpDb\ResultSet\ResultSetInterface; use Psr\Container\ContainerInterface; @@ -44,9 +43,9 @@ public function canCreate(ContainerInterface $container, string $requestedName): public function __invoke(ContainerInterface $container, string $requestedName, ?array $options = null): AdapterInterface { $manager = $container->get(AdapterManager::class); - $driverFactory = ($manager->get('DriverFactoryFactory'))($container, $requestedName); + $driverFactory = ($manager->get(DriverInterfaceFactoryFactoryInterface::class))($container, $requestedName); $driverInstance = $driverFactory::createFromConfig($container, $requestedName); - $platformFactory = ($manager->get('PlatformFactoryFactory'))(); + $platformFactory = ($manager->get(PlatformInterfaceFactoryFactoryInterface::class))(); //$config = $this->getConfig($container); return new Adapter( diff --git a/src/Container/ConnectionInterfaceFactoryFactoryInterface.php b/src/Container/ConnectionInterfaceFactoryFactoryInterface.php new file mode 100644 index 000000000..aeedefa9f --- /dev/null +++ b/src/Container/ConnectionInterfaceFactoryFactoryInterface.php @@ -0,0 +1,9 @@ +