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
|
|
|
|