Skip to content

Commit 8f6d4fa

Browse files
authored
add ELGCP.database (vapor#165)
1 parent ab30b90 commit 8f6d4fa

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

Sources/PostgresKit/ConnectionPool+Postgres.swift

+28-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,40 @@
1+
extension EventLoopGroupConnectionPool where Source == PostgresConnectionSource {
2+
public func database(logger: Logger) -> PostgresDatabase {
3+
_EventLoopGroupConnectionPoolPostgresDatabase(pool: self, logger: logger)
4+
}
5+
}
6+
7+
private struct _EventLoopGroupConnectionPoolPostgresDatabase {
8+
let pool: EventLoopGroupConnectionPool<PostgresConnectionSource>
9+
let logger: Logger
10+
}
11+
12+
extension _EventLoopGroupConnectionPoolPostgresDatabase: PostgresDatabase {
13+
var eventLoop: EventLoop { self.pool.eventLoopGroup.next() }
14+
15+
func send(_ request: PostgresRequest, logger: Logger) -> EventLoopFuture<Void> {
16+
self.pool.withConnection(logger: logger) {
17+
$0.send(request, logger: logger)
18+
}
19+
}
20+
21+
func withConnection<T>(_ closure: @escaping (PostgresConnection) -> EventLoopFuture<T>) -> EventLoopFuture<T> {
22+
self.pool.withConnection(logger: self.logger, closure)
23+
}
24+
}
25+
126
extension EventLoopConnectionPool where Source == PostgresConnectionSource {
227
public func database(logger: Logger) -> PostgresDatabase {
3-
_ConnectionPoolPostgresDatabase(pool: self, logger: logger)
28+
_EventLoopConnectionPoolPostgresDatabase(pool: self, logger: logger)
429
}
530
}
631

7-
private struct _ConnectionPoolPostgresDatabase {
32+
private struct _EventLoopConnectionPoolPostgresDatabase {
833
let pool: EventLoopConnectionPool<PostgresConnectionSource>
934
let logger: Logger
1035
}
1136

12-
extension _ConnectionPoolPostgresDatabase: PostgresDatabase {
37+
extension _EventLoopConnectionPoolPostgresDatabase: PostgresDatabase {
1338
var eventLoop: EventLoop { self.pool.eventLoop }
1439

1540
func send(_ request: PostgresRequest, logger: Logger) -> EventLoopFuture<Void> {

Tests/PostgresKitTests/PostgresKitTests.swift

+15
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,21 @@ class PostgresKitTests: XCTestCase {
123123
XCTAssertEqual(test.bar, nil)
124124
XCTAssertEqual(test.baz, "baz")
125125
}
126+
127+
func testEventLoopGroupSQL() throws {
128+
let source = PostgresConnectionSource(configuration: .init(
129+
hostname: hostname,
130+
username: "vapor_username",
131+
password: "vapor_password",
132+
database: "vapor_database"
133+
))
134+
let pool = EventLoopGroupConnectionPool(source: source, on: self.eventLoopGroup)
135+
defer { pool.shutdown() }
136+
let db = pool.database(logger: .init(label: "test")).sql()
137+
138+
let rows = try db.raw("SELECT version();").all().wait()
139+
print(rows)
140+
}
126141

127142
func testEnum() throws {
128143
try self.benchmark.testEnum()

0 commit comments

Comments
 (0)