/
ConnectionFactory.php
74 lines (63 loc) · 2.1 KB
/
ConnectionFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
namespace Concrete\Core\Database\Connection;
use Concrete\Core\Application\Application;
use Concrete\Core\Database\Driver\DriverManager;
use Doctrine\DBAL\DBALException;
class ConnectionFactory
{
/** @var Application */
protected $app;
/** @var DriverManager */
protected $driver_manager;
public function __construct(Application $app, DriverManager $driver_manager)
{
$this->app = $app;
$this->driver_manager = $driver_manager;
}
public function createConnection($config)
{
$driver = $this->driver_manager->driver(array_get($config, 'driver', ''));
if (!($driver instanceof \Doctrine\DBAL\Driver)) {
$driver = $this->driver_manager->driver();
}
$params = $config;
$params['host'] = array_get($params, 'host', array_get($config, 'server'));
$params['user'] = array_get($params, 'user', array_get($config, 'username'));
if (!isset($params['driverOptions'])) {
$params['driverOptions'] = [];
}
if (defined('PDO::MYSQL_ATTR_MULTI_STATEMENTS')) {
$params['driverOptions'][\PDO::MYSQL_ATTR_MULTI_STATEMENTS] = false;
}
$params['wrapperClass'] = array_get($config, 'wrapperClass', '\Concrete\Core\Database\Connection\Connection');
unset($params['driver']);
$wrapperClass = 'Doctrine\DBAL\Connection';
if (isset($params['wrapperClass'])) {
if (is_subclass_of($params['wrapperClass'], $wrapperClass)) {
$wrapperClass = $params['wrapperClass'];
} else {
throw DBALException::invalidWrapperClass($params['wrapperClass']);
}
}
return new $wrapperClass($params, $driver);
}
/**
* @param $config
* @param $name
*
* @return \Doctrine\DBAL\Connection
*
* @throws DBALException
*/
public function make($config, $name)
{
return $this->createConnection($config);
}
/**
* @return DriverManager
*/
public function getDriverManager()
{
return $this->driver_manager;
}
}