Failed Conditions
Pull Request — develop (#3525)
by Jonathan
12:46
created

Driver::getConnectionOptionsDsn()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

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