From c76d42b42f0a61dc0810537b98bd70ecfb369a87 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 30 Jul 2017 11:55:46 -0700 Subject: [PATCH] Make progress on getting StatusTable to compile. --- Frameworks/Database/StatusesTable.swift | 30 +++++++------------ Frameworks/RSDatabase/DatabaseTable.swift | 7 ++++- .../RSDatabase/FMDatabase+RSExtras.h | 8 ++--- 3 files changed, 21 insertions(+), 24 deletions(-) diff --git a/Frameworks/Database/StatusesTable.swift b/Frameworks/Database/StatusesTable.swift index 7b5c7da3e..65bf1b64a 100644 --- a/Frameworks/Database/StatusesTable.swift +++ b/Frameworks/Database/StatusesTable.swift @@ -16,7 +16,7 @@ final class StatusesTable: DatabaseTable { let name: String let queue: RSDatabaseQueue - let cache = ObjectCache(keyPathForID: \ArticleStatus.articleID) + private let cache = ObjectCache(keyPathForID: \ArticleStatus.articleID) init(name: String, queue: RSDatabaseQueue) { @@ -35,7 +35,7 @@ final class StatusesTable: DatabaseTable { articles.forEach { (oneArticle) in - if let cachedStatus = cache[oneArticle.articleID] { + if let cachedStatus = cache[oneArticle.databaseID] { oneArticle.status = cachedStatus } else if let oneArticleStatus = oneArticle.status { @@ -59,7 +59,7 @@ final class StatusesTable: DatabaseTable { DispatchQueue.main.async { - cache.addObjectsNotCached(Array(statuses)) + self.cache.addObjectsNotCached(Array(statuses)) let newArticleIDs = self.articleIDsMissingStatuses(articleIDs) self.createStatusForNewArticleIDs(newArticleIDs) @@ -79,11 +79,7 @@ final class StatusesTable: DatabaseTable { } } -// MARK: - Private - -private let statusesTableName = "statuses" - -private extension StatusesManager { +private extension StatusesTable { // MARK: Marking @@ -110,15 +106,11 @@ private extension StatusesManager { func fetchStatusesForArticleIDs(_ articleIDs: Set, database: FMDatabase) -> Set { - guard !articleIDs.isEmpty else { - return Set() + if !articleIDs.isEmpty, let resultSet = selectRowsWhere(key: DatabaseKey.articleID, inValues: Array(articleIDs), in: database) { + return articleStatusesWithResultSet(resultSet) } - guard let resultSet = database.rs_selectRowsWhereKey(DatabaseKey.articleID, inValues: Array(articleIDs), tableName: statusesTableName) else { - return Set() - } - - return articleStatusesWithResultSet(resultSet) + return Set() } func articleStatusesWithResultSet(_ resultSet: FMResultSet) -> Set { @@ -139,12 +131,12 @@ private extension StatusesManager { func saveStatuses(_ statuses: Set) { let statusArray = statuses.map { $0.databaseDictionary() } - insertRows(statusArray, insertType: .insertOrIgnore) + insertRows(statusArray, insertType: .orIgnore) } - private func updateArticleStatusesInDatabase(_ articleIDs: Set, statusKey: ArticleStatusKey, flag: Bool) { + private func updateArticleStatusesInDatabase(_ articleIDs: Set, statusKey: String, flag: Bool) { - updateRowsWithValue(NSNumber(value: flag), valueKey: statusKey.rawValue, whereKey: DatabaseKey.articleID, matches: Array(articleIDs)) + updateRowsWithValue(NSNumber(value: flag), valueKey: statusKey, whereKey: DatabaseKey.articleID, matches: Array(articleIDs)) } // MARK: Creating @@ -152,7 +144,7 @@ private extension StatusesManager { func createStatusForNewArticleIDs(_ articleIDs: Set) { let now = Date() - let statuses = articleIDs.map { (oneArticleID) -> LocalArticleStatus in + let statuses = articleIDs.map { (oneArticleID) -> ArticleStatus in return ArticleStatus(articleID: oneArticleID, read: false, starred: false, userDeleted: false, dateArrived: now) } cache.addObjectsNotCached(statuses) diff --git a/Frameworks/RSDatabase/DatabaseTable.swift b/Frameworks/RSDatabase/DatabaseTable.swift index ce4f29585..47e201ab5 100644 --- a/Frameworks/RSDatabase/DatabaseTable.swift +++ b/Frameworks/RSDatabase/DatabaseTable.swift @@ -16,7 +16,7 @@ public protocol DatabaseTable { init(name: String, queue: RSDatabaseQueue) } -extension DatabaseTable { +public extension DatabaseTable { // MARK: Fetching @@ -25,6 +25,11 @@ extension DatabaseTable { return database.rs_selectRowsWhereKey(key, equalsValue: value, tableName: name) } + public func selectRowsWhere(key: String, inValues values: [Any], in database: FMDatabase) -> FMResultSet? { + + return database.rs_selectRowsWhereKey(key, inValues: values, tableName: name) + } + // MARK: Deleting public func deleteRowsWhere(key: String, equalsAnyValue values: [Any], in database: FMDatabase) { diff --git a/Frameworks/RSDatabase/RSDatabase/FMDatabase+RSExtras.h b/Frameworks/RSDatabase/RSDatabase/FMDatabase+RSExtras.h index 13499faac..5e502da4b 100755 --- a/Frameworks/RSDatabase/RSDatabase/FMDatabase+RSExtras.h +++ b/Frameworks/RSDatabase/RSDatabase/FMDatabase+RSExtras.h @@ -10,11 +10,11 @@ @import Foundation; -typedef enum _RSDatabaseInsertType { - RSDatabaseInsert, - RSDatabaseInsertOrReplace, +typedef NS_ENUM(NSInteger, RSDatabaseInsertType) { + RSDatabaseInsertNormal, + RSDatabaseInsertOrReplace, RSDatabaseInsertOrIgnore -} RSDatabaseInsertType; +}; NS_ASSUME_NONNULL_BEGIN