FROM clause, list controller

This commit is contained in:
John Rommel Estropia
2015-04-28 01:26:34 +09:00
parent cc08053259
commit e115820635
10 changed files with 253 additions and 173 deletions

View File

@@ -11,6 +11,7 @@
2F03A54019C5C6DA005002A5 /* HardcoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F03A53F19C5C6DA005002A5 /* HardcoreDataTests.swift */; };
2F03A54D19C5C872005002A5 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A54C19C5C872005002A5 /* CoreData.framework */; };
2F291E2719C6D3CF007AF63F /* HardcoreData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F291E2619C6D3CF007AF63F /* HardcoreData.swift */; };
B50DD9DD1ABD34F800D62F2B /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50DD9DC1ABD34F800D62F2B /* From.swift */; };
B52B68BA1AAB46AD00CE7F48 /* ManagedObjectController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */; };
B52B68BC1AAB46BD00CE7F48 /* ManagedObjectListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */; };
B52B68BE1AAB484C00CE7F48 /* DataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B68BD1AAB484C00CE7F48 /* DataStack+Observing.swift */; };
@@ -88,6 +89,7 @@
2F03A53F19C5C6DA005002A5 /* HardcoreDataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = HardcoreDataTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
2F03A54C19C5C872005002A5 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
2F291E2619C6D3CF007AF63F /* HardcoreData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = HardcoreData.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
B50DD9DC1ABD34F800D62F2B /* From.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = From.swift; sourceTree = "<group>"; };
B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedObjectController.swift; sourceTree = "<group>"; };
B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedObjectListController.swift; sourceTree = "<group>"; };
B52B68BD1AAB484C00CE7F48 /* DataStack+Observing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DataStack+Observing.swift"; sourceTree = "<group>"; };
@@ -108,6 +110,7 @@
B5D022651A90CD340070CA63 /* DataStack+Transaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DataStack+Transaction.swift"; sourceTree = "<group>"; };
B5D10DBF1AB42C85004B4EEA /* GroupBy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupBy.swift; sourceTree = "<group>"; };
B5D10DC11AB4590F004B4EEA /* Select.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Select.swift; sourceTree = "<group>"; };
B5D10DC41AB9C747004B4EEA /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
B5D19BFA1AA14063001D1A99 /* AsynchronousDataTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousDataTransaction.swift; sourceTree = "<group>"; };
B5D19BFE1AA14351001D1A99 /* SynchronousDataTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousDataTransaction.swift; sourceTree = "<group>"; };
B5D19C001AA15E1F001D1A99 /* HardcoreData+Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HardcoreData+Logging.swift"; sourceTree = "<group>"; };
@@ -196,6 +199,7 @@
isa = PBXGroup;
children = (
B5F3D98419F3EB8E009690A6 /* LICENSE */,
B5D10DC41AB9C747004B4EEA /* README.md */,
2F03A53419C5C6DA005002A5 /* Info.plist */,
);
name = "Supporting Files";
@@ -234,10 +238,10 @@
B52B68B61AAB45FB00CE7F48 /* Observing */ = {
isa = PBXGroup;
children = (
B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */,
B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */,
B52B68C11AAF554600CE7F48 /* ManagedObjectListSectionInfo.swift */,
B52B68BF1AAB9DAD00CE7F48 /* ManagedObjectListObserver.swift */,
B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */,
B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */,
B52B68C11AAF554600CE7F48 /* ManagedObjectListSectionInfo.swift */,
B52B68BD1AAB484C00CE7F48 /* DataStack+Observing.swift */,
);
name = Observing;
@@ -255,6 +259,7 @@
isa = PBXGroup;
children = (
B57078AF1A50392D007E33F2 /* FetchClause.swift */,
B50DD9DC1ABD34F800D62F2B /* From.swift */,
B5E126541A7DCE1400AD8B39 /* Where.swift */,
B5E126561A7DCE5900AD8B39 /* SortedBy.swift */,
B5F409F01A8B27A600A228EA /* CustomizeFetch.swift */,
@@ -511,6 +516,7 @@
B582DF861A98B11B003F09C6 /* HardcoreData+Transaction.swift in Sources */,
B5D1E22C19FA9FBC003B2874 /* NSError+HardcoreData.swift in Sources */,
B595CAC61A9A1260009A397F /* NSManagedObjectContext+Transaction.swift in Sources */,
B50DD9DD1ABD34F800D62F2B /* From.swift in Sources */,
B5CFF23E19FD1D1C00D6DFC4 /* NSManagedObjectContext+HardcoreData.swift in Sources */,
B54A9F071AA7654400AFEC05 /* DataStack+Querying.swift in Sources */,
B5E126571A7DCE5900AD8B39 /* SortedBy.swift in Sources */,

View File

@@ -33,115 +33,115 @@ public extension BaseDataTransaction {
// MARK: Public
public func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> T? {
public func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> T? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchOne(entity, queryClauses)
return self.context.fetchOne(from, queryClauses)
}
public func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> T? {
public func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> T? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchOne(entity, queryClauses)
return self.context.fetchOne(from, queryClauses)
}
public func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? {
public func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [T]? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchAll(entity, queryClauses)
return self.context.fetchAll(from, queryClauses)
}
public func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? {
public func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [T]? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchAll(entity, queryClauses)
return self.context.fetchAll(from, queryClauses)
}
public func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
public func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchCount(entity, queryClauses)
return self.context.fetchCount(from, queryClauses)
}
public func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
public func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchCount(entity, queryClauses)
return self.context.fetchCount(from, queryClauses)
}
public func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
public func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchObjectID(entity, queryClauses)
return self.context.fetchObjectID(from, queryClauses)
}
public func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
public func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchObjectID(entity, queryClauses)
return self.context.fetchObjectID(from, queryClauses)
}
public func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
public func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchObjectIDs(entity, queryClauses)
return self.context.fetchObjectIDs(from, queryClauses)
}
public func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
public func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.")
return self.context.fetchObjectIDs(entity, queryClauses)
return self.context.fetchObjectIDs(from, queryClauses)
}
public func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
public func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside its designated queue.")
return self.context.deleteAll(entity, queryClauses)
return self.context.deleteAll(from, queryClauses)
}
public func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
public func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside its designated queue.")
return self.context.deleteAll(entity, queryClauses)
return self.context.deleteAll(from, queryClauses)
}
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.")
return self.context.queryValue(entity, selectClause, queryClauses)
return self.context.queryValue(from, selectClause, queryClauses)
}
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.")
return self.context.queryValue(entity, selectClause, queryClauses)
return self.context.queryValue(from, selectClause, queryClauses)
}
public func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
public func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.")
return self.context.queryAttributes(entity, selectClause, queryClauses)
return self.context.queryAttributes(from, selectClause, queryClauses)
}
public func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
public func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.")
return self.context.queryAttributes(entity, selectClause, queryClauses)
return self.context.queryAttributes(from, selectClause, queryClauses)
}
}

