Make attachments use a DatabaseLookupTable.

This commit is contained in:
Brent Simmons
2017-08-20 17:46:15 -07:00
parent 213b1d7a6f
commit c164c29cde
13 changed files with 77 additions and 320 deletions

View File

@@ -11,13 +11,32 @@ import Foundation
public protocol DatabaseTable {
var name: String { get }
var databaseIDKey: String { get}
func fetchObjectsWithIDs(_ databaseIDs: Set<String>, in database: FMDatabase) -> [DatabaseObject]
func objectsWithResultSet(_ resultSet: FMResultSet) -> [DatabaseObject]
func objectWithRow(_ row: FMResultSet) -> DatabaseObject?
func save(_ objects: [DatabaseObject], in database: FMDatabase)
}
public extension DatabaseTable {
// MARK: Default implementations
func fetchObjectsWithIDs(_ databaseIDs: Set<String>, in database: FMDatabase) -> [DatabaseObject] {
guard let resultSet = selectRowsWhere(key: databaseIDKey, inValues: Array(databaseIDs), in: database) else {
return [DatabaseObject]()
}
return objectsWithResultSet(resultSet)
}
func objectsWithResultSet(_ resultSet: FMResultSet) -> [DatabaseObject] {
return resultSet.flatMap(objectWithRow)
}
// MARK: Fetching
public func selectRowsWhere(key: String, equals value: Any, in database: FMDatabase) -> FMResultSet? {

View File

@@ -31,7 +31,7 @@ public final class DatabaseLookupTable {
self.cache = DatabaseLookupTableCache(relationshipName)
}
public func attachRelationships(to objects: [DatabaseObject], in database: FMDatabase) {
public func attachRelatedObjects(to objects: [DatabaseObject], in database: FMDatabase) {
let objectsThatMayHaveRelatedObjects = cache.objectsThatMayHaveRelatedObjects(objects)
if objectsThatMayHaveRelatedObjects.isEmpty {
@@ -54,7 +54,7 @@ public final class DatabaseLookupTable {
cache.update(with: objectsNeedingFetching)
}
public func saveRelationships(for objects: [DatabaseObject], in database: FMDatabase) {
public func saveRelatedObjects(for objects: [DatabaseObject], in database: FMDatabase) {
var objectsWithNoRelationships = [DatabaseObject]()
var objectsWithRelationships = [DatabaseObject]()