Completed
Pull Request — develop (#3524)
by Jonathan
95:41 queued 92:25
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 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