mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-01-14 13:13:33 +01:00
SwiftPM support
This commit is contained in:
@@ -165,10 +165,6 @@
|
|||||||
B52557881D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; };
|
B52557881D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; };
|
||||||
B52557891D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; };
|
B52557891D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; };
|
||||||
B525578A1D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; };
|
B525578A1D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; };
|
||||||
B52661401CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; };
|
|
||||||
B52661421CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; };
|
|
||||||
B52661431CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; };
|
|
||||||
B52661441CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; };
|
|
||||||
B529C2041CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; };
|
B529C2041CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; };
|
||||||
B529C2061CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; };
|
B529C2061CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; };
|
||||||
B529C2071CA4A2DC007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; };
|
B529C2071CA4A2DC007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; };
|
||||||
@@ -477,6 +473,12 @@
|
|||||||
B5831B7B1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
B5831B7B1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
B5831B7C1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
B5831B7C1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
B5831B7D1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
B5831B7D1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
|
B5831F4022126FEC00D8604C /* KeyPathGenericBindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DAFB492203E01D003FCCD0 /* KeyPathGenericBindings.swift */; };
|
||||||
|
B5831F4122126FEC00D8604C /* KeyPathGenericBindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DAFB492203E01D003FCCD0 /* KeyPathGenericBindings.swift */; };
|
||||||
|
B5831F4222126FED00D8604C /* KeyPathGenericBindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DAFB492203E01D003FCCD0 /* KeyPathGenericBindings.swift */; };
|
||||||
|
B5831F432212700400D8604C /* Where.Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DAFB472203D9F8003FCCD0 /* Where.Expression.swift */; };
|
||||||
|
B5831F442212700500D8604C /* Where.Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DAFB472203D9F8003FCCD0 /* Where.Expression.swift */; };
|
||||||
|
B5831F452212700500D8604C /* Where.Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5DAFB472203D9F8003FCCD0 /* Where.Expression.swift */; };
|
||||||
B58B22F51C93C1BA00521925 /* CoreStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A53019C5C6DA005002A5 /* CoreStore.framework */; };
|
B58B22F51C93C1BA00521925 /* CoreStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A53019C5C6DA005002A5 /* CoreStore.framework */; };
|
||||||
B58D0C631EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
B58D0C631EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
||||||
B58D0C641EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
B58D0C641EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
||||||
@@ -798,7 +800,6 @@
|
|||||||
B525577F1D029D2500E51965 /* TweakTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TweakTests.swift; sourceTree = "<group>"; };
|
B525577F1D029D2500E51965 /* TweakTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TweakTests.swift; sourceTree = "<group>"; };
|
||||||
B52557831D02A07400E51965 /* SectionByTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionByTests.swift; sourceTree = "<group>"; };
|
B52557831D02A07400E51965 /* SectionByTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionByTests.swift; sourceTree = "<group>"; };
|
||||||
B52557871D02DE8100E51965 /* FetchTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchTests.swift; sourceTree = "<group>"; };
|
B52557871D02DE8100E51965 /* FetchTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchTests.swift; sourceTree = "<group>"; };
|
||||||
B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CoreStoreFetchRequest+CoreStore.swift"; sourceTree = "<group>"; };
|
|
||||||
B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSaveResult.swift; sourceTree = "<group>"; };
|
B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSaveResult.swift; sourceTree = "<group>"; };
|
||||||
B52DD1741BE1F8CC00949AFE /* CoreStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoreStore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
B52DD1741BE1F8CC00949AFE /* CoreStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoreStore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreStoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreStoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@@ -862,7 +863,7 @@
|
|||||||
B56923F41EB828BF007C4DC9 /* CSDynamicSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSDynamicSchema.swift; sourceTree = "<group>"; };
|
B56923F41EB828BF007C4DC9 /* CSDynamicSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSDynamicSchema.swift; sourceTree = "<group>"; };
|
||||||
B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSXcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSXcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
||||||
B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSUnsafeDataModelSchema.swift; sourceTree = "<group>"; };
|
B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSUnsafeDataModelSchema.swift; sourceTree = "<group>"; };
|
||||||
B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "DataStack+Migration.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "DataStack+Migration.swift"; sourceTree = "<group>"; };
|
||||||
B56965231B356B820075EE4A /* MigrationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationResult.swift; sourceTree = "<group>"; };
|
B56965231B356B820075EE4A /* MigrationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationResult.swift; sourceTree = "<group>"; };
|
||||||
B57D27BD1D0BBE8200539C58 /* BaseTestDataTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTestDataTestCase.swift; sourceTree = "<group>"; };
|
B57D27BD1D0BBE8200539C58 /* BaseTestDataTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTestDataTestCase.swift; sourceTree = "<group>"; };
|
||||||
B57D27C11D0BC20100539C58 /* QueryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryTests.swift; sourceTree = "<group>"; };
|
B57D27C11D0BC20100539C58 /* QueryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -1537,7 +1538,6 @@
|
|||||||
B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */,
|
B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */,
|
||||||
B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */,
|
B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */,
|
||||||
B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */,
|
B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */,
|
||||||
B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */,
|
|
||||||
B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */,
|
B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */,
|
||||||
B533C4DA1D7D4BFA001383CB /* DispatchQueue+CoreStore.swift */,
|
B533C4DA1D7D4BFA001383CB /* DispatchQueue+CoreStore.swift */,
|
||||||
B51260921E9B28F100402229 /* EntityIdentifier.swift */,
|
B51260921E9B28F100402229 /* EntityIdentifier.swift */,
|
||||||
@@ -1947,7 +1947,6 @@
|
|||||||
B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
||||||
B5DBE2D21C991B3E00B5CEFA /* CSDataStack.swift in Sources */,
|
B5DBE2D21C991B3E00B5CEFA /* CSDataStack.swift in Sources */,
|
||||||
B50392F91C478FF3009900CA /* NSManagedObject+Transaction.swift in Sources */,
|
B50392F91C478FF3009900CA /* NSManagedObject+Transaction.swift in Sources */,
|
||||||
B52661401CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */,
|
|
||||||
B53FBA181CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
B53FBA181CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
||||||
B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */,
|
B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */,
|
||||||
B5519A591CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
B5519A591CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
||||||
@@ -2136,9 +2135,11 @@
|
|||||||
82BA18A31C4BBD2200A0916E /* DataStack.swift in Sources */,
|
82BA18A31C4BBD2200A0916E /* DataStack.swift in Sources */,
|
||||||
82BA18C81C4BBD5900A0916E /* MigrationChain.swift in Sources */,
|
82BA18C81C4BBD5900A0916E /* MigrationChain.swift in Sources */,
|
||||||
B546F9741C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
B546F9741C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
||||||
|
B5831F4022126FEC00D8604C /* KeyPathGenericBindings.swift in Sources */,
|
||||||
B53CA9A31EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
B53CA9A31EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
82BA18B11C4BBD3100A0916E /* SaveResult.swift in Sources */,
|
82BA18B11C4BBD3100A0916E /* SaveResult.swift in Sources */,
|
||||||
82BA18DD1C4BBE1400A0916E /* NSFetchedResultsController+Convenience.swift in Sources */,
|
82BA18DD1C4BBE1400A0916E /* NSFetchedResultsController+Convenience.swift in Sources */,
|
||||||
|
B5831F432212700400D8604C /* Where.Expression.swift in Sources */,
|
||||||
B51260941E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260941E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
B5FE4DA81C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
B5FE4DA81C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
||||||
B53FBA001CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
B53FBA001CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
||||||
@@ -2146,7 +2147,6 @@
|
|||||||
82BA18B41C4BBD3900A0916E /* BaseDataTransaction+Importing.swift in Sources */,
|
82BA18B41C4BBD3900A0916E /* BaseDataTransaction+Importing.swift in Sources */,
|
||||||
B53FBA1A1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
B53FBA1A1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
||||||
82BA18CA1C4BBD5900A0916E /* MigrationResult.swift in Sources */,
|
82BA18CA1C4BBD5900A0916E /* MigrationResult.swift in Sources */,
|
||||||
B52661421CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */,
|
|
||||||
B5519A5A1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
B5519A5A1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
||||||
B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */,
|
B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */,
|
||||||
82BA18C11C4BBD5300A0916E /* CoreStore+Observing.swift in Sources */,
|
82BA18C11C4BBD5300A0916E /* CoreStore+Observing.swift in Sources */,
|
||||||
@@ -2333,9 +2333,11 @@
|
|||||||
B52DD1961BE1F92500949AFE /* DataStack.swift in Sources */,
|
B52DD1961BE1F92500949AFE /* DataStack.swift in Sources */,
|
||||||
B5ECDBFD1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
B5ECDBFD1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
||||||
B52DD1BD1BE1F94300949AFE /* NSManagedObject+Convenience.swift in Sources */,
|
B52DD1BD1BE1F94300949AFE /* NSManagedObject+Convenience.swift in Sources */,
|
||||||
|
B5831F4222126FED00D8604C /* KeyPathGenericBindings.swift in Sources */,
|
||||||
B53CA9A51EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
B53CA9A51EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
B52DD1AD1BE1F93900949AFE /* Where.swift in Sources */,
|
B52DD1AD1BE1F93900949AFE /* Where.swift in Sources */,
|
||||||
B53FBA1C1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
B53FBA1C1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
||||||
|
B5831F452212700500D8604C /* Where.Expression.swift in Sources */,
|
||||||
B51260961E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260961E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
B5ECDBE31CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */,
|
B5ECDBE31CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */,
|
||||||
B5ECDC031CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
B5ECDC031CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
||||||
@@ -2344,7 +2346,6 @@
|
|||||||
B52DD1C71BE1F94600949AFE /* NSManagedObjectContext+Querying.swift in Sources */,
|
B52DD1C71BE1F94600949AFE /* NSManagedObjectContext+Querying.swift in Sources */,
|
||||||
B52DD1C81BE1F94600949AFE /* NSManagedObjectContext+Setup.swift in Sources */,
|
B52DD1C81BE1F94600949AFE /* NSManagedObjectContext+Setup.swift in Sources */,
|
||||||
B52DD1C31BE1F94600949AFE /* NotificationObserver.swift in Sources */,
|
B52DD1C31BE1F94600949AFE /* NotificationObserver.swift in Sources */,
|
||||||
B52661441CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */,
|
|
||||||
B52DD1A81BE1F93200949AFE /* DataStack+Querying.swift in Sources */,
|
B52DD1A81BE1F93200949AFE /* DataStack+Querying.swift in Sources */,
|
||||||
B5220E221D130818009BC71E /* CSSectionBy.swift in Sources */,
|
B5220E221D130818009BC71E /* CSSectionBy.swift in Sources */,
|
||||||
B52DD1BC1BE1F94000949AFE /* MigrationResult.swift in Sources */,
|
B52DD1BC1BE1F94000949AFE /* MigrationResult.swift in Sources */,
|
||||||
@@ -2530,14 +2531,15 @@
|
|||||||
B56321A81BD65219006C9394 /* NSManagedObject+Convenience.swift in Sources */,
|
B56321A81BD65219006C9394 /* NSManagedObject+Convenience.swift in Sources */,
|
||||||
B546F9751C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
B546F9751C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
||||||
B56321981BD65216006C9394 /* Where.swift in Sources */,
|
B56321981BD65216006C9394 /* Where.swift in Sources */,
|
||||||
|
B5831F4122126FEC00D8604C /* KeyPathGenericBindings.swift in Sources */,
|
||||||
B53CA9A41EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
B53CA9A41EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */,
|
B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */,
|
||||||
B5FE4DA91C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
B5FE4DA91C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
||||||
|
B5831F442212700500D8604C /* Where.Expression.swift in Sources */,
|
||||||
B51260951E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260951E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
||||||
B5DBE2D41C991B3E00B5CEFA /* CSDataStack.swift in Sources */,
|
B5DBE2D41C991B3E00B5CEFA /* CSDataStack.swift in Sources */,
|
||||||
B50392FA1C47963F009900CA /* NSManagedObject+Transaction.swift in Sources */,
|
B50392FA1C47963F009900CA /* NSManagedObject+Transaction.swift in Sources */,
|
||||||
B52661431CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */,
|
|
||||||
B53FBA1B1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
B53FBA1B1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
||||||
B5519A5B1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
B5519A5B1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
||||||
B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */,
|
B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */,
|
||||||
@@ -2717,7 +2719,7 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
TVOS_DEPLOYMENT_TARGET = 10.0;
|
TVOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
@@ -2779,7 +2781,7 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
TVOS_DEPLOYMENT_TARGET = 10.0;
|
TVOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
|||||||
@@ -74,31 +74,31 @@ final class FromTests: BaseTestCase {
|
|||||||
|
|
||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["PF_DEFAULT_CONFIGURATION_NAME"])
|
XCTAssertEqual(affectedConfigurations, ["PF_DEFAULT_CONFIGURATION_NAME"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,98 +113,98 @@ final class FromTests: BaseTestCase {
|
|||||||
|
|
||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config2")
|
let from = From<TestEntity1>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>()
|
let from = From<TestEntity2>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>("Config1")
|
let from = From<TestEntity2>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>("Config2")
|
let from = From<TestEntity2>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,96 +219,96 @@ final class FromTests: BaseTestCase {
|
|||||||
|
|
||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(Set(affectedConfigurations), ["PF_DEFAULT_CONFIGURATION_NAME", "Config1"] as Set)
|
XCTAssertEqual(Set(affectedConfigurations), ["PF_DEFAULT_CONFIGURATION_NAME", "Config1"] as Set)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config2")
|
let from = From<TestEntity1>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>()
|
let from = From<TestEntity2>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["PF_DEFAULT_CONFIGURATION_NAME"])
|
XCTAssertEqual(affectedConfigurations, ["PF_DEFAULT_CONFIGURATION_NAME"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>("Config1")
|
let from = From<TestEntity2>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>("Config2")
|
let from = From<TestEntity2>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -323,94 +323,94 @@ final class FromTests: BaseTestCase {
|
|||||||
|
|
||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
XCTAssertEqual(affectedConfigurations, ["Config1"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity1>("Config2")
|
let from = From<TestEntity1>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>()
|
let from = From<TestEntity2>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config2"])
|
XCTAssertEqual(affectedConfigurations, ["Config2"])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>("Config1")
|
let from = From<TestEntity2>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
self.expectError(code: .persistentStoreNotFound) {
|
self.expectError(code: .persistentStoreNotFound) {
|
||||||
|
|
||||||
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertTrue(affectedConfigurations.isEmpty)
|
XCTAssertTrue(affectedConfigurations.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let from = From<TestEntity2>("Config2")
|
let from = From<TestEntity2>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertNotNil(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.affectedStores)
|
||||||
|
|
||||||
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
XCTAssert(from.entityClass == NSClassFromString(request.entity!.managedObjectClassName))
|
||||||
|
|
||||||
let affectedConfigurations = request.safeAffectedStores!.map { $0.configurationName }
|
let affectedConfigurations = request.affectedStores?.map { $0.configurationName } ?? []
|
||||||
XCTAssertEqual(affectedConfigurations, ["Config2"])
|
XCTAssertEqual(affectedConfigurations, ["Config2"])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ final class GroupByTests: BaseTestCase {
|
|||||||
|
|
||||||
let groupBy = GroupBy<NSManagedObject>(#keyPath(TestEntity1.testString))
|
let groupBy = GroupBy<NSManagedObject>(#keyPath(TestEntity1.testString))
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
try From<TestEntity1>().applyToFetchRequest(request, context: dataStack.mainContext)
|
try From<TestEntity1>().applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
groupBy.applyToFetchRequest(request)
|
groupBy.applyToFetchRequest(request)
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ final class OrderByTests: XCTestCase {
|
|||||||
dynamic func test_ThatOrderByClauses_ApplyToFetchRequestsCorrectly() {
|
dynamic func test_ThatOrderByClauses_ApplyToFetchRequestsCorrectly() {
|
||||||
|
|
||||||
let orderBy = OrderBy<NSManagedObject>(.ascending("key"))
|
let orderBy = OrderBy<NSManagedObject>(.ascending("key"))
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
orderBy.applyToFetchRequest(request)
|
orderBy.applyToFetchRequest(request)
|
||||||
XCTAssertNotNil(request.sortDescriptors)
|
XCTAssertNotNil(request.sortDescriptors)
|
||||||
XCTAssertEqual(request.sortDescriptors ?? [], orderBy.sortDescriptors)
|
XCTAssertEqual(request.sortDescriptors ?? [], orderBy.sortDescriptors)
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ final class TweakTests: XCTestCase {
|
|||||||
$0.fetchLimit = 200
|
$0.fetchLimit = 200
|
||||||
$0.predicate = predicate
|
$0.predicate = predicate
|
||||||
}
|
}
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
tweak.applyToFetchRequest(request)
|
tweak.applyToFetchRequest(request)
|
||||||
XCTAssertEqual(request.fetchOffset, 100)
|
XCTAssertEqual(request.fetchOffset, 100)
|
||||||
XCTAssertEqual(request.fetchLimit, 200)
|
XCTAssertEqual(request.fetchLimit, 200)
|
||||||
|
|||||||
@@ -583,7 +583,7 @@ final class WhereTests: XCTestCase {
|
|||||||
dynamic func test_ThatWhereClauses_ApplyToFetchRequestsCorrectly() {
|
dynamic func test_ThatWhereClauses_ApplyToFetchRequestsCorrectly() {
|
||||||
|
|
||||||
let whereClause = Where<NSManagedObject>("key", isEqualTo: "value")
|
let whereClause = Where<NSManagedObject>("key", isEqualTo: "value")
|
||||||
let request = CoreStoreFetchRequest()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
whereClause.applyToFetchRequest(request)
|
whereClause.applyToFetchRequest(request)
|
||||||
XCTAssertNotNil(request.predicate)
|
XCTAssertNotNil(request.predicate)
|
||||||
XCTAssertEqual(request.predicate, whereClause.predicate)
|
XCTAssertEqual(request.predicate, whereClause.predicate)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// swift-tools-version:4.2
|
||||||
//
|
//
|
||||||
// Package.swift
|
// Package.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
@@ -25,21 +26,18 @@
|
|||||||
|
|
||||||
import PackageDescription
|
import PackageDescription
|
||||||
|
|
||||||
let targets: [Target]
|
|
||||||
#if os(iOS)
|
|
||||||
targets = [Target(name: "CoreStore iOS")]
|
|
||||||
#elseif os(macOS)
|
|
||||||
targets = [Target(name: "CoreStore OSX")]
|
|
||||||
#elseif os(watchOS)
|
|
||||||
targets = [Target(name: "CoreStore watchOS")]
|
|
||||||
#elseif os(tvOS)
|
|
||||||
targets = [Target(name: "CoreStore tvOS")]
|
|
||||||
#else
|
|
||||||
targets = []
|
|
||||||
#endif
|
|
||||||
|
|
||||||
let package = Package(
|
let package = Package(
|
||||||
name: "CoreStore",
|
name: "CoreStore",
|
||||||
targets: targets,
|
products: [
|
||||||
exclude: ["Carthage", "CoreStoreDemo", "Sources/libA/images"]
|
.library(name: "CoreStore", type: .static, targets: ["CoreStore"])
|
||||||
|
],
|
||||||
|
dependencies: [],
|
||||||
|
targets: [
|
||||||
|
.target(
|
||||||
|
name: "CoreStore",
|
||||||
|
dependencies: [],
|
||||||
|
path: "Sources",
|
||||||
|
exclude: ["CoreStoreBridge.h", "CoreStoreBridge.m"]
|
||||||
|
)
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1286,7 +1286,10 @@ extension NSEntityDescription: CoreStoreDebugStringConvertible {
|
|||||||
|
|
||||||
info.append(("compoundIndexes", self.compoundIndexes))
|
info.append(("compoundIndexes", self.compoundIndexes))
|
||||||
}
|
}
|
||||||
info.append(("uniquenessConstraints", self.uniquenessConstraints))
|
if #available(macOS 10.11, *) {
|
||||||
|
|
||||||
|
info.append(("uniquenessConstraints", self.uniquenessConstraints))
|
||||||
|
}
|
||||||
return createFormattedString(
|
return createFormattedString(
|
||||||
"(", ")",
|
"(", ")",
|
||||||
info
|
info
|
||||||
|
|||||||
@@ -564,16 +564,4 @@ CORESTORE_EXTERN
|
|||||||
CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RETURNS_RETAINED;
|
CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RETURNS_RETAINED;
|
||||||
|
|
||||||
|
|
||||||
#pragma mark CoreStoreFetchRequest
|
|
||||||
|
|
||||||
// Bugfix for NSFetchRequest messing up memory management for `affectedStores`
|
|
||||||
// http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified
|
|
||||||
NS_SWIFT_NAME(CoreStoreFetchRequest)
|
|
||||||
@interface _CSFetchRequest: NSFetchRequest
|
|
||||||
|
|
||||||
@property (nullable, nonatomic, copy, readonly) NSArray<NSPersistentStore *> *safeAffectedStores;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* CoreStoreBridge_h */
|
#endif /* CoreStoreBridge_h */
|
||||||
|
|||||||
@@ -218,40 +218,3 @@ CSWhere *_Nonnull CSWherePredicate(NSPredicate *_Nonnull predicate) CORESTORE_RE
|
|||||||
|
|
||||||
return [[CSWhere alloc] initWithPredicate:predicate];
|
return [[CSWhere alloc] initWithPredicate:predicate];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#pragma mark CoreStoreFetchRequest
|
|
||||||
|
|
||||||
@interface _CSFetchRequest ()
|
|
||||||
|
|
||||||
@property (nullable, nonatomic, copy) NSArray<NSPersistentStore *> *safeAffectedStores;
|
|
||||||
@property (nullable, nonatomic, assign) CFArrayRef releaseArray;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation _CSFetchRequest
|
|
||||||
|
|
||||||
// MARK: NSFetchRequest
|
|
||||||
|
|
||||||
- (void)setAffectedStores:(NSArray<NSPersistentStore *> *_Nullable)affectedStores {
|
|
||||||
|
|
||||||
if (NSFoundationVersionNumber < NSFoundationVersionNumber10_0
|
|
||||||
|| [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){ 11, 0, 0 }]) {
|
|
||||||
|
|
||||||
self.safeAffectedStores = affectedStores;
|
|
||||||
[super setAffectedStores:affectedStores];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Bugfix for NSFetchRequest messing up memory management for `affectedStores`
|
|
||||||
// http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified
|
|
||||||
if (self.releaseArray != NULL) {
|
|
||||||
|
|
||||||
CFRelease(self.releaseArray);
|
|
||||||
self.releaseArray = NULL;
|
|
||||||
}
|
|
||||||
self.safeAffectedStores = affectedStores;
|
|
||||||
[super setAffectedStores:affectedStores];
|
|
||||||
self.releaseArray = CFBridgingRetain([super affectedStores]);
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
//
|
|
||||||
// CoreStoreFetchRequest+CoreStore.swift
|
|
||||||
// CoreStore
|
|
||||||
//
|
|
||||||
// Copyright © 2018 John Rommel Estropia
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
import CoreData
|
|
||||||
|
|
||||||
|
|
||||||
// MARK: - CoreStoreFetchRequest
|
|
||||||
|
|
||||||
extension CoreStoreFetchRequest {
|
|
||||||
|
|
||||||
// MARK: Internal
|
|
||||||
|
|
||||||
@nonobjc @inline(__always)
|
|
||||||
internal func dynamicCast<U>() -> NSFetchRequest<U> {
|
|
||||||
|
|
||||||
return unsafeBitCast(self, to: NSFetchRequest<U>.self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -451,14 +451,17 @@ public final class CoreStoreSchema: DynamicSchema {
|
|||||||
}
|
}
|
||||||
for (entity, entityDescription) in entityDescriptionsByEntity {
|
for (entity, entityDescription) in entityDescriptionsByEntity {
|
||||||
|
|
||||||
let uniqueConstraints = entity.uniqueConstraints.filter({ !$0.isEmpty })
|
if #available(macOS 10.11, *) {
|
||||||
if !uniqueConstraints.isEmpty {
|
|
||||||
|
|
||||||
CoreStore.assert(
|
let uniqueConstraints = entity.uniqueConstraints.filter({ !$0.isEmpty })
|
||||||
entityDescription.superentity == nil,
|
if !uniqueConstraints.isEmpty {
|
||||||
"Uniqueness constraints must be defined at the highest level possible."
|
|
||||||
)
|
CoreStore.assert(
|
||||||
entityDescription.uniquenessConstraints = entity.uniqueConstraints.map { $0.map { $0 as NSString } }
|
entityDescription.superentity == nil,
|
||||||
|
"Uniqueness constraints must be defined at the highest level possible."
|
||||||
|
)
|
||||||
|
entityDescription.uniquenessConstraints = entity.uniqueConstraints.map { $0.map { $0 as NSString } }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
guard !entity.indexes.isEmpty else {
|
guard !entity.indexes.isEmpty else {
|
||||||
|
|
||||||
|
|||||||
@@ -749,7 +749,16 @@ extension DataStack {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
let fileManager = FileManager.default
|
let fileManager = FileManager.default
|
||||||
let temporaryDirectoryURL = fileManager.temporaryDirectory
|
let systemTemporaryDirectoryURL: URL
|
||||||
|
if #available(macOS 10.12, *) {
|
||||||
|
|
||||||
|
systemTemporaryDirectoryURL = fileManager.temporaryDirectory
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
systemTemporaryDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory())
|
||||||
|
}
|
||||||
|
let temporaryDirectoryURL = systemTemporaryDirectoryURL
|
||||||
.appendingPathComponent(Bundle.main.bundleIdentifier ?? "com.CoreStore.DataStack")
|
.appendingPathComponent(Bundle.main.bundleIdentifier ?? "com.CoreStore.DataStack")
|
||||||
.appendingPathComponent(ProcessInfo().globallyUniqueString)
|
.appendingPathComponent(ProcessInfo().globallyUniqueString)
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import CoreData
|
||||||
|
|
||||||
|
|
||||||
// MARK: - AnyDynamicKeyPath
|
// MARK: - AnyDynamicKeyPath
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import CoreData
|
||||||
|
|
||||||
|
|
||||||
// MARK: - DynamicObject
|
// MARK: - DynamicObject
|
||||||
|
|||||||
@@ -70,7 +70,8 @@ public final class Entity<O: CoreStoreObject>: DynamicEntity {
|
|||||||
- parameter indexes: the compound indexes for the entity as an array of arrays. The arrays contained in the returned array contain `KeyPath`s to properties of the entity.
|
- parameter indexes: the compound indexes for the entity as an array of arrays. The arrays contained in the returned array contain `KeyPath`s to properties of the entity.
|
||||||
- parameter uniqueConstraints: sets uniqueness constraints for the entity. A uniqueness constraint is a set of one or more `KeyPath`s whose value must be unique over the set of instances of that entity. This value forms part of the entity's version hash. Uniqueness constraint violations can be computationally expensive to handle. It is highly suggested that there be only one uniqueness constraint per entity hierarchy. Uniqueness constraints must be defined at the highest level possible, and CoreStore will raise an assertion failure if unique constraints are added to a sub entity.
|
- parameter uniqueConstraints: sets uniqueness constraints for the entity. A uniqueness constraint is a set of one or more `KeyPath`s whose value must be unique over the set of instances of that entity. This value forms part of the entity's version hash. Uniqueness constraint violations can be computationally expensive to handle. It is highly suggested that there be only one uniqueness constraint per entity hierarchy. Uniqueness constraints must be defined at the highest level possible, and CoreStore will raise an assertion failure if unique constraints are added to a sub entity.
|
||||||
*/
|
*/
|
||||||
public convenience init(_ entityName: String, isAbstract: Bool = false, versionHashModifier: String? = nil, indexes: [[PartialKeyPath<O>]] = [], uniqueConstraints: [[PartialKeyPath<O>]] = []) {
|
@available(macOS 10.11, *)
|
||||||
|
public convenience init(_ entityName: String, isAbstract: Bool = false, versionHashModifier: String? = nil, indexes: [[PartialKeyPath<O>]] = [], uniqueConstraints: [[PartialKeyPath<O>]]) {
|
||||||
|
|
||||||
self.init(
|
self.init(
|
||||||
O.self,
|
O.self,
|
||||||
@@ -82,6 +83,28 @@ public final class Entity<O: CoreStoreObject>: DynamicEntity {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes an `Entity`. Always provide a concrete generic type to `Entity`.
|
||||||
|
```
|
||||||
|
Entity<Animal>("Animal")
|
||||||
|
```
|
||||||
|
- parameter entityName: the `NSEntityDescription` name to use for the entity
|
||||||
|
- parameter isAbstract: set to `true` if the entity is meant to be an abstract class and can only be initialized with subclass types.
|
||||||
|
- parameter versionHashModifier: the version hash modifier for the entity. Used to mark or denote an entity as being a different "version" than another even if all of the values which affect persistence are equal. (Such a difference is important in cases where, for example, the structure of an entity is unchanged but the format or content of data has changed.)
|
||||||
|
- parameter indexes: the compound indexes for the entity as an array of arrays. The arrays contained in the returned array contain `KeyPath`s to properties of the entity.
|
||||||
|
*/
|
||||||
|
public convenience init(_ entityName: String, isAbstract: Bool = false, versionHashModifier: String? = nil, indexes: [[PartialKeyPath<O>]] = []) {
|
||||||
|
|
||||||
|
self.init(
|
||||||
|
O.self,
|
||||||
|
entityName,
|
||||||
|
isAbstract: isAbstract,
|
||||||
|
versionHashModifier: versionHashModifier,
|
||||||
|
indexes: indexes,
|
||||||
|
uniqueConstraints: []
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initializes an `Entity`.
|
Initializes an `Entity`.
|
||||||
```
|
```
|
||||||
@@ -94,7 +117,8 @@ public final class Entity<O: CoreStoreObject>: DynamicEntity {
|
|||||||
- parameter indexes: the compound indexes for the entity as an array of arrays. The arrays contained in the returned array contain KeyPath's to properties of the entity.
|
- parameter indexes: the compound indexes for the entity as an array of arrays. The arrays contained in the returned array contain KeyPath's to properties of the entity.
|
||||||
- parameter uniqueConstraints: sets uniqueness constraints for the entity. A uniqueness constraint is a set of one or more `KeyPath`s whose value must be unique over the set of instances of that entity. This value forms part of the entity's version hash. Uniqueness constraint violations can be computationally expensive to handle. It is highly suggested that there be only one uniqueness constraint per entity hierarchy. Uniqueness constraints must be defined at the highest level possible, and CoreStore will raise an assertion failure if unique constraints are added to a sub entity.
|
- parameter uniqueConstraints: sets uniqueness constraints for the entity. A uniqueness constraint is a set of one or more `KeyPath`s whose value must be unique over the set of instances of that entity. This value forms part of the entity's version hash. Uniqueness constraint violations can be computationally expensive to handle. It is highly suggested that there be only one uniqueness constraint per entity hierarchy. Uniqueness constraints must be defined at the highest level possible, and CoreStore will raise an assertion failure if unique constraints are added to a sub entity.
|
||||||
*/
|
*/
|
||||||
public init(_ type: O.Type, _ entityName: String, isAbstract: Bool = false, versionHashModifier: String? = nil, indexes: [[PartialKeyPath<O>]] = [], uniqueConstraints: [[PartialKeyPath<O>]] = []) {
|
@available(macOS 10.11, *)
|
||||||
|
public init(_ type: O.Type, _ entityName: String, isAbstract: Bool = false, versionHashModifier: String? = nil, indexes: [[PartialKeyPath<O>]] = [], uniqueConstraints: [[PartialKeyPath<O>]]) {
|
||||||
|
|
||||||
let meta = O.meta
|
let meta = O.meta
|
||||||
let toStringArray: ([PartialKeyPath<O>]) -> [KeyPathString] = {
|
let toStringArray: ([PartialKeyPath<O>]) -> [KeyPathString] = {
|
||||||
@@ -113,6 +137,38 @@ public final class Entity<O: CoreStoreObject>: DynamicEntity {
|
|||||||
uniqueConstraints: uniqueConstraints.map(toStringArray)
|
uniqueConstraints: uniqueConstraints.map(toStringArray)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes an `Entity`.
|
||||||
|
```
|
||||||
|
Entity(Animal.self, "Animal")
|
||||||
|
```
|
||||||
|
- parameter type: the `DynamicObject` type associated with the entity
|
||||||
|
- parameter entityName: the `NSEntityDescription` name to use for the entity
|
||||||
|
- parameter isAbstract: set to `true` if the entity is meant to be an abstract class and can only be initialized with subclass types.
|
||||||
|
- parameter versionHashModifier: the version hash modifier for the entity. Used to mark or denote an entity as being a different "version" than another even if all of the values which affect persistence are equal. (Such a difference is important in cases where, for example, the structure of an entity is unchanged but the format or content of data has changed.)
|
||||||
|
- parameter indexes: the compound indexes for the entity as an array of arrays. The arrays contained in the returned array contain KeyPath's to properties of the entity.
|
||||||
|
- parameter uniqueConstraints: sets uniqueness constraints for the entity. A uniqueness constraint is a set of one or more `KeyPath`s whose value must be unique over the set of instances of that entity. This value forms part of the entity's version hash. Uniqueness constraint violations can be computationally expensive to handle. It is highly suggested that there be only one uniqueness constraint per entity hierarchy. Uniqueness constraints must be defined at the highest level possible, and CoreStore will raise an assertion failure if unique constraints are added to a sub entity.
|
||||||
|
*/
|
||||||
|
public init(_ type: O.Type, _ entityName: String, isAbstract: Bool = false, versionHashModifier: String? = nil, indexes: [[PartialKeyPath<O>]] = []) {
|
||||||
|
|
||||||
|
let meta = O.meta
|
||||||
|
let toStringArray: ([PartialKeyPath<O>]) -> [KeyPathString] = {
|
||||||
|
|
||||||
|
return $0.map {
|
||||||
|
|
||||||
|
return (meta[keyPath: $0] as! AnyDynamicKeyPath).cs_keyPathString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.init(
|
||||||
|
type: type,
|
||||||
|
entityName: entityName,
|
||||||
|
isAbstract: isAbstract,
|
||||||
|
versionHashModifier: versionHashModifier,
|
||||||
|
indexes: indexes.map(toStringArray),
|
||||||
|
uniqueConstraints: []
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1047,7 +1047,7 @@ public final class ListMonitor<D: DynamicObject>: Hashable {
|
|||||||
|
|
||||||
private static func recreateFetchedResultsController(context: NSManagedObjectContext, from: From<ObjectType>, sectionBy: SectionBy<ObjectType>?, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest<NSManagedObject>) -> Void) -> (controller: CoreStoreFetchedResultsController, delegate: FetchedResultsControllerDelegate) {
|
private static func recreateFetchedResultsController(context: NSManagedObjectContext, from: From<ObjectType>, sectionBy: SectionBy<ObjectType>?, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest<NSManagedObject>) -> Void) -> (controller: CoreStoreFetchedResultsController, delegate: FetchedResultsControllerDelegate) {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
fetchRequest.resultType = .managedObjectResultType
|
fetchRequest.resultType = .managedObjectResultType
|
||||||
fetchRequest.fetchBatchSize = 20
|
fetchRequest.fetchBatchSize = 20
|
||||||
@@ -1056,7 +1056,7 @@ public final class ListMonitor<D: DynamicObject>: Hashable {
|
|||||||
|
|
||||||
let fetchedResultsController = CoreStoreFetchedResultsController(
|
let fetchedResultsController = CoreStoreFetchedResultsController(
|
||||||
context: context,
|
context: context,
|
||||||
fetchRequest: fetchRequest.dynamicCast(),
|
fetchRequest: fetchRequest,
|
||||||
from: from,
|
from: from,
|
||||||
sectionBy: sectionBy,
|
sectionBy: sectionBy,
|
||||||
applyFetchClauses: applyFetchClauses
|
applyFetchClauses: applyFetchClauses
|
||||||
@@ -1114,7 +1114,7 @@ public final class ListMonitor<D: DynamicObject>: Hashable {
|
|||||||
self.isPersistentStoreChanging = true
|
self.isPersistentStoreChanging = true
|
||||||
|
|
||||||
guard let removedStores = (note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore]).flatMap(Set.init),
|
guard let removedStores = (note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore]).flatMap(Set.init),
|
||||||
!Set((self.fetchedResultsController.fetchRequest as Any as! CoreStoreFetchRequest).safeAffectedStores ?? []).intersection(removedStores).isEmpty else {
|
!Set(self.fetchedResultsController.fetchRequest.affectedStores ?? []).intersection(removedStores).isEmpty else {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1135,7 +1135,7 @@ public final class ListMonitor<D: DynamicObject>: Hashable {
|
|||||||
|
|
||||||
if !self.isPendingRefetch {
|
if !self.isPendingRefetch {
|
||||||
|
|
||||||
let previousStores = Set((self.fetchedResultsController.fetchRequest as Any as! CoreStoreFetchRequest).safeAffectedStores ?? [])
|
let previousStores = Set(self.fetchedResultsController.fetchRequest.affectedStores ?? [])
|
||||||
let currentStores = previousStores
|
let currentStores = previousStores
|
||||||
.subtracting(note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore] ?? [])
|
.subtracting(note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore] ?? [])
|
||||||
.union(note.userInfo?[NSAddedPersistentStoresKey] as? [NSPersistentStore] ?? [])
|
.union(note.userInfo?[NSAddedPersistentStoresKey] as? [NSPersistentStore] ?? [])
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ fileprivate func createFRC<D: NSManagedObject>(fromContext context: NSManagedObj
|
|||||||
|
|
||||||
let controller = CoreStoreFetchedResultsController(
|
let controller = CoreStoreFetchedResultsController(
|
||||||
context: context,
|
context: context,
|
||||||
fetchRequest: CoreStoreFetchRequest().dynamicCast(),
|
fetchRequest: NSFetchRequest<NSManagedObject>(),
|
||||||
from: from,
|
from: from,
|
||||||
sectionBy: sectionBy,
|
sectionBy: sectionBy,
|
||||||
applyFetchClauses: { (fetchRequest) in
|
applyFetchClauses: { (fetchRequest) in
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ fileprivate func createFRC(fromContext context: NSManagedObjectContext, from: CS
|
|||||||
|
|
||||||
let controller = CoreStoreFetchedResultsController(
|
let controller = CoreStoreFetchedResultsController(
|
||||||
context: context,
|
context: context,
|
||||||
fetchRequest: CoreStoreFetchRequest().dynamicCast(),
|
fetchRequest: NSFetchRequest<NSManagedObject>(),
|
||||||
from: from.bridgeToSwift,
|
from: from.bridgeToSwift,
|
||||||
sectionBy: sectionBy?.bridgeToSwift,
|
sectionBy: sectionBy?.bridgeToSwift,
|
||||||
applyFetchClauses: { (fetchRequest) in
|
applyFetchClauses: { (fetchRequest) in
|
||||||
|
|||||||
@@ -36,105 +36,107 @@ extension NSManagedObjectContext {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
internal func fetchOne(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> NSManagedObject? {
|
internal func fetchOne(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> NSManagedObject? {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 1
|
fetchRequest.fetchLimit = 1
|
||||||
fetchRequest.resultType = .managedObjectResultType
|
fetchRequest.resultType = .managedObjectResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.fetchOne(fetchRequest.dynamicCast())
|
return try self.fetchOne(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func fetchAll<T: NSManagedObject>(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> [T] {
|
internal func fetchAll<T: NSManagedObject>(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> [T] {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<T>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
fetchRequest.resultType = .managedObjectResultType
|
fetchRequest.resultType = .managedObjectResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.fetchAll(fetchRequest.dynamicCast())
|
return try self.fetchAll(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func fetchCount(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> Int {
|
internal func fetchCount(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> Int {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSNumber>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
|
||||||
|
|
||||||
return try self.fetchCount(fetchRequest.dynamicCast())
|
fetchRequest.resultType = .countResultType
|
||||||
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
|
return try self.fetchCount(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func fetchObjectID(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> NSManagedObjectID? {
|
internal func fetchObjectID(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> NSManagedObjectID? {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObjectID>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 1
|
fetchRequest.fetchLimit = 1
|
||||||
fetchRequest.resultType = .managedObjectIDResultType
|
fetchRequest.resultType = .managedObjectIDResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.fetchObjectID(fetchRequest.dynamicCast())
|
return try self.fetchObjectID(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func fetchObjectIDs(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> [NSManagedObjectID] {
|
internal func fetchObjectIDs(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) throws -> [NSManagedObjectID] {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObjectID>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
fetchRequest.resultType = .managedObjectIDResultType
|
fetchRequest.resultType = .managedObjectIDResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.fetchObjectIDs(fetchRequest.dynamicCast())
|
return try self.fetchObjectIDs(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func deleteAll(_ from: CSFrom, _ deleteClauses: [CSDeleteClause]) throws -> Int {
|
internal func deleteAll(_ from: CSFrom, _ deleteClauses: [CSDeleteClause]) throws -> Int {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
fetchRequest.resultType = .managedObjectResultType
|
fetchRequest.resultType = .managedObjectResultType
|
||||||
fetchRequest.returnsObjectsAsFaults = true
|
fetchRequest.returnsObjectsAsFaults = true
|
||||||
fetchRequest.includesPropertyValues = false
|
fetchRequest.includesPropertyValues = false
|
||||||
deleteClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
deleteClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.deleteAll(fetchRequest.dynamicCast())
|
return try self.deleteAll(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func queryValue(_ from: CSFrom, _ selectClause: CSSelect, _ queryClauses: [CSQueryClause]) throws -> Any? {
|
internal func queryValue(_ from: CSFrom, _ selectClause: CSSelect, _ queryClauses: [CSQueryClause]) throws -> Any? {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSDictionary>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
|
|
||||||
selectClause.applyToFetchRequest(fetchRequest)
|
selectClause.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>)
|
||||||
queryClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
queryClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.queryValue(selectClause.selectTerms, fetchRequest: fetchRequest.dynamicCast())
|
return try self.queryValue(selectClause.selectTerms, fetchRequest: fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func queryAttributes(_ from: CSFrom, _ selectClause: CSSelect, _ queryClauses: [CSQueryClause]) throws -> [[String: Any]] {
|
internal func queryAttributes(_ from: CSFrom, _ selectClause: CSSelect, _ queryClauses: [CSQueryClause]) throws -> [[String: Any]] {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSDictionary>()
|
||||||
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
try from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
|
|
||||||
selectClause.applyToFetchRequest(fetchRequest)
|
selectClause.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>)
|
||||||
queryClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
queryClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
|
||||||
|
|
||||||
return try self.queryAttributes(fetchRequest.dynamicCast())
|
return try self.queryAttributes(fetchRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,14 +109,14 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func fetchOne<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> D? {
|
public func fetchOne<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> D? {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 1
|
fetchRequest.fetchLimit = 1
|
||||||
fetchRequest.resultType = .managedObjectResultType
|
fetchRequest.resultType = .managedObjectResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
|
||||||
return try self.fetchOne(fetchRequest.dynamicCast()).flatMap(from.entityClass.cs_fromRaw)
|
return try self.fetchOne(fetchRequest).flatMap(from.entityClass.cs_fromRaw)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
@@ -134,7 +134,7 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func fetchAll<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [D] {
|
public func fetchAll<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [D] {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
@@ -142,7 +142,7 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
|
||||||
let entityClass = from.entityClass
|
let entityClass = from.entityClass
|
||||||
return try self.fetchAll(fetchRequest.dynamicCast()).map(entityClass.cs_fromRaw)
|
return try self.fetchAll(fetchRequest).map(entityClass.cs_fromRaw)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
@@ -160,11 +160,13 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func fetchCount<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> Int {
|
public func fetchCount<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> Int {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSNumber>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
|
fetchRequest.resultType = .countResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
|
||||||
return try self.fetchCount(fetchRequest.dynamicCast())
|
return try self.fetchCount(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
@@ -182,14 +184,14 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func fetchObjectID<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> NSManagedObjectID? {
|
public func fetchObjectID<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> NSManagedObjectID? {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObjectID>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 1
|
fetchRequest.fetchLimit = 1
|
||||||
fetchRequest.resultType = .managedObjectIDResultType
|
fetchRequest.resultType = .managedObjectIDResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
|
||||||
return try self.fetchObjectID(fetchRequest.dynamicCast())
|
return try self.fetchObjectID(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
@@ -207,14 +209,14 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func fetchObjectIDs<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [NSManagedObjectID] {
|
public func fetchObjectIDs<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [NSManagedObjectID] {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObjectID>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
fetchRequest.resultType = .managedObjectIDResultType
|
fetchRequest.resultType = .managedObjectIDResultType
|
||||||
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
|
||||||
return try self.fetchObjectIDs(fetchRequest.dynamicCast())
|
return try self.fetchObjectIDs(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
@@ -263,7 +265,7 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func queryValue<D, U: QueryableAttributeType>(_ from: From<D>, _ selectClause: Select<D, U>, _ queryClauses: [QueryClause]) throws -> U? {
|
public func queryValue<D, U: QueryableAttributeType>(_ from: From<D>, _ selectClause: Select<D, U>, _ queryClauses: [QueryClause]) throws -> U? {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSDictionary>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
@@ -289,7 +291,7 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
public func queryAttributes<D>(_ from: From<D>, _ selectClause: Select<D, NSDictionary>, _ queryClauses: [QueryClause]) throws -> [[String: Any]] {
|
public func queryAttributes<D>(_ from: From<D>, _ selectClause: Select<D, NSDictionary>, _ queryClauses: [QueryClause]) throws -> [[String: Any]] {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSDictionary>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
@@ -320,7 +322,7 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
@nonobjc
|
@nonobjc
|
||||||
internal func deleteAll<D>(_ from: From<D>, _ deleteClauses: [FetchClause]) throws -> Int {
|
internal func deleteAll<D>(_ from: From<D>, _ deleteClauses: [FetchClause]) throws -> Int {
|
||||||
|
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
try from.applyToFetchRequest(fetchRequest, context: self)
|
try from.applyToFetchRequest(fetchRequest, context: self)
|
||||||
|
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
@@ -329,7 +331,7 @@ extension NSManagedObjectContext: FetchableSource, QueryableSource {
|
|||||||
fetchRequest.includesPropertyValues = false
|
fetchRequest.includesPropertyValues = false
|
||||||
deleteClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
deleteClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
|
||||||
return try self.deleteAll(fetchRequest.dynamicCast())
|
return try self.deleteAll(fetchRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -406,7 +408,7 @@ extension NSManagedObjectContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func fetchCount(_ fetchRequest: NSFetchRequest<NSFetchRequestResult>) throws -> Int {
|
internal func fetchCount(_ fetchRequest: NSFetchRequest<NSNumber>) throws -> Int {
|
||||||
|
|
||||||
var count = 0
|
var count = 0
|
||||||
var countError: Error?
|
var countError: Error?
|
||||||
@@ -465,7 +467,7 @@ extension NSManagedObjectContext {
|
|||||||
// MARK: Querying
|
// MARK: Querying
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func queryValue<D, U: QueryableAttributeType>(_ selectTerms: [SelectTerm<D>], fetchRequest: NSFetchRequest<NSFetchRequestResult>) throws -> U? {
|
internal func queryValue<D, U: QueryableAttributeType>(_ selectTerms: [SelectTerm<D>], fetchRequest: NSFetchRequest<NSDictionary>) throws -> U? {
|
||||||
|
|
||||||
var fetchResults: [Any]?
|
var fetchResults: [Any]?
|
||||||
var fetchError: Error?
|
var fetchError: Error?
|
||||||
@@ -498,7 +500,7 @@ extension NSManagedObjectContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func queryValue<D>(_ selectTerms: [SelectTerm<D>], fetchRequest: NSFetchRequest<NSFetchRequestResult>) throws -> Any? {
|
internal func queryValue<D>(_ selectTerms: [SelectTerm<D>], fetchRequest: NSFetchRequest<NSDictionary>) throws -> Any? {
|
||||||
|
|
||||||
var fetchResults: [Any]?
|
var fetchResults: [Any]?
|
||||||
var fetchError: Error?
|
var fetchError: Error?
|
||||||
@@ -531,7 +533,7 @@ extension NSManagedObjectContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
internal func queryAttributes(_ fetchRequest: NSFetchRequest<NSFetchRequestResult>) throws -> [[String: Any]] {
|
internal func queryAttributes(_ fetchRequest: NSFetchRequest<NSDictionary>) throws -> [[String: Any]] {
|
||||||
|
|
||||||
var fetchResults: [Any]?
|
var fetchResults: [Any]?
|
||||||
var fetchError: Error?
|
var fetchError: Error?
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ public final class ObjectMonitor<D: DynamicObject>: Equatable {
|
|||||||
private init(context: NSManagedObjectContext, object: ObjectType) {
|
private init(context: NSManagedObjectContext, object: ObjectType) {
|
||||||
|
|
||||||
let objectID = object.cs_id()
|
let objectID = object.cs_id()
|
||||||
let fetchRequest = CoreStoreFetchRequest()
|
let fetchRequest = NSFetchRequest<NSManagedObject>()
|
||||||
fetchRequest.entity = objectID.entity
|
fetchRequest.entity = objectID.entity
|
||||||
fetchRequest.fetchLimit = 0
|
fetchRequest.fetchLimit = 0
|
||||||
fetchRequest.resultType = .managedObjectResultType
|
fetchRequest.resultType = .managedObjectResultType
|
||||||
@@ -271,7 +271,7 @@ public final class ObjectMonitor<D: DynamicObject>: Equatable {
|
|||||||
|
|
||||||
let fetchedResultsController = CoreStoreFetchedResultsController(
|
let fetchedResultsController = CoreStoreFetchedResultsController(
|
||||||
context: context,
|
context: context,
|
||||||
fetchRequest: fetchRequest.dynamicCast(),
|
fetchRequest: fetchRequest,
|
||||||
from: From<ObjectType>([objectID.persistentStore?.configurationName]),
|
from: From<ObjectType>([objectID.persistentStore?.configurationName]),
|
||||||
applyFetchClauses: Where<ObjectType>("SELF", isEqualTo: objectID).applyToFetchRequest
|
applyFetchClauses: Where<ObjectType>("SELF", isEqualTo: objectID).applyToFetchRequest
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -722,7 +722,7 @@ public struct Select<D: DynamicObject, T: SelectResultType>: SelectClause, Hasha
|
|||||||
|
|
||||||
// MARK: Internal
|
// MARK: Internal
|
||||||
|
|
||||||
internal func applyToFetchRequest(_ fetchRequest: NSFetchRequest<NSFetchRequestResult>) {
|
internal func applyToFetchRequest(_ fetchRequest: NSFetchRequest<NSDictionary>) {
|
||||||
|
|
||||||
fetchRequest.includesPendingChanges = false
|
fetchRequest.includesPendingChanges = false
|
||||||
fetchRequest.resultType = .dictionaryResultType
|
fetchRequest.resultType = .dictionaryResultType
|
||||||
|
|||||||
Reference in New Issue
Block a user