1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* This file is part of Cycle Database package. |
5
|
|
|
* |
6
|
|
|
* For the full copyright and license information, please view the LICENSE |
7
|
|
|
* file that was distributed with this source code. |
8
|
|
|
*/ |
9
|
|
|
|
10
|
|
|
declare(strict_types=1); |
11
|
|
|
|
12
|
|
|
namespace Cycle\Database\Config\SQLServer; |
13
|
|
|
|
14
|
|
|
use Cycle\Database\Config\ProvidesSourceString; |
15
|
|
|
use Cycle\Database\Config\PDOConnectionConfig; |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* @psalm-type IsolationLevelType = \PDO::SQLSRV_TXN_* |
19
|
|
|
* |
20
|
|
|
* @psalm-import-type PDOFlag from PDOConnectionConfig |
21
|
|
|
*/ |
22
|
|
|
class TcpConnectionConfig extends ConnectionConfig implements ProvidesSourceString |
23
|
|
|
{ |
24
|
|
|
/** |
25
|
|
|
* @var ?positive-int |
|
|
|
|
26
|
|
|
*/ |
27
|
|
|
public ?int $port = null; |
28
|
|
|
|
29
|
|
|
/** |
30
|
|
|
* @param non-empty-string $database The name of the database. |
|
|
|
|
31
|
|
|
* @param non-empty-string $host Database connection host. |
32
|
|
|
* @param numeric-string|positive-int|null $port Database connection port. |
33
|
|
|
* @param non-empty-string|null $app The application name used in tracing. |
34
|
|
|
* @param bool|null $pooling Specifies whether the connection is assigned from a |
35
|
|
|
* connection pool ({@see true}) or not ({@see false}). |
36
|
|
|
* @param bool|null $encrypt Specifies whether the communication with SQL Server |
37
|
|
|
* is encrypted ({@see true}) or unencrypted ({@see false}). |
38
|
|
|
* @param non-empty-string|null $failover Specifies the server and instance of the database's |
39
|
|
|
* mirror (if enabled and configured) to use when the primary server is unavailable. |
40
|
|
|
* @param int|null $timeout Specifies the number of seconds to wait before failing the connection attempt. |
41
|
|
|
* @param bool|null $mars Disables or explicitly enables support for Multiple Active Result Sets (MARS). |
42
|
|
|
* @param bool|null $quoted Specifies whether to use SQL-92 rules for quoted |
43
|
|
|
* identifiers ({@see true}) or to use legacy Transact-SQL rules ({@see false}). |
44
|
|
|
* @param non-empty-string|null $traceFile Specifies the path for the file used for trace data. |
45
|
|
|
* @param bool|null $trace Specifies whether ODBC tracing is enabled ({@see true}) or |
46
|
|
|
* disabled ({@see false}) for the connection being established. |
47
|
|
|
* @param IsolationLevelType|null $isolation Specifies the transaction isolation level. |
48
|
|
|
* The accepted values for this option are: |
49
|
|
|
* - {@see \PDO::SQLSRV_TXN_READ_UNCOMMITTED} |
50
|
|
|
* - {@see \PDO::SQLSRV_TXN_READ_COMMITTED} |
51
|
|
|
* - {@see \PDO::SQLSRV_TXN_REPEATABLE_READ} |
52
|
|
|
* - {@see \PDO::SQLSRV_TXN_SNAPSHOT} |
53
|
|
|
* - {@see \PDO::SQLSRV_TXN_SERIALIZABLE} |
54
|
|
|
* @param bool|null $trustServerCertificate Specifies whether the client should |
55
|
|
|
* trust ({@see true}) or reject ({@see false}) a self-signed server certificate. |
56
|
|
|
* @param non-empty-string|null $wsid Specifies the name of the computer for tracing. |
57
|
|
|
* @param non-empty-string|null $user |
58
|
|
|
* @param non-empty-string|null $password |
59
|
|
|
*/ |
60
|
|
|
public function __construct( |
61
|
|
|
public string $database, |
62
|
|
|
public string $host = 'localhost', |
63
|
|
|
int|string|null $port = null, |
64
|
|
|
public ?string $app = null, |
65
|
|
|
public ?bool $pooling = null, |
66
|
|
|
public ?bool $encrypt = null, |
67
|
|
|
public ?string $failover = null, |
68
|
|
|
public ?int $timeout = null, |
69
|
|
|
public ?bool $mars = null, |
70
|
|
|
public ?bool $quoted = null, |
71
|
|
|
public ?string $traceFile = null, |
72
|
|
|
public ?bool $trace = null, |
73
|
|
|
public ?int $isolation = null, |
74
|
|
|
public ?bool $trustServerCertificate = null, |
75
|
|
|
public ?string $wsid = null, |
76
|
|
|
?string $user = null, |
77
|
|
|
?string $password = null, |
78
|
|
|
array $options = [], |
79
|
|
|
) { |
80
|
|
|
$this->port = $port !== null ? (int) $port : null; |
81
|
2 |
|
|
82
|
|
|
parent::__construct($user, $password, $options); |
83
|
2 |
|
} |
84
|
|
|
|
85
|
|
|
public function getSourceString(): string |
86
|
|
|
{ |
87
|
|
|
return $this->database; |
88
|
|
|
} |
89
|
|
|
|
90
|
|
|
/** |
91
|
|
|
* Returns the SQL Server specific PDO DataSourceName, that looks like: |
92
|
|
|
* <code> |
93
|
|
|
* sqlsrv:Server=localhost,1521;Database=dbname |
94
|
6 |
|
* </code> |
95
|
|
|
* |
96
|
6 |
|
* {@inheritDoc} |
97
|
6 |
|
*/ |
98
|
6 |
|
public function getDsn(): string |
99
|
6 |
|
{ |
100
|
6 |
|
$config = [ |
101
|
6 |
|
'APP' => $this->app, |
102
|
6 |
|
'ConnectionPooling' => $this->pooling, |
103
|
6 |
|
'Database' => $this->database, |
104
|
6 |
|
'Encrypt' => $this->encrypt, |
105
|
6 |
|
'Failover_Partner' => $this->failover, |
106
|
6 |
|
'LoginTimeout' => $this->timeout, |
107
|
6 |
|
'MultipleActiveResultSets' => $this->mars, |
108
|
6 |
|
'QuotedId' => $this->quoted, |
109
|
6 |
|
'Server' => \implode(',', [$this->host, $this->port]), |
110
|
6 |
|
'TraceFile' => $this->traceFile, |
111
|
|
|
'TraceOn' => $this->trace, |
112
|
|
|
'TransactionIsolation' => $this->isolation, |
113
|
6 |
|
'TrustServerCertificate' => $this->trustServerCertificate, |
114
|
|
|
'WSID' => $this->wsid, |
115
|
|
|
]; |
116
|
|
|
|
117
|
|
|
return \sprintf('%s:%s', $this->getName(), $this->dsn($config)); |
118
|
|
|
} |
119
|
|
|
} |
120
|
|
|
|