mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-04 04:47:52 +01:00
Using LookupTable.
This commit is contained in:
parent
2fe6b0e2a6
commit
7f5277f3e0
@ -48,16 +48,16 @@ public final class DatabaseLookupTable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !foreignIDsToFetchFromDatabase.isEmpty {
|
// Fetch from database.
|
||||||
if let resultSet = database.rs_selectRowsWhereKey(foreignKey, inValues: Array(foreignIDsToLookup), tableName: name) {
|
if let fetchedLookupValues = fetchLookupValues(foreignIDsToFetchFromDatabase, database) {
|
||||||
lookupValues.formUnion(lookupValuesWithResultSet(resultSet))
|
lookupValues.formUnion(fetchedLookupValues)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Maintain cache.
|
||||||
cacheNotFoundForeignIDs(lookupValues, foreignIDsToFetchFromDatabase)
|
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) {
|
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 {
|
private extension DatabaseLookupTable {
|
||||||
|
|
||||||
|
func fetchLookupValues(_ foreignIDs: Set<String>, _ database: FMDatabase) -> Set<LookupValue>? {
|
||||||
|
|
||||||
|
guard !foreignIDs.isEmpty, let resultSet = database.rs_selectRowsWhereKey(foreignKey, inValues: Array(foreignIDsToLookup), tableName: name) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return lookupValuesWithResultSet(resultSet)
|
||||||
|
}
|
||||||
|
|
||||||
func addToLookupTableDictionary(_ lookupValues: Set<LookupValue>, _ table: inout LookupTableDictionary) {
|
func addToLookupTableDictionary(_ lookupValues: Set<LookupValue>, _ table: inout LookupTableDictionary) {
|
||||||
|
|
||||||
for lookupValue in lookupValues {
|
for lookupValue in lookupValues {
|
||||||
@ -153,7 +161,7 @@ private extension DatabaseLookupTable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cache.removeLookupValuesWithForeignIDs(foreignIDsToRemove)
|
cache.removeLookupValuesForForeignIDs(foreignIDsToRemove)
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupValuesWithResultSet(_ resultSet: FMResultSet) -> Set<LookupValue> {
|
func lookupValuesWithResultSet(_ resultSet: FMResultSet) -> Set<LookupValue> {
|
||||||
@ -196,7 +204,7 @@ final class LookupTable {
|
|||||||
addLookupValuesToDictionary(values)
|
addLookupValuesToDictionary(values)
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeLookupValuesWithForeignIDs(_ foreignIDs: Set<String>) {
|
func removeLookupValuesForForeignIDs(_ foreignIDs: Set<String>) {
|
||||||
|
|
||||||
for foreignID in foreignIDs {
|
for foreignID in foreignIDs {
|
||||||
self[foreignID] = nil
|
self[foreignID] = nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user