View File

@@ -34,115 +34,115 @@ public extension DataStack {
// MARK: Public
public func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> T? {
public func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> T? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchOne(entity, queryClauses)
return self.mainContext.fetchOne(from, queryClauses)
}
public func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> T? {
public func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> T? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchOne(entity, queryClauses)
return self.mainContext.fetchOne(from, queryClauses)
}
public func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? {
public func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [T]? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchAll(entity, queryClauses)
return self.mainContext.fetchAll(from, queryClauses)
}
public func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? {
public func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [T]? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchAll(entity, queryClauses)
return self.mainContext.fetchAll(from, queryClauses)
}
public func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
public func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchCount(entity, queryClauses)
return self.mainContext.fetchCount(from, queryClauses)
}
public func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
public func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchCount(entity, queryClauses)
return self.mainContext.fetchCount(from, queryClauses)
}
public func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
public func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchObjectID(entity, queryClauses)
return self.mainContext.fetchObjectID(from, queryClauses)
}
public func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
public func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchObjectID(entity, queryClauses)
return self.mainContext.fetchObjectID(from, queryClauses)
}
public func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
public func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchObjectIDs(entity, queryClauses)
return self.mainContext.fetchObjectIDs(from, queryClauses)
}
public func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
public func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.fetchObjectIDs(entity, queryClauses)
return self.mainContext.fetchObjectIDs(from, queryClauses)
}
public func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
public func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.deleteAll(entity, queryClauses)
return self.mainContext.deleteAll(from, queryClauses)
}
public func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
public func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.deleteAll(entity, queryClauses)
return self.mainContext.deleteAll(from, queryClauses)
}
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.queryValue(entity, selectClause, queryClauses)
return self.mainContext.queryValue(from, selectClause, queryClauses)
}
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
public func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.queryValue(entity, selectClause, queryClauses)
return self.mainContext.queryValue(from, selectClause, queryClauses)
}
public func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
public func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.queryAttributes(entity, selectClause, queryClauses)
return self.mainContext.queryAttributes(from, selectClause, queryClauses)
}
public func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
public func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.")
return self.mainContext.queryAttributes(entity, selectClause, queryClauses)
return self.mainContext.queryAttributes(from, selectClause, queryClauses)
}
}

