mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-11 20:13:28 +00:00

- Squashed Pull request #1730 - Squashed Pull request #1741 - Squashed Pull request #1742 - Squash merge branch 4.0 - Squashed Pull request #1744 - Squashed Pull request #1746 - Squashed merge branch 4.0 - Squashed merge branch 4.0 - Squashed merge branch 4.0 - Squashed merge branch 4.0 - Squashed Pull request #1758 - Avoid using imagine/imagine alias as it is causing install issues - Squashed merge branch 4.0 - Squashed Pull request #1763 - Squashed merge branch 4.0 - Squash of 6 commits - Squashed merge branch 4.0 - This is a combination of 2 commits. - Squashed Pull request #1775 - Squashed Pull request #1777 - Squashed Pull request #1779 - Squashed Pull request #1780 - Squashed Pull request #1782 - Adds a Pull request template - Squased Pull request #1783 - Squash Pull request #1786 - Squashed Pull request #1796 - Squashed merge branch 4.0 - Squash Pull request #1791 - Squashed merge branch 4.0 - Squashed Pull request #1808 - Squashed Pull request #1811 - Squashed Pull request #1809
93 lines
2.0 KiB
PHP
93 lines
2.0 KiB
PHP
<?php
|
|
/*
|
|
* This file is part of Phraseanet
|
|
*
|
|
* (c) 2005-2016 Alchemy
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Alchemy\Phrasea\Core\Connection;
|
|
|
|
use Doctrine\DBAL\Connection;
|
|
use Doctrine\DBAL\DriverManager;
|
|
|
|
class ConnectionPoolManager
|
|
{
|
|
/**
|
|
* @var Connection[]
|
|
*/
|
|
private $connections = [];
|
|
|
|
public function __destruct()
|
|
{
|
|
$this->closeAll();
|
|
}
|
|
|
|
public function closeAll()
|
|
{
|
|
foreach ($this->connections as $conn) {
|
|
$conn->close();
|
|
}
|
|
}
|
|
|
|
public function opened()
|
|
{
|
|
return $this->filter(function(Connection $connection) {
|
|
return $connection->isConnected();
|
|
});
|
|
}
|
|
|
|
public function closed()
|
|
{
|
|
return $this->filter(function(Connection $connection) {
|
|
return !$connection->isConnected();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @param callable $callback
|
|
* @return Connection[]
|
|
*/
|
|
public function filter(Callable $callback)
|
|
{
|
|
return array_filter($this->connections, $callback);
|
|
}
|
|
|
|
/**
|
|
* Add a connection to the pool
|
|
*
|
|
* @param Connection $connection
|
|
*/
|
|
public function add(Connection $connection)
|
|
{
|
|
$key = md5(serialize($connection->getParams()));
|
|
if (isset($this->connections[$key]) && $connection !== $this->connections[$key]) {
|
|
throw new \InvalidArgumentException('Expects a non registered connection.');
|
|
}
|
|
$this->connections[$key] = $connection;
|
|
}
|
|
|
|
public function get(array $params)
|
|
{
|
|
$params = array_replace([
|
|
'driver' => 'pdo_mysql',
|
|
'charset' => 'UTF8',
|
|
], $params);
|
|
|
|
$key = md5(serialize($params));
|
|
|
|
if (isset($this->connections[$key])) {
|
|
return $this->connections[$key];
|
|
}
|
|
|
|
return $this->connections[$key] = DriverManager::getConnection($params);
|
|
}
|
|
|
|
public function all()
|
|
{
|
|
return $this->connections;
|
|
}
|
|
}
|