Add database query and assertion to check for missing statuses. Only runs when running a DEBUG build.

Also: remove unused function existingStatusesForArticleIDs.
This commit is contained in:
Brent Simmons 2021-01-07 20:31:19 -08:00
parent 5a5d8ee01c
commit 57e63c1385

View File

@ -29,6 +29,18 @@ final class StatusesTable: DatabaseTable {
// MARK: - Creating/Updating
func ensureStatusesForArticleIDs(_ articleIDs: Set<String>, _ read: Bool, _ database: FMDatabase) -> ([String: ArticleStatus], Set<String>) {
#if DEBUG
// Check for missing statuses  this asserts that all the passed-in articleIDs exist in the statuses table.
defer {
if let resultSet = self.selectRowsWhere(key: DatabaseKey.articleID, inValues: Array(articleIDs), in: database) {
let fetchedStatuses = resultSet.mapToSet(statusWithRow)
let fetchedArticleIDs = Set(fetchedStatuses.map{ $0.articleID })
assert(fetchedArticleIDs == articleIDs)
}
}
#endif
// Check cache.
let articleIDsMissingCachedStatus = articleIDsWithNoCachedStatus(articleIDs)
if articleIDsMissingCachedStatus.isEmpty {
@ -43,23 +55,10 @@ final class StatusesTable: DatabaseTable {
// Create new statuses.
self.createAndSaveStatusesForArticleIDs(articleIDsNeedingStatus, read, database)
}
return (statusesDictionary(articleIDs), articleIDsNeedingStatus)
}
func existingStatusesForArticleIDs(_ articleIDs: Set<String>, _ database: FMDatabase) -> [String: ArticleStatus] {
// Check cache.
let articleIDsMissingCachedStatus = articleIDsWithNoCachedStatus(articleIDs)
if articleIDsMissingCachedStatus.isEmpty {
return statusesDictionary(articleIDs)
}
// Check database.
fetchAndCacheStatusesForArticleIDs(articleIDsMissingCachedStatus, database)
return statusesDictionary(articleIDs)
}
// MARK: - Marking
@discardableResult