Failed Conditions
Pull Request — 3.0.x (#3980)
by Guilherme
07:55
created

Driver::connect()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

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