Completed
Pull Request — develop (#3524)
by Jonathan
95:41 queued 92:25
created

Driver   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Test Coverage

Coverage 7.69%

Importance

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