Skip to content

Commit f486c15

Browse files
committed
Latest revisions
Signed-off-by: Joey Smith <jsmith@webinertia.net> Signed-off-by: Joey Smith <jsmith@webinertia.net>
1 parent 86d5d4a commit f486c15

File tree

12 files changed

+189
-67
lines changed

12 files changed

+189
-67
lines changed

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
},
2727
"extra": {
2828
"laminas": {
29-
"component": "Laminas\\Db\\Adapter\\Mysql",
3029
"config-provider": "Laminas\\Db\\Adapter\\Mysql\\ConfigProvider"
3130
}
3231
},

composer.lock

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

src/ConfigProvider.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
namespace Laminas\Db\Adapter\Mysql;
44

5-
use Laminas\Db\Adapter\AdapterInterface;
65
use Laminas\Db\Adapter\AdapterAbstractServiceFactory;
6+
use Laminas\Db\Adapter\AdapterInterface;
77
use Laminas\Db\Adapter\AdapterServiceFactory;
8+
use Laminas\Db\Container\AdapterManager;
89
use Laminas\Db\Container\MetadataFactory;
910
use Laminas\Db\Metadata\MetadataInterface;
1011

@@ -20,16 +21,21 @@ public function __invoke(): array
2021
public function getDependencies(): array
2122
{
2223
return [
23-
'abstract_factories' => [
24-
AdapterAbstractServiceFactory::class,
25-
],
24+
// 'abstract_factories' => [
25+
// AdapterAbstractServiceFactory::class,
26+
// ],
2627
'aliases' => [
2728
AdapterInterface::class => Adapter::class,
28-
MetadataInterface::class => Metadata\Source\MysqlMetadata::class,
29+
//MetadataInterface::class => Metadata\Source\MysqlMetadata::class,
30+
],
31+
'delegators' => [
32+
AdapterManager::class => [
33+
Container\AdapterManagerDelegator::class,
34+
],
2935
],
3036
'factories' => [
31-
Adapter::class => AdapterServiceFactory::class,
32-
Metadata\Source\MysqlMetadata::class => MetadataFactory::class,
37+
Adapter::class => Container\AdapterFactory::class,
38+
//Metadata\Source\MysqlMetadata::class => MetadataFactory::class,
3339
],
3440
];
3541
}

