Skip to content

Commit c8a2a7e

Browse files
committed
Use bindings for advanced fetchMessages queries
1 parent 713fc81 commit c8a2a7e

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

AirMessage/Database/DatabaseManager.swift

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ class DatabaseManager {
237237
- Returns: The executed statement
238238
- Throws: SQL execution errors
239239
*/
240-
private func fetchMessages(using db: Connection, where queryWhere: String? = nil, sort querySort: String? = nil, limit queryLimit: Int? = nil) throws -> Statement {
240+
private func fetchMessages(using db: Connection, where queryWhere: String? = nil, sort querySort: String? = nil, limit queryLimit: Int? = nil, bindings queryBindings: [Binding?] = []) throws -> Statement {
241241
var rows: [String] = [
242242
"message.ROWID",
243243
"message.guid",
@@ -285,7 +285,7 @@ class DatabaseManager {
285285
rows.map { "\($0) AS \"\($0)\"" }.joined(separator: ", "),
286286
extraClauses.joined(separator: " ")
287287
)
288-
return try db.prepare(query)
288+
return try db.prepare(query, queryBindings)
289289
}
290290

291291
//MARK: Requests
@@ -300,7 +300,7 @@ class DatabaseManager {
300300
let timeLower = convertDBTime(fromUNIX: timeLowerUNIX)
301301
let timeUpper = convertDBTime(fromUNIX: timeUpperUNIX)
302302

303-
let stmt = try fetchMessages(using: dbConnection, where: "message.date > \(timeLower) AND message.date < \(timeUpper)")
303+
let stmt = try fetchMessages(using: dbConnection, where: "message.date > ? AND message.date < ?", bindings: [timeLower, timeUpper])
304304
let indices = DatabaseConverter.makeColumnIndexDict(stmt.columnNames)
305305
let rows = try stmt.map { row in
306306
try DatabaseConverter.processMessageRow(row, withIndices: indices, ofDB: dbConnection)
@@ -314,7 +314,7 @@ class DatabaseManager {
314314
public func fetchGrouping(fromID idLower: Int64) throws -> DBFetchGrouping {
315315
guard let dbConnection = dbConnection else { throw DatabaseDisconnectedError() }
316316

317-
let stmt = try fetchMessages(using: dbConnection, where: "message.ROWID > \(idLower)")
317+
let stmt = try fetchMessages(using: dbConnection, where: "message.ROWID > ?", bindings: [idLower])
318318
let indices = DatabaseConverter.makeColumnIndexDict(stmt.columnNames)
319319
let rows = try stmt.map { row in
320320
try DatabaseConverter.processMessageRow(row, withIndices: indices, ofDB: dbConnection)
@@ -475,7 +475,7 @@ class DatabaseManager {
475475
if let timeLowerUNIX = timeLowerUNIX {
476476
let timeLower = convertDBTime(fromUNIX: timeLowerUNIX)
477477

478-
stmt = try fetchMessages(using: dbConnection, where: "message.date > \(timeLower)")
478+
stmt = try fetchMessages(using: dbConnection, where: "message.date > ?", bindings: [timeLower])
479479
} else {
480480
stmt = try fetchMessages(using: dbConnection)
481481
}
@@ -556,11 +556,19 @@ class DatabaseManager {
556556
public func fetchLiteThread(chatGUID: String, before: Int64?) throws -> [ConversationItem] {
557557
guard let dbConnection = dbConnection else { throw DatabaseDisconnectedError() }
558558

559+
var fetchWhere: String = "chat.GUID = ?"
560+
var fetchBindings: [Binding?] = [chatGUID]
561+
if let before = before {
562+
fetchWhere += " AND message.ROWID < ?"
563+
fetchBindings.append(before)
564+
}
565+
559566
let stmt = try fetchMessages(
560567
using: dbConnection,
561-
where: "chat.GUID = \"\(chatGUID)\"" + (before.map { " AND message.ROWID < \($0)" } ?? ""),
568+
where: fetchWhere,
562569
sort: "message.ROWID DESC",
563-
limit: 24
570+
limit: 24,
571+
bindings: fetchBindings
564572
)
565573
let indices = DatabaseConverter.makeColumnIndexDict(stmt.columnNames)
566574

0 commit comments

Comments
 (0)