performant access of relationship objectIDs for snapshots

This commit is contained in:
John Estropia
2020-02-21 13:51:17 +09:00
parent 361dba58c6
commit 231e138ab0
10 changed files with 121 additions and 89 deletions

View File

@@ -379,8 +379,12 @@ extension ObjectPublisher where O: CoreStoreObject {
return nil
}
Internals.assert(
rawObject.isRunningInAllowedQueue() == true,
"Attempted to access \(Internals.typeName(O.self))'s value outside it's designated queue."
)
let field = object[keyPath: member]
return type(of: field).read(field: field, for: rawObject, bypassThreadCheck: false) as! V?
return type(of: field).read(field: field, for: rawObject) as! V?
}
/**
@@ -395,8 +399,12 @@ extension ObjectPublisher where O: CoreStoreObject {
return nil
}
Internals.assert(
rawObject.isRunningInAllowedQueue() == true,
"Attempted to access \(Internals.typeName(O.self))'s value outside it's designated queue."
)
let field = object[keyPath: member]
return type(of: field).read(field: field, for: rawObject, bypassThreadCheck: false) as! V?
return type(of: field).read(field: field, for: rawObject) as! V?
}
/**
@@ -411,8 +419,12 @@ extension ObjectPublisher where O: CoreStoreObject {
return nil
}
Internals.assert(
rawObject.isRunningInAllowedQueue() == true,
"Attempted to access \(Internals.typeName(O.self))'s value outside it's designated queue."
)
let field = object[keyPath: member]
return type(of: field).read(field: field, for: rawObject, bypassThreadCheck: false) as! V?
return type(of: field).read(field: field, for: rawObject) as! V?
}
/**
@@ -427,13 +439,12 @@ extension ObjectPublisher where O: CoreStoreObject {
return nil
}
Internals.assert(
rawObject.isRunningInAllowedQueue() == true,
"Attempted to access \(Internals.typeName(O.self))'s value outside it's designated queue."
)
let field = object[keyPath: member]
guard let value = type(of: field).read(field: field, for: rawObject, bypassThreadCheck: false) as! V? else {
return nil
}
let nativeValue = V.cs_toNativeType(from: value)
let snapshotValue = V.cs_valueForSnapshot(from: nativeValue)
let snapshotValue = V.cs_valueForSnapshot(from: rawObject.objectIDs(forRelationshipNamed: field.keyPath))
return V.cs_toPublishedType(from: snapshotValue, in: self.context)
}