19
HardcoreData/From.swift Normal file
View File

@@ -0,0 +1,19 @@
//
// From.swift
// HardcoreData
//
// Created by John Rommel Estropia on 2015/03/21.
// Copyright (c) 2015 John Rommel Estropia. All rights reserved.
//
import Foundation
import CoreData
// MARK: - From
public struct From<T: NSManagedObject> {
public init(){ }
public init(_ entity: T.Type) { }
}

View File

@@ -60,21 +60,5 @@ public struct GroupBy: QueryClause {
}
fetchRequest.propertiesToGroupBy = self.keyPaths
// let entityDescription = fetchRequest.entity!
// let propertyMapping = entityDescription.propertiesByName
// fetchRequest.propertiesToGroupBy = self.keyPaths.reduce([AnyObject]()) { (var properties, keyPath) -> [AnyObject] in
//
// if let propertyDescription: AnyObject = propertyMapping[keyPath] {
//
// properties.append(propertyDescription)
// }
// else {
//
// HardcoreData.log(.Warning, message: "The property \"\(keyPath)\" does not exist in entity <\(entityDescription.managedObjectClassName)> and will be ignored by <\(self.dynamicType)> query clause.")
// }
//
// return properties
// }
}
}

View File

@@ -31,83 +31,83 @@ public extension HardcoreData {
// MARK: Public
public static func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> T? {
public static func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> T? {
return self.defaultStack.fetchOne(entity, queryClauses)
return self.defaultStack.fetchOne(from, queryClauses)
}
public static func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> T? {
public static func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> T? {
return self.defaultStack.fetchOne(entity, queryClauses)
return self.defaultStack.fetchOne(from, queryClauses)
}
public static func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? {
public static func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [T]? {
return self.defaultStack.fetchAll(entity, queryClauses)
return self.defaultStack.fetchAll(from, queryClauses)
}
public static func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? {
public static func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [T]? {
return self.defaultStack.fetchAll(entity, queryClauses)
return self.defaultStack.fetchAll(from, queryClauses)
}
public static func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
public static func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
return self.defaultStack.fetchCount(entity, queryClauses)
return self.defaultStack.fetchCount(from, queryClauses)
}
public static func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
public static func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
return self.defaultStack.fetchCount(entity, queryClauses)
return self.defaultStack.fetchCount(from, queryClauses)
}
public static func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
public static func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
return self.defaultStack.fetchObjectID(entity, queryClauses)
return self.defaultStack.fetchObjectID(from, queryClauses)
}
public static func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
public static func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
return self.defaultStack.fetchObjectID(entity, queryClauses)
return self.defaultStack.fetchObjectID(from, queryClauses)
}
public static func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
public static func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
return self.defaultStack.fetchObjectIDs(entity, queryClauses)
return self.defaultStack.fetchObjectIDs(from, queryClauses)
}
public static func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
public static func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
return self.defaultStack.fetchObjectIDs(entity, queryClauses)
return self.defaultStack.fetchObjectIDs(from, queryClauses)
}
public static func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
public static func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
return self.defaultStack.deleteAll(entity, queryClauses)
return self.defaultStack.deleteAll(from, queryClauses)
}
public static func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
public static func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
return self.defaultStack.deleteAll(entity, queryClauses)
return self.defaultStack.deleteAll(from, queryClauses)
}
public static func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
public static func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
return self.defaultStack.queryValue(entity, selectClause, queryClauses)
return self.defaultStack.queryValue(from, selectClause, queryClauses)
}
public static func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
public static func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
return self.defaultStack.queryValue(entity, selectClause, queryClauses)
return self.defaultStack.queryValue(from, selectClause, queryClauses)
}
public static func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
public static func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
return self.defaultStack.queryAttributes(entity, selectClause, queryClauses)
return self.defaultStack.queryAttributes(from, selectClause, queryClauses)
}
public static func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
public static func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
return self.defaultStack.queryAttributes(entity, selectClause, queryClauses)
return self.defaultStack.queryAttributes(from, selectClause, queryClauses)
}
}

