diff --git a/ConnectionFactory.php b/ConnectionFactory.php index 84e70aa8b..75c3aac8b 100644 --- a/ConnectionFactory.php +++ b/ConnectionFactory.php @@ -11,6 +11,7 @@ use Doctrine\DBAL\Exception\DriverException; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; +use function is_subclass_of; class ConnectionFactory { @@ -42,12 +43,20 @@ public function createConnection(array $params, Configuration $config = null, Ev $this->initializeTypes(); } - $connection = DriverManager::getConnection($params, $config, $eventManager); - if (! isset($params['pdo']) && ! isset($params['charset'])) { - $params = $connection->getParams(); - $params['charset'] = 'utf8'; - $driver = $connection->getDriver(); + $wrapperClass = Connection::class; + if (isset($params['wrapperClass'])) { + if (! is_subclass_of($params['wrapperClass'], $wrapperClass)) { + throw DBALException::invalidWrapperClass($params['wrapperClass']); + } + + $wrapperClass = $params['wrapperClass']; + unset($params['wrapperClass']); + } + + $connection = DriverManager::getConnection($params, $config, $eventManager); + $params = $connection->getParams(); + $driver = $connection->getDriver(); if ($driver instanceof AbstractMySQLDriver) { $params['charset'] = 'utf8mb4'; @@ -55,9 +64,13 @@ public function createConnection(array $params, Configuration $config = null, Ev if (! isset($params['defaultTableOptions']['collate'])) { $params['defaultTableOptions']['collate'] = 'utf8mb4_unicode_ci'; } + } else { + $params['charset'] = 'utf8'; } - $connection = new $connection($params, $driver, $connection->getConfiguration(), $connection->getEventManager()); + $connection = new $wrapperClass($params, $driver, $config, $eventManager); + } else { + $connection = DriverManager::getConnection($params, $config, $eventManager); } if (! empty($mappingTypes)) {