Failed Conditions
Push — master ( 94cec7...7f79d0 )
by Marco
25s queued 13s
created

Driver   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Test Coverage

Coverage 96.3%

Importance

Changes 0
Metric Value
wmc 13
eloc 26
dl 0
loc 78
ccs 26
cts 27
cp 0.963
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getName() 0 3 1
A getConnectionOptionsDsn() 0 9 2
A connect() 0 17 3
B _constructPdoDsn() 0 21 7
1
<?php
2
3
namespace Doctrine\DBAL\Driver\PDOSqlsrv;
4
5
use Doctrine\DBAL\Driver\AbstractSQLServerDriver;
6
use function is_int;
7
use function sprintf;
8
9
/**
10
 * The PDO-based Sqlsrv driver.
11
 */
12
class Driver extends AbstractSQLServerDriver
13
{
14
    /**
15
     * {@inheritdoc}
16
     */
17 31
    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
18
    {
19 31
        $pdoOptions = $dsnOptions = [];
20
21 31
        foreach ($driverOptions as $option => $value) {
22 31
            if (is_int($option)) {
23 31
                $pdoOptions[$option] = $value;
24 31
            } else {
25 31
                $dsnOptions[$option] = $value;
26
            }
27
        }
28
29
        return new Connection(
30
            $this->_constructPdoDsn($params, $dsnOptions),
31
            $username,
32
            $password,
33
            $pdoOptions
34
        );
35
    }
36
37 31
    /**
38
     * Constructs the Sqlsrv PDO DSN.
39 31
     *
40
     * @param mixed[]  $params
41 31
     * @param string[] $connectionOptions
42 31
     *
43
     * @return string The DSN.
44
     */
45 31
    private function _constructPdoDsn(array $params, array $connectionOptions)
46 31
    {
47
        $dsn = 'sqlsrv:server=';
48
49 31
        if (isset($params['host'])) {
50 27
            $dsn .= $params['host'];
51
        }
52
53 31
        if (isset($params['port']) && ! empty($params['port'])) {
54
            $dsn .= ',' . $params['port'];
55
        }
56
57 31
        if (isset($params['dbname'])) {
58
            $connectionOptions['Database'] = $params['dbname'];
59
        }
60
61
        if (isset($params['MultipleActiveResultSets'])) {
62
            $connectionOptions['MultipleActiveResultSets'] = $params['MultipleActiveResultSets'] ? 'true' : 'false';
63
        }
64
65
        return $dsn . $this->getConnectionOptionsDsn($connectionOptions);
66
    }
67 31
68
    /**
69 31
     * Converts a connection options array to the DSN
70 31
     *
71
     * @param string[] $connectionOptions
72 31
     */
73 2
    private function getConnectionOptionsDsn(array $connectionOptions) : string
74 1
    {
75
        $connectionOptionsDsn = '';
76 1
77
        foreach ($connectionOptions as $paramName => $paramValue) {
78
            $connectionOptionsDsn .= sprintf(';%s=%s', $paramName, $paramValue);
79
        }
80 31
81
        return $connectionOptionsDsn;
82
    }
83
84
    /**
85
     * {@inheritdoc}
86
     */
87
    public function getName()
88 31
    {
89
        return 'pdo_sqlsrv';
90 31
    }
91
}
92