diff --git a/MastoSearchCore/Sources/MastoSearchCore/DatabaseController.swift b/MastoSearchCore/Sources/MastoSearchCore/DatabaseController.swift index f3d99c4..fb623d4 100644 --- a/MastoSearchCore/Sources/MastoSearchCore/DatabaseController.swift +++ b/MastoSearchCore/Sources/MastoSearchCore/DatabaseController.swift @@ -131,7 +131,17 @@ public class DatabaseController { queue.inDatabase { db in let sortKey = sortDescriptor?.key ?? "rank" let asc = sortDescriptor?.ascending == false ? "DESC" : "ASC" - let results = try! db.executeQuery("SELECT * FROM statuses_fts WHERE statuses_fts match ? ORDER BY \(sortKey) \(asc)", values: [query as NSString]) + let sql: String + let queryValue: String + if let match = query.wholeMatch(of: #/"(.+)"/#) { + sql = "SELECT * FROM statuses WHERE status_content || ' ' || coalesce(summary, '') LIKE ? ESCAPE '\\' ORDER BY \(sortKey) \(asc)" + let escaped = match.output.1.replacing("%", with: "\\%").replacing("_", with: "\\_") + queryValue = "%\(escaped)%" + } else { + sql = "SELECT * FROM statuses_fts WHERE statuses_fts match ? ORDER BY \(sortKey) \(asc)" + queryValue = query + } + let results = try! db.executeQuery(sql, values: [queryValue as NSString]) let sequence = StatusSequence(results: results) completion(sequence) }