Skip to content

Commit e04a2e0

Browse files
committed
add parameterized encodable test
1 parent 69dcbee commit e04a2e0

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

Sources/PostgreSQL/Client/PostgreSQLClient+ParamaterizedQuery.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,27 @@ extension PostgreSQLClient {
7474
}
7575
}
7676
}
77+
78+
/// MARK: Codable
79+
80+
extension PostgreSQLClient {
81+
/// Sends a parameterized PostgreSQL query command, collecting the parsed results.
82+
public func parameterizedQuery(
83+
_ string: String,
84+
encoding parameters: [Encodable]
85+
) throws -> Future<[[String: PostgreSQLData]]> {
86+
let parameters = try parameters.map { try PostgreSQLDataEncoder().encode($0) }
87+
return try parameterizedQuery(string, parameters)
88+
}
89+
90+
/// Sends a parameterized PostgreSQL query command, returning the parsed results to
91+
/// the supplied closure.
92+
public func parameterizedQuery(
93+
_ string: String,
94+
encoding parameters: [Encodable],
95+
onRow: @escaping ([String: PostgreSQLData]) -> ()
96+
) throws -> Future<Void> {
97+
let parameters = try parameters.map { try PostgreSQLDataEncoder().encode($0) }
98+
return try parameterizedQuery(string, parameters, onRow: onRow)
99+
}
100+
}

Tests/PostgreSQLTests/PostgreSQLClientTests.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ class PostgreSQLClientTests: XCTestCase {
210210
]).await(on: eventLoop)
211211
XCTAssertEqual(insertResult.count, 0)
212212

213-
let parameterizedResult = try! client.parameterizedQuery("select * from kitchen_sink").await(on: eventLoop)
213+
let parameterizedResult = try client.parameterizedQuery("select * from kitchen_sink").await(on: eventLoop)
214214
if parameterizedResult.count == 1 {
215215
let row = parameterizedResult[0]
216216
XCTAssertEqual(row["smallint"], .int16(1))
@@ -230,12 +230,29 @@ class PostgreSQLClientTests: XCTestCase {
230230
}
231231
}
232232

233+
func testParameterizedEncodable() throws {
234+
let (client, eventLoop) = try PostgreSQLClient.makeTest()
235+
_ = try client.query("drop table if exists foo;").await(on: eventLoop)
236+
let createResult = try client.query("create table foo (fooid integer);").await(on: eventLoop)
237+
XCTAssertEqual(createResult.count, 0)
238+
let insertResult = try client.parameterizedQuery("insert into foo values ($1);", encoding: [Int(123)]).await(on: eventLoop)
239+
XCTAssertEqual(insertResult.count, 0)
240+
let parameterizedResult = try client.parameterizedQuery("select * from foo").await(on: eventLoop)
241+
if parameterizedResult.count == 1 {
242+
let row = parameterizedResult[0]
243+
XCTAssertEqual(row["fooid"], .int32(123))
244+
} else {
245+
XCTFail("parameterized result count is: \(parameterizedResult.count)")
246+
}
247+
}
248+
233249
static var allTests = [
234250
("testVersion", testVersion),
235251
("testSelectTypes", testSelectTypes),
236252
("testParse", testParse),
237253
("testTypes", testTypes),
238254
("testParameterizedTypes", testParameterizedTypes),
255+
("testParameterizedEncodable", testParameterizedEncodable),
239256
]
240257
}
241258

0 commit comments

Comments
 (0)