Completed
Push — master ( 9728d9...4d9a08 )
by Sergei
27s queued 16s
created

DB2Driver   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Test Coverage

Coverage 11.11%

Importance

Changes 0
Metric Value
wmc 5
eloc 16
dl 0
loc 42
ccs 3
cts 27
cp 0.1111
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A connect() 0 14 3
A buildConnectionString() 0 18 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\DBAL\Driver\IBMDB2;
6
7
use Doctrine\DBAL\Driver\AbstractDB2Driver;
8
use Doctrine\DBAL\Driver\Connection;
9
use function array_keys;
10
use function array_map;
11
use function implode;
12
use function sprintf;
13
14
/**
15
 * IBM DB2 Driver.
16
 */
17
final class DB2Driver extends AbstractDB2Driver
18
{
19
    /**
20
     * {@inheritdoc}
21
     */
22 20
    public function connect(
23
        array $params,
24
        string $username = '',
25
        string $password = '',
26
        array $driverOptions = []
27
    ) : Connection {
28 20
        if ($params['host'] !== 'localhost' && $params['host'] !== '127.0.0.1') {
29
            // if the host isn't localhost, use extended connection params
30
            $params['dbname'] = $this->buildConnectionString($params, $username, $password);
31
32
            $username = $password = '';
33
        }
34
35 20
        return new DB2Connection($params, $username, $password, $driverOptions);
36
    }
37
38
    /**
39
     * @param string[] $params
40
     */
41
    private function buildConnectionString(array $params, string $username, string $password) : string
42
    {
43
        $connectionParams = [
44
            'DRIVER'   => '{IBM DB2 ODBC DRIVER}',
45
            'DATABASE' => $params['dbname'],
46
            'HOSTNAME' => $params['host'],
47
            'PROTOCOL' => $params['protocol'] ?? 'TCPIP',
48
            'UID'      => $username,
49
            'PWD'      => $password,
50
        ];
51
52
        if (isset($params['port'])) {
53
            $connectionParams['PORT'] = $params['port'];
54
        }
55
56
        return implode(';', array_map(static function (string $key, string $value) : string {
57
            return sprintf('%s=%s', $key, $value);
58
        }, array_keys($connectionParams), $connectionParams));
59
    }
60
}
61