src/Container/AdapterFactory.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Laminas\Db\Adapter\Mysql\Container;
6+
7+
use Laminas\Db\Adapter\ConfigInterface;
8+
use Laminas\Db\Adapter\Driver\DriverInterface;
9+
use Laminas\Db\Adapter\Mysql\Adapter;
10+
use Laminas\Db\Adapter\Platform\PlatformInterface;
11+
use Laminas\Db\Adapter\Profiler\ProfilerInterface;
12+
use Laminas\Db\Container\AdapterManager;
13+
use Psr\Container\ContainerInterface;
14+
15+
final class AdapterFactory
16+
{
17+
public function __invoke(ContainerInterface $container): Adapter
18+
{
19+
// $adapter = new Adapter($container->get('config')['db']);
20+
// $adapter->setDriver($container->get('db_driver'));
21+
// $adapter->setPlatform($container->get('db_platform'));
22+
$manager = $container->get(AdapterManager::class);
23+
$config = $manager->get(ConfigInterface::class);
24+
return new Adapter(
25+
$manager->get(DriverInterface::class),
26+
$manager->get(PlatformInterface::class),
27+
null, // needs added to AdapterManager allowed services
28+
$manager->get(ProfilerInterface::class)
29+
);
30+
}
31+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Laminas\Db\Adapter\Mysql\Container;
6+
7+
use Laminas\Db\Adapter\AdapterInterface;
8+
use Laminas\Db\Adapter\Driver\ConnectionInterface;
9+
use Laminas\Db\Adapter\Driver\DriverInterface;
10+
use Laminas\Db\Adapter\Platform\PlatformInterface;
11+
use Laminas\Db\Container\AdapterManager;
12+
use Laminas\ServiceManager\Factory\DelegatorFactoryInterface;
13+
use Psr\Container\ContainerInterface;
14+
15+
final class AdapterManagerDelegator implements DelegatorFactoryInterface
16+
{
17+
public function __invoke(
18+
ContainerInterface $container,
19+
string $name,
20+
callable $callback,
21+
?array $options = null
22+
): AdapterManager {
23+
$adapterManager = $callback();
24+
$adapterManager->configure([
25+
'factories' => [
26+
AdapterInterface::class => AdapterFactory::class,
27+
ConnectionInterface::class => ConnectionInterfaceFactory::class,
28+
DriverInterface::class => DriverInterfaceFactory::class,
29+
PlatformInterface::class => PlatformFactory::class
30+
],
31+
]);
32+
33+
return $adapterManager;
34+
}
35+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Laminas\Db\Adapter\Mysql\Container;
6+
7+
use Laminas\Db\Adapter\Driver\ConnectionInterface;
8+
use Laminas\Db\Adapter\Exception\RuntimeException;
9+
use Laminas\Db\Container\AdapterManager;
10+
use Laminas\Db\Adapter\Mysql\Driver;
11+
use Laminas\ServiceManager\Exception\ServiceNotCreatedException;
12+
use Psr\Container\ContainerInterface;
13+
14+
use function strtolower;
15+
16+
final class ConnectionInterfaceFactory
17+
{
18+
public function __invoke(
19+
ContainerInterface $container
20+
): ConnectionInterface {
21+
$manager = $container->get(AdapterManager::class);
22+
$connection = $this->getConnection($manager->get('db'));
23+
return $connection;
24+
}
25+
26+
private function getConnection(array $config): ConnectionInterface
27+
{
28+
// Got to have this to determine the driver type
29+
return match(strtolower($config['driver'])) {
30+
'pdo_mysql',
31+
'pdomysql',
32+
'pdo' => new Driver\Pdo\Connection($config),
33+
'mysqli' => new Driver\Mysqli\Connection($config),
34+
default => throw new ServiceNotCreatedException(
35+
'Connection type can not be determined from provided driver: ' . $config['driver']
36+
),
37+
};
38+
}
39+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Laminas\Db\Adapter\Mysql\Container;
6+
7+
final class DriverFeatureFactory
8+
{
9+
10+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Laminas\Db\Adapter\Mysql\Container;
6+
7+
use Laminas\Db\Adapter\Driver\ConnectionInterface;
8+
use Laminas\Db\Adapter\Driver\DriverInterface;
9+
use Laminas\Db\Adapter\Mysql\Driver;
10+
use Laminas\Db\Container\AdapterManager;
11+
use Laminas\Db\Adapter\Exception\RuntimeException;
12+
use Laminas\ServiceManager\Exception\ServiceNotCreatedException;
13+
use Psr\Container\ContainerInterface;
14+
15+
final class DriverInterfaceFactory
16+
{
17+
public function __invoke(ContainerInterface $container): DriverInterface
18+
{
19+
$manager = $container->get(AdapterManager::class);
20+
return $this->getDriver($manager);
21+
}
22+
23+
private function getDriver(AdapterManager $manager): DriverInterface
24+
{
25+
$config = $manager->get('db');
26+
// Got to have this to determine the driver type
27+
28+
return match (strtolower($config['driver'])) {
29+
'pdo_mysql',
30+
'pdomysql',
31+
'pdo' => new Driver\Pdo\Pdo($manager->get(ConnectionInterface::class)),
32+
'mysqli' => new Driver\Mysqli\Mysqli($manager->get(ConnectionInterface::class)),
33+
default => throw new ServiceNotCreatedException(
34+
'Driver type can not be determined from provided driver: ' . $config['driver']
35+
),
36+
};
37+
}
38+
}

src/Driver/Mysqli/Statement.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Laminas\Db\Adapter\ParameterContainer;
1313
use Laminas\Db\Adapter\Profiler\ProfilerAwareInterface;
1414
use Laminas\Db\Adapter\Profiler\ProfilerInterface;
15+
use Laminas\Db\Adapter\StatementContainerInterface;
1516
use mysqli_stmt;
1617

1718
use function array_unshift;
@@ -28,7 +29,7 @@ class Statement implements StatementInterface, DriverAwareInterface, ProfilerAwa
2829

2930
protected string $sql = '';
3031

31-
protected ParameterContainer $parameterContainer;
32+
protected ?ParameterContainer $parameterContainer = null;
3233

3334
/** @var mysqli_stmt */
3435
protected $resource;
@@ -84,14 +85,14 @@ public function initialize(\mysqli $mysqli): static
8485
* @param string $sql
8586
* @return $this Provides a fluent interface
8687
*/
87-
public function setSql($sql): static
88+
public function setSql($sql): StatementContainerInterface
8889
{
8990
$this->sql = $sql;
9091
return $this;
9192
}
9293

9394
/** Set Parameter container */
94-
public function setParameterContainer(ParameterContainer $parameterContainer): static
95+
public function setParameterContainer(ParameterContainer $parameterContainer): StatementContainerInterface
9596
{
9697
$this->parameterContainer = $parameterContainer;
9798
return $this;

src/Driver/Pdo/Pdo.php

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,34 +23,7 @@ class Pdo extends AbstractPdo
2323
{
2424
use DatabasePlatformNameTrait;
2525

26-
/**
27-
* @param array|Connection|\PDO $connection
28-
* @param string $features
29-
*/
30-
public function __construct(
31-
$connection,
32-
?StatementInterface $statementPrototype = null,
33-
?ResultInterface $resultPrototype = null,
34-
$features = self::FEATURES_DEFAULT
35-
) {
36-
if (! $connection instanceof Connection) {
37-
$connection = new Connection($connection);
38-
}
3926

40-
$this->registerConnection($connection);
41-
$this->registerStatementPrototype($statementPrototype ?: new Statement());
42-
$this->registerResultPrototype($resultPrototype ?: new Result());
43-
44-
if (is_array($features)) {
45-
foreach ($features as $name => $feature) {
46-
$this->addFeature($name, $feature);
47-
}
48-
} elseif ($features instanceof AbstractFeature) {
49-
$this->addFeature($features->getName(), $features);
50-
} elseif ($features === self::FEATURES_DEFAULT) {
51-
$this->setupDefaultFeatures();
52-
}
53-
}
5427

5528
/**
5629
* @return $this Provides a fluent interface

0 commit comments

Comments
 (0)