From 7f5277f3e01d153a9065bc6768f509a56271a8e9 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 8 Aug 2017 20:10:02 -0700 Subject: [PATCH] Using LookupTable. --- .../RSDatabase/DatabaseLookupTable.swift | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift b/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift index 3e98cbd12..b907d9b5b 100644 --- a/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift +++ b/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift @@ -48,16 +48,16 @@ public final class DatabaseLookupTable { } } - if !foreignIDsToFetchFromDatabase.isEmpty { - if let resultSet = database.rs_selectRowsWhereKey(foreignKey, inValues: Array(foreignIDsToLookup), tableName: name) { - lookupValues.formUnion(lookupValuesWithResultSet(resultSet)) - } + // Fetch from database. + if let fetchedLookupValues = fetchLookupValues(foreignIDsToFetchFromDatabase, database) { + lookupValues.formUnion(fetchedLookupValues) } + // Maintain cache. cacheNotFoundForeignIDs(lookupValues, foreignIDsToFetchFromDatabase) - cache.addLookupValues(lookupValues) + cache.addLookupValues(fetchedLookupValues) - return lookupTableDictionary(with: lookupValues) + return LookupTable(lookupValues: lookupValues) } public func attachRelationships(to objects: [DatabaseObject], table: DatabaseTable, lookupTableDictionary: LookupTableDictionary, relationshipName: String, database: FMDatabase) { @@ -115,6 +115,14 @@ public final class DatabaseLookupTable { private extension DatabaseLookupTable { + func fetchLookupValues(_ foreignIDs: Set, _ database: FMDatabase) -> Set? { + + guard !foreignIDs.isEmpty, let resultSet = database.rs_selectRowsWhereKey(foreignKey, inValues: Array(foreignIDsToLookup), tableName: name) else { + return nil + } + return lookupValuesWithResultSet(resultSet) + } + func addToLookupTableDictionary(_ lookupValues: Set, _ table: inout LookupTableDictionary) { for lookupValue in lookupValues { @@ -153,7 +161,7 @@ private extension DatabaseLookupTable { } } - cache.removeLookupValuesWithForeignIDs(foreignIDsToRemove) + cache.removeLookupValuesForForeignIDs(foreignIDsToRemove) } func lookupValuesWithResultSet(_ resultSet: FMResultSet) -> Set { @@ -196,7 +204,7 @@ final class LookupTable { addLookupValuesToDictionary(values) } - func removeLookupValuesWithForeignIDs(_ foreignIDs: Set) { + func removeLookupValuesForForeignIDs(_ foreignIDs: Set) { for foreignID in foreignIDs { self[foreignID] = nil