View File

@@ -30,7 +30,7 @@ import GCDKit
// MARK: - ManagedObjectListController
public final class ManagedObjectListController<T: NSManagedObject>: NSFetchedResultsControllerDelegate {
public final class ManagedObjectListController<T: NSManagedObject>: FetchedResultsControllerHandler {
// MARK: Public
@@ -51,25 +51,25 @@ public final class ManagedObjectListController<T: NSManagedObject>: NSFetchedRes
}
// MARK: NSFetchedResultsControllerDelegate
// MARK: FetchedResultsControllerHandler
private func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
}
private func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
}
private func controllerWillChangeContent(controller: NSFetchedResultsController) {
func controllerWillChangeContent(controller: NSFetchedResultsController) {
}
private func controllerDidChangeContent(controller: NSFetchedResultsController) {
func controllerDidChangeContent(controller: NSFetchedResultsController) {
}
private func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? {
func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? {
return nil
}
@@ -100,19 +100,22 @@ public final class ManagedObjectListController<T: NSManagedObject>: NSFetchedRes
: nil)
)
let fetchedResultsControllerDelegate = FetchedResultsControllerDelegate()
self.fetchedResultsController = fetchedResultsController
self.fetchedResultsControllerDelegate = fetchedResultsControllerDelegate
self.parentStack = dataStack
self.observers = NSHashTable.weakObjectsHashTable()
fetchedResultsController.delegate = self
fetchedResultsControllerDelegate.handler = self
fetchedResultsControllerDelegate.fetchedResultsController = fetchedResultsController
var error: NSError?
if !fetchedResultsController.performFetch(&error) {
HardcoreData.handleError(
error ?? NSError(hardcoreDataErrorCode: .UnknownError),
"Failed to perform fetch on \(NSFetchedResultsController.self)")
"Failed to perform fetch on <\(NSFetchedResultsController.self)>.")
}
}
@@ -120,6 +123,74 @@ public final class ManagedObjectListController<T: NSManagedObject>: NSFetchedRes
// MARK: Private
private let fetchedResultsController: NSFetchedResultsController
private let fetchedResultsControllerDelegate: FetchedResultsControllerDelegate
private weak var parentStack: DataStack?
private let observers: NSHashTable
}
// MARK: - FetchedResultsControllerHandler
private protocol FetchedResultsControllerHandler: class {
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)
func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType)
func controllerWillChangeContent(controller: NSFetchedResultsController)
func controllerDidChangeContent(controller: NSFetchedResultsController)
func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String?
}
// MARK: - FetchedResultsControllerDelegate
private final class FetchedResultsControllerDelegate: NSFetchedResultsControllerDelegate {
// MARK: NSFetchedResultsControllerDelegate
@objc func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
self.handler?.controller(controller, didChangeObject: anObject, atIndexPath: indexPath, forChangeType: type, newIndexPath: newIndexPath)
}
@objc func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
self.handler?.controller(controller, didChangeSection: sectionInfo, atIndex: sectionIndex, forChangeType: type)
}
@objc func controllerWillChangeContent(controller: NSFetchedResultsController) {
self.handler?.controllerWillChangeContent(controller)
}
@objc func controllerDidChangeContent(controller: NSFetchedResultsController) {
self.handler?.controllerDidChangeContent(controller)
}
@objc func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? {
return self.handler?.controller(controller, sectionIndexTitleForSectionName: sectionName)
}
// MARK: Private
weak var handler: FetchedResultsControllerHandler?
weak var fetchedResultsController: NSFetchedResultsController? {
didSet {
oldValue?.delegate = nil
self.fetchedResultsController?.delegate = self
}
}
deinit {
self.fetchedResultsController?.delegate = nil
}
}

View File

@@ -33,15 +33,15 @@ internal extension NSManagedObjectContext {
// MARK: Public
internal func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> T? {
internal func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> T? {
return self.fetchOne(entity, queryClauses)
return self.fetchOne(from, queryClauses)
}
internal func fetchOne<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> T? {
internal func fetchOne<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> T? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 1
fetchRequest.resultType = .ManagedObjectResultType
@@ -67,15 +67,15 @@ internal extension NSManagedObjectContext {
return fetchResults?.first
}
internal func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? {
internal func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [T]? {
return self.fetchAll(entity, queryClauses)
return self.fetchAll(from, queryClauses)
}
internal func fetchAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? {
internal func fetchAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [T]? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 0
fetchRequest.resultType = .ManagedObjectResultType
@@ -101,15 +101,15 @@ internal extension NSManagedObjectContext {
return fetchResults
}
internal func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
internal func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
return self.fetchCount(entity, queryClauses)
return self.fetchCount(from, queryClauses)
}
internal func fetchCount<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
internal func fetchCount<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
for clause in queryClauses {
@@ -133,15 +133,15 @@ internal extension NSManagedObjectContext {
return count
}
internal func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
internal func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> NSManagedObjectID? {
return self.fetchObjectID(entity, queryClauses)
return self.fetchObjectID(from, queryClauses)
}
internal func fetchObjectID<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
internal func fetchObjectID<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> NSManagedObjectID? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 1
fetchRequest.resultType = .ManagedObjectIDResultType
@@ -167,15 +167,15 @@ internal extension NSManagedObjectContext {
return fetchResults?.first
}
internal func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
internal func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? {
return self.fetchObjectIDs(entity, queryClauses)
return self.fetchObjectIDs(from, queryClauses)
}
internal func fetchObjectIDs<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
internal func fetchObjectIDs<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 0
fetchRequest.resultType = .ManagedObjectIDResultType
@@ -201,15 +201,15 @@ internal extension NSManagedObjectContext {
return fetchResults
}
internal func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: FetchClause...) -> Int? {
internal func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: FetchClause...) -> Int? {
return self.deleteAll(entity, queryClauses)
return self.deleteAll(from, queryClauses)
}
internal func deleteAll<T: NSManagedObject>(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? {
internal func deleteAll<T: NSManagedObject>(from: From<T>, _ queryClauses: [FetchClause]) -> Int? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 0
fetchRequest.resultType = .ManagedObjectResultType
fetchRequest.returnsObjectsAsFaults = true
@@ -246,15 +246,15 @@ internal extension NSManagedObjectContext {
return numberOfDeletedObjects
}
internal func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
internal func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: FetchClause...) -> U? {
return self.queryValue(entity, selectClause, queryClauses)
return self.queryValue(from, selectClause, queryClauses)
}
internal func queryValue<T: NSManagedObject, U: SelectValueResultType>(entity: T.Type, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
internal func queryValue<T: NSManagedObject, U: SelectValueResultType>(from: From<T>, _ selectClause: Select<U>, _ queryClauses: [FetchClause]) -> U? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 0
selectClause.applyToFetchRequest(fetchRequest)
@@ -286,15 +286,15 @@ internal extension NSManagedObjectContext {
return nil
}
internal func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
internal func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? {
return self.queryAttributes(entity, selectClause, queryClauses)
return self.queryAttributes(from, selectClause, queryClauses)
}
internal func queryAttributes<T: NSManagedObject>(entity: T.Type, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
internal func queryAttributes<T: NSManagedObject>(from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = self.entityDescriptionForEntityClass(entity)
fetchRequest.entity = self.entityDescriptionForEntityClass(T)
fetchRequest.fetchLimit = 0
selectClause.applyToFetchRequest(fetchRequest)

View File

@@ -77,7 +77,7 @@ class HardcoreDataTests: XCTestCase {
obj1.testDate = NSDate()
let count = transaction.queryValue(
TestEntity1.self,
From(TestEntity1),
Select<Int>(.Count("testNumber"))
)
XCTAssertTrue(count == 0, "count == 0 (actual: \(count))") // counts only objects in store
@@ -110,7 +110,7 @@ class HardcoreDataTests: XCTestCase {
obj4.testDate = NSDate()
let objs4test = transaction.fetchOne(
TestEntity2.self,
From(TestEntity2),
Where("testEntityID", isEqualTo: 4),
CustomizeFetch { (fetchRequest) -> Void in
@@ -120,7 +120,7 @@ class HardcoreDataTests: XCTestCase {
XCTAssertNotNil(objs4test, "objs4test != nil")
let objs5test = transaction.fetchOne(
TestEntity2.self,
From(TestEntity2),
Where("testEntityID", isEqualTo: 4),
CustomizeFetch { (fetchRequest) -> Void in
@@ -135,7 +135,7 @@ class HardcoreDataTests: XCTestCase {
transaction.commit { (result) -> Void in
let objs4test = HardcoreData.fetchOne(
TestEntity2.self,
From(TestEntity2),
Where("testEntityID", isEqualTo: 4),
CustomizeFetch { (fetchRequest) -> Void in
@@ -144,7 +144,7 @@ class HardcoreDataTests: XCTestCase {
)
XCTAssertNil(objs4test, "objs4test == nil")
let objs5test = detachedTransaction.fetchCount(TestEntity2)
let objs5test = detachedTransaction.fetchCount(From(TestEntity2))
XCTAssertTrue(objs5test == 3, "objs5test == 3")
XCTAssertTrue(NSThread.isMainThread(), "NSThread.isMainThread()")
@@ -163,11 +163,11 @@ class HardcoreDataTests: XCTestCase {
let queryExpectation = self.expectationWithDescription("Query creation")
HardcoreData.beginAsynchronous { (transaction) -> Void in
let obj1 = transaction.fetchOne(TestEntity1)
let obj1 = transaction.fetchOne(From(TestEntity1))
XCTAssertNotNil(obj1, "obj1 != nil")
let objs2 = transaction.fetchAll(
TestEntity2.self,
From(TestEntity2),
Where("testNumber", isEqualTo: 100) || Where("%K == %@", "testNumber", 90),
SortedBy(.Ascending("testEntityID"), .Descending("testString")),
CustomizeFetch { (fetchRequest) -> Void in
@@ -181,7 +181,7 @@ class HardcoreDataTests: XCTestCase {
transaction.commit { (result) -> Void in
let counts = HardcoreData.queryAttributes(
TestEntity2.self,
From(TestEntity2),
Select(.Count("testString", As: "count"), "testString"),
GroupBy("testString")
)
@@ -203,13 +203,13 @@ class HardcoreDataTests: XCTestCase {
self.waitForExpectationsWithTimeout(100, handler: nil)
let max1 = HardcoreData.queryValue(
TestEntity2.self,
From(TestEntity2),
Select<Int>(.Maximum("testNumber"))
)
XCTAssertTrue(max1 == 100, "max == 100 (actual: \(max1))")
let max2 = HardcoreData.queryValue(
TestEntity2.self,
From(TestEntity2),
Select<NSNumber>(.Maximum("testNumber")),
Where("%K > %@", "testEntityID", 2)
)
@@ -217,11 +217,11 @@ class HardcoreDataTests: XCTestCase {
HardcoreData.beginSynchronous { (transaction) -> Void in
let numberOfDeletedObjects1 = transaction.deleteAll(TestEntity1)
let numberOfDeletedObjects1 = transaction.deleteAll(From(TestEntity1))
XCTAssertTrue(numberOfDeletedObjects1 == 1, "numberOfDeletedObjects1 == 1 (actual: \(numberOfDeletedObjects1))")
let numberOfDeletedObjects2 = transaction.deleteAll(
TestEntity2.self,
From(TestEntity2),
Where("%K > %@", "testEntityID", 2)
)
XCTAssertTrue(numberOfDeletedObjects2 == 2, "numberOfDeletedObjects2 == 2 (actual: \(numberOfDeletedObjects2))")
@@ -229,11 +229,11 @@ class HardcoreDataTests: XCTestCase {
transaction.commitAndWait()
}
let objs1 = HardcoreData.fetchAll(TestEntity1)
let objs1 = HardcoreData.fetchAll(From(TestEntity1))
XCTAssertNotNil(objs1, "objs1 != nil")
XCTAssertTrue(objs1?.count == 0, "objs1?.count == 0")
let objs2 = HardcoreData.fetchAll(TestEntity2)
let objs2 = HardcoreData.fetchAll(From(TestEntity2))
XCTAssertNotNil(objs2, "objs2 != nil")
XCTAssertTrue(objs2?.count == 1, "objs2?.count == 1")
@@ -254,7 +254,7 @@ class HardcoreDataTests: XCTestCase {
XCTAssertTrue(hasChanges, "hasChanges == true")
let count: Int? = HardcoreData.queryValue(
TestEntity1.self,
From(TestEntity1),
Select(.Count("testNumber"))
)
XCTAssertTrue(count == 1, "count == 1 (actual: \(count))")
@@ -274,7 +274,7 @@ class HardcoreDataTests: XCTestCase {
XCTAssertTrue(hasChanges, "hasChanges == true")
let count = HardcoreData.queryValue(
TestEntity1.self,
From(TestEntity1),
Select<Int>(.Count("testNumber"))
)
XCTAssertTrue(count == 2, "count == 2 (actual: \(count))")