Add serializable DB connection wrapper

[MAILPOET-2014]
This commit is contained in:
Jan Jakeš
2019-07-18 15:38:49 +02:00
committed by M. Shull
parent 68057c7cab
commit a07043cfb4
3 changed files with 34 additions and 0 deletions

View File

@ -16,6 +16,7 @@ class ConnectionFactory {
function createConnection() {
$platform_class = self::PLATFORM_CLASS;
$connection_params = [
'wrapperClass' => SerializableConnection::class,
'driver' => self::DRIVER,
'platform' => new $platform_class,
'host' => Env::$db_host,

View File

@ -0,0 +1,31 @@
<?php
namespace MailPoet\Doctrine;
use MailPoetVendor\Doctrine\Common\EventManager;
use MailPoetVendor\Doctrine\DBAL\Configuration;
use MailPoetVendor\Doctrine\DBAL\Connection;
use MailPoetVendor\Doctrine\DBAL\Driver;
class SerializableConnection extends Connection {
private $params;
private $driver;
private $config;
private $event_manager;
function __construct(array $params, Driver $driver, Configuration $config = null, EventManager $event_manager = null) {
$this->params = $params;
$this->driver = $driver;
$this->config = $config;
$this->event_manager = $event_manager;
parent::__construct($params, $driver, $config, $event_manager);
}
function __sleep() {
return ['params', 'driver', 'config', 'event_manager'];
}
function __wakeup() {
parent::__construct($this->params, $this->driver, $this->config, $this->event_manager);
}
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Config;
use MailPoet\Config\Env;
use MailPoet\Doctrine\ConnectionFactory;
use MailPoet\Doctrine\SerializableConnection;
use MailPoetVendor\Doctrine\DBAL\Driver\PDOMySql;
use MailPoetVendor\Doctrine\DBAL\Platforms\MySqlPlatform;
use PDO;
@ -13,6 +14,7 @@ class ConnectionFactoryTest extends \MailPoetTest {
$connection_factory = new ConnectionFactory();
$connection = $connection_factory->createConnection();
expect($connection)->isInstanceOf(SerializableConnection::class);
expect($connection->getWrappedConnection())->isInstanceOf(PDO::class);
expect($connection->getDriver())->isInstanceOf(PDOMySql\Driver::class);
expect($connection->getDatabasePlatform())->isInstanceOf(MySqlPlatform::class);