Repository navigation
Expand file tree
/
Copy pathConnection.php
More file actions
144 lines (117 loc) · 3.03 KB
/
Copy pathConnection.php
File metadata and controls
144 lines (117 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact [email protected]
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
namespace Hyperf\Database\PgSQL\DBAL;
use Doctrine\DBAL\Driver\Result as ResultInterface;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
use Swoole\Coroutine\PostgreSQL;
use Swoole\Coroutine\PostgreSQLStatement;
use function assert;
class Connection implements \Doctrine\DBAL\Driver\Connection
{
/**
* Create a new PDO connection instance.
*/
public function __construct(private PostgreSQL $connection)
{
}
/**
* Execute an SQL statement.
*/
public function exec(string $sql): int
{
$stmt = $this->connection->query($sql);
assert($stmt instanceof PostgreSQLStatement);
return $stmt->affectedRows();
}
/**
* Prepare a new SQL statement.
*/
public function prepare(string $sql): StatementInterface
{
$stmt = $this->connection->prepare($sql);
assert($stmt instanceof PostgreSQLStatement);
return new Statement($stmt);
}
/**
* Execute a new query against the connection.
*/
public function query(string $sql): ResultInterface
{
$stmt = $this->connection->query($sql);
assert($stmt instanceof PostgreSQLStatement);
return new Result($stmt);
}
/**
* Get the last insert ID.
*
* @param null|string $name
* @return string
*/
public function lastInsertId($name = null)
{
if ($name !== null) {
return $this->query(sprintf('SELECT CURRVAL(%s)', $this->quote($name)))->fetchOne();
}
return $this->query('SELECT LASTVAL()')->fetchOne();
}
/**
* Begin a new database transaction.
*/
public function beginTransaction(): bool
{
$this->exec('BEGIN');
return true;
}
/**
* Commit a database transaction.
*/
public function commit(): bool
{
$this->exec('COMMIT');
return true;
}
/**
* Roll back a database transaction.
*/
public function rollBack(): bool
{
$this->exec('ROLLBACK');
return true;
}
/**
* Wrap quotes around the given input.
*
* @param string $input
* @param string $type
* @return string
*/
public function quote($input, $type = ParameterType::STRING)
{
return $this->connection->escapeLiteral($input);
}
/**
* Get the server version for the connection.
*/
public function getServerVersion(): string
{
$result = $this->query('SHOW server_version');
$serverVersion = $result->fetchOne();
if ($version = strstr($serverVersion, ' ', true)) {
return $version;
}
return $serverVersion;
}
public function getNativeConnection(): PostgreSQL
{
return $this->connection;
}
}