forked from vapor/postgres-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPostgresClient+SQL.swift
47 lines (40 loc) · 1.21 KB
/
PostgresClient+SQL.swift
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
import PostgresNIO
import Foundation
import SQLKit
extension PostgresDatabase {
public func sql(
encoder: PostgresDataEncoder = PostgresDataEncoder(),
decoder: PostgresDataDecoder = PostgresDataDecoder()
) -> SQLDatabase {
_PostgresSQLDatabase(database: self, encoder: encoder, decoder: decoder)
}
}
// MARK: Private
private struct _PostgresSQLDatabase {
let database: PostgresDatabase
let encoder: PostgresDataEncoder
let decoder: PostgresDataDecoder
}
extension _PostgresSQLDatabase: SQLDatabase {
var logger: Logger {
self.database.logger
}
var eventLoop: EventLoop {
self.database.eventLoop
}
var dialect: SQLDialect {
PostgresDialect()
}
func execute(sql query: SQLExpression, _ onRow: @escaping (SQLRow) -> ()) -> EventLoopFuture<Void> {
let (sql, binds) = self.serialize(query)
do {
return try self.database.query(sql, binds.map { encodable in
return try self.encoder.encode(encodable)
}) { row in
onRow(row.sql(decoder: self.decoder))
}
} catch {
return self.eventLoop.makeFailedFuture(error)
}
}
}