diff --git a/LeStorage/StoreCenter.swift b/LeStorage/StoreCenter.swift index d85ee98..13df1bf 100644 --- a/LeStorage/StoreCenter.swift +++ b/LeStorage/StoreCenter.swift @@ -813,7 +813,7 @@ public class StoreCenter { self._deleteLogs.addOrUpdate(instance: dataLog) } - func relationshipStore(instance: T, relationship: Relationship) -> Store? { + func relationshipStore(instance: T, relationship: Relationship) -> Store? { switch relationship.storeLookup { case .main: return Store.main case .child: return self._storeLibrary[instance.stringId] @@ -821,9 +821,21 @@ public class StoreCenter { } } - func isReferenced(instance: T) -> Bool { + func hasDirectReference(instance: T, relationshipType: S.Type, relationship: Relationship) -> Bool { + if let referenceId = instance[keyPath: relationship.keyPath] as? S.ID, let store = self.relationshipStore(instance: instance, relationship: relationship) { + let instance: S? = store.findById(referenceId) + return instance != nil + } + return false + } + + func isReferenced(instance: T) -> Bool { let relationships = T.relationships() for relationship in relationships { + if self.hasDirectReference(instance: instance, relationshipType: relationship.type, relationship: relationship) { + return true + } + if let store = self.relationshipStore(instance: instance, relationship: relationship) { if store.isReferenced(collectionType: relationship.type, type: T.self, id: instance.stringId) { return true diff --git a/LeStorage/StoredCollection.swift b/LeStorage/StoredCollection.swift index f5edc96..a472a44 100644 --- a/LeStorage/StoredCollection.swift +++ b/LeStorage/StoredCollection.swift @@ -472,7 +472,7 @@ public class StoredCollection: SomeCollection { guard let manager = self.pendingOperationManager, manager.items.isNotEmpty else { return } - Logger.log(">>> Merge pending: \(manager.items.count)") + Logger.log(">>> Merge pending \(manager.typeName): \(manager.items.count)") for item in manager.items { let data = item.data switch item.method {