summaryrefslogtreecommitdiff
path: root/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php')
-rw-r--r--vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php113
1 files changed, 113 insertions, 0 deletions
diff --git a/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php b/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php
new file mode 100644
index 0000000..a267e84
--- /dev/null
+++ b/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php
@@ -0,0 +1,113 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\DBAL\Driver\PDO\PgSQL;
6
7use Doctrine\DBAL\Driver\AbstractPostgreSQLDriver;
8use Doctrine\DBAL\Driver\PDO\Connection;
9use Doctrine\DBAL\Driver\PDO\Exception;
10use PDO;
11use PDOException;
12use SensitiveParameter;
13
14final class Driver extends AbstractPostgreSQLDriver
15{
16 /**
17 * {@inheritDoc}
18 */
19 public function connect(
20 #[SensitiveParameter]
21 array $params,
22 ): Connection {
23 $driverOptions = $params['driverOptions'] ?? [];
24
25 if (! empty($params['persistent'])) {
26 $driverOptions[PDO::ATTR_PERSISTENT] = true;
27 }
28
29 $safeParams = $params;
30 unset($safeParams['password']);
31
32 try {
33 $pdo = new PDO(
34 $this->constructPdoDsn($safeParams),
35 $params['user'] ?? '',
36 $params['password'] ?? '',
37 $driverOptions,
38 );
39 } catch (PDOException $exception) {
40 throw Exception::new($exception);
41 }
42
43 if (
44 ! isset($driverOptions[PDO::PGSQL_ATTR_DISABLE_PREPARES])
45 || $driverOptions[PDO::PGSQL_ATTR_DISABLE_PREPARES] === true
46 ) {
47 $pdo->setAttribute(PDO::PGSQL_ATTR_DISABLE_PREPARES, true);
48 }
49
50 $connection = new Connection($pdo);
51
52 /* defining client_encoding via SET NAMES to avoid inconsistent DSN support
53 * - passing client_encoding via the 'options' param breaks pgbouncer support
54 */
55 if (isset($params['charset'])) {
56 $connection->exec('SET NAMES \'' . $params['charset'] . '\'');
57 }
58
59 return $connection;
60 }
61
62 /**
63 * Constructs the Postgres PDO DSN.
64 *
65 * @param array<string, mixed> $params
66 */
67 private function constructPdoDsn(array $params): string
68 {
69 $dsn = 'pgsql:';
70
71 if (isset($params['host']) && $params['host'] !== '') {
72 $dsn .= 'host=' . $params['host'] . ';';
73 }
74
75 if (isset($params['port']) && $params['port'] !== '') {
76 $dsn .= 'port=' . $params['port'] . ';';
77 }
78
79 if (isset($params['dbname'])) {
80 $dsn .= 'dbname=' . $params['dbname'] . ';';
81 }
82
83 if (isset($params['sslmode'])) {
84 $dsn .= 'sslmode=' . $params['sslmode'] . ';';
85 }
86
87 if (isset($params['sslrootcert'])) {
88 $dsn .= 'sslrootcert=' . $params['sslrootcert'] . ';';
89 }
90
91 if (isset($params['sslcert'])) {
92 $dsn .= 'sslcert=' . $params['sslcert'] . ';';
93 }
94
95 if (isset($params['sslkey'])) {
96 $dsn .= 'sslkey=' . $params['sslkey'] . ';';
97 }
98
99 if (isset($params['sslcrl'])) {
100 $dsn .= 'sslcrl=' . $params['sslcrl'] . ';';
101 }
102
103 if (isset($params['application_name'])) {
104 $dsn .= 'application_name=' . $params['application_name'] . ';';
105 }
106
107 if (isset($params['gssencmode'])) {
108 $dsn .= 'gssencmode=' . $params['gssencmode'] . ';';
109 }
110
111 return $dsn;
112 }
113}