diff --git a/SugarRecord/Source/CoreData/Extensions/NSManagedObjectContext.swift b/SugarRecord/Source/CoreData/Extensions/NSManagedObjectContext.swift index 88ad93ca..440ab022 100644 --- a/SugarRecord/Source/CoreData/Extensions/NSManagedObjectContext.swift +++ b/SugarRecord/Source/CoreData/Extensions/NSManagedObjectContext.swift @@ -18,6 +18,16 @@ extension NSManagedObjectContext: Context { return typedResults } + public func count(_ request: FetchRequest) throws -> Int { + guard let entity = T.self as? NSManagedObject.Type else { throw StorageError.invalidType } + let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: entity.entityName) + fetchRequest.predicate = request.predicate + fetchRequest.fetchOffset = request.fetchOffset + fetchRequest.fetchLimit = request.fetchLimit + let result = try self.count(for: fetchRequest) + return result + } + public func insert(_ entity: T) throws {} public func new() throws -> T { diff --git a/SugarRecord/Source/Foundation/Protocols/Context.swift b/SugarRecord/Source/Foundation/Protocols/Context.swift index cf9f3ebc..55ed2f17 100644 --- a/SugarRecord/Source/Foundation/Protocols/Context.swift +++ b/SugarRecord/Source/Foundation/Protocols/Context.swift @@ -3,6 +3,7 @@ import Foundation public protocol Context: Requestable { func fetch(_ request: FetchRequest) throws -> [T] + func count(_ request: FetchRequest) throws -> Int func insert(_ entity: T) throws func new() throws -> T func create() throws -> T