diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index 1dea132..7dfa396 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -1427,9 +1427,11 @@ }; B52DD1731BE1F8CC00949AFE = { CreatedOnToolsVersion = 7.1; + LastSwiftMigration = 0800; }; B52DD17C1BE1F8CC00949AFE = { CreatedOnToolsVersion = 7.1; + LastSwiftMigration = 0800; }; B563216E1BD65082006C9394 = { CreatedOnToolsVersion = 7.0.1; @@ -2369,6 +2371,7 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -2391,6 +2394,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -2409,6 +2413,7 @@ SDKROOT = macosx; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -2427,6 +2432,7 @@ PRODUCT_NAME = CoreStoreTests; SDKROOT = macosx; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift index dcb8d45..c4aa4c0 100644 --- a/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/Fetching and Querying Demo/FetchingAndQueryingDemoViewController.swift @@ -168,7 +168,7 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.fetchAll( From(), - OrderBy(.ascending("name")) + OrderBy(.ascending(#keyPath(TimeZone.name))) )! } ), @@ -178,8 +178,8 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.fetchAll( From(), - Where("%K BEGINSWITH[c] %@", "name", "Asia"), - OrderBy(.ascending("secondsFromGMT")) + Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "Asia"), + OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT))) )! } ), @@ -189,9 +189,9 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.fetchAll( From(), - Where("%K BEGINSWITH[c] %@", "name", "America") - || Where("%K BEGINSWITH[c] %@", "name", "Europe"), - OrderBy(.ascending("secondsFromGMT")) + Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "America") + || Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "Europe"), + OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT))) )! } ), @@ -201,8 +201,8 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.fetchAll( From(), - !Where("%K BEGINSWITH[c] %@", "name", "America"), - OrderBy(.ascending("secondsFromGMT")) + !Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "America"), + OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT))) )! } ), @@ -213,7 +213,7 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.fetchAll( From(), Where("hasDaylightSavingTime", isEqualTo: true), - OrderBy(.ascending("name")) + OrderBy(.ascending(#keyPath(TimeZone.name))) )! } ) @@ -226,7 +226,7 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.queryValue( From(), - Select(.count("name")) + Select(.count(#keyPath(TimeZone.name))) )! } ), @@ -236,8 +236,8 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.queryValue( From(), - Select("abbreviation"), - Where("%K ENDSWITH[c] %@", "name", "Tokyo") + Select(#keyPath(TimeZone.abbreviation)), + Where("%K ENDSWITH[c] %@", #keyPath(TimeZone.name), "Tokyo") )! } ), @@ -247,8 +247,8 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.queryAttributes( From(), - Select("name", "abbreviation"), - OrderBy(.ascending("name")) + Select(#keyPath(TimeZone.name), #keyPath(TimeZone.abbreviation)), + OrderBy(.ascending(#keyPath(TimeZone.name))) )! } ), @@ -258,9 +258,9 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.queryAttributes( From(), - Select(.count("abbreviation"), "abbreviation"), - GroupBy("abbreviation"), - OrderBy(.ascending("secondsFromGMT"), .ascending("name")) + Select(.count(#keyPath(TimeZone.abbreviation)), #keyPath(TimeZone.abbreviation)), + GroupBy(#keyPath(TimeZone.abbreviation)), + OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT)), .ascending(#keyPath(TimeZone.name))) )! } ), @@ -271,11 +271,11 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo return Static.timeZonesStack.queryAttributes( From(), Select( - .count("hasDaylightSavingTime", as: "numberOfCountries"), - "hasDaylightSavingTime" + .count(#keyPath(TimeZone.hasDaylightSavingTime), as: "numberOfCountries"), + #keyPath(TimeZone.hasDaylightSavingTime) ), - GroupBy("hasDaylightSavingTime"), - OrderBy(.descending("hasDaylightSavingTime")) + GroupBy(#keyPath(TimeZone.hasDaylightSavingTime)), + OrderBy(.descending(#keyPath(TimeZone.hasDaylightSavingTime))) )! } ) diff --git a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift index 40925eb..5a84b73 100644 --- a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ListObserverDemoViewController.swift @@ -33,8 +33,8 @@ private struct Static { switch self { case .all: return Where(true) - case .light: return Where("brightness >= 0.9") - case .dark: return Where("brightness <= 0.4") + case .light: return Where("%K >= %@", #keyPath(Palette.brightness), 0.9) + case .dark: return Where("%K <= %@", #keyPath(Palette.brightness), 0.4) } } } @@ -59,8 +59,8 @@ private struct Static { return CoreStore.monitorSectionedList( From(), - SectionBy("colorName"), - OrderBy(.ascending("hue")) + SectionBy(#keyPath(Palette.colorName)), + OrderBy(.ascending(#keyPath(Palette.hue))) ) }() } diff --git a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ObjectObserverDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ObjectObserverDemoViewController.swift index c37d295..b887d3f 100644 --- a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ObjectObserverDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/ObjectObserverDemoViewController.swift @@ -50,7 +50,7 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver { required init?(coder aDecoder: NSCoder) { - if let palette = CoreStore.fetchOne(From(), OrderBy(.ascending("hue"))) { + if let palette = CoreStore.fetchOne(From(), OrderBy(.ascending(#keyPath(Palette.hue)))) { self.monitor = CoreStore.monitorObject(palette) } @@ -64,7 +64,7 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver { _ = transaction.commitAndWait() } - let palette = CoreStore.fetchOne(From(), OrderBy(.ascending("hue")))! + let palette = CoreStore.fetchOne(From(), OrderBy(.ascending(#keyPath(Palette.hue))))! self.monitor = CoreStore.monitorObject(palette) } @@ -176,15 +176,15 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver { self.hsbLabel?.text = palette.colorText - if changedKeys == nil || changedKeys?.contains("hue") == true { + if changedKeys == nil || changedKeys?.contains(#keyPath(Palette.hue)) == true { self.hueSlider?.value = Float(palette.hue) } - if changedKeys == nil || changedKeys?.contains("saturation") == true { + if changedKeys == nil || changedKeys?.contains(#keyPath(Palette.saturation)) == true { self.saturationSlider?.value = palette.saturation } - if changedKeys == nil || changedKeys?.contains("brightness") == true { + if changedKeys == nil || changedKeys?.contains(#keyPath(Palette.brightness)) == true { self.brightnessSlider?.value = palette.brightness } diff --git a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/Palette.swift b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/Palette.swift index c6c2fa8..5dfb3ef 100644 --- a/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/Palette.swift +++ b/CoreStoreDemo/CoreStoreDemo/List and Object Observers Demo/Palette.swift @@ -24,7 +24,7 @@ class Palette: NSManagedObject { get { - let KVCKey = "colorName" + let KVCKey = #keyPath(Palette.colorName) if let colorName = self.accessValueForKVCKey(KVCKey) as? String { return colorName @@ -49,7 +49,7 @@ class Palette: NSManagedObject { } set { - self.setValue(newValue, forKVCKey: "colorName") + self.setValue(newValue, forKVCKey: #keyPath(Palette.colorName)) } } diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift index 4880b11..ecf780e 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/MigrationsDemoViewController.swift @@ -241,7 +241,7 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD let count = dataStack.queryValue( From(model.entityType), - Select(.count("dna")))! + Select(.count(#keyPath(OrganismProtocol.dna))))! if count > 0 { self.setEnabled(true) diff --git a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3MigrationPolicy.swift b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3MigrationPolicy.swift index 482dee8..cbb9cbe 100644 --- a/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3MigrationPolicy.swift +++ b/CoreStoreDemo/CoreStoreDemo/MIgrations Demo/OrganismV2ToV3MigrationPolicy.swift @@ -16,8 +16,14 @@ class OrganismV2ToV3MigrationPolicy: NSEntityMigrationPolicy { for dInstance in manager.destinationInstances(forEntityMappingName: mapping.name, sourceInstances: [sInstance]) { - dInstance.setValue(false, forKey: "hasVertebrae") - dInstance.setValue(sInstance.value(forKey: "numberOfFlippers"), forKey: "numberOfLimbs") + dInstance.setValue( + false, + forKey: #keyPath(OrganismV3.hasVertebrae) + ) + dInstance.setValue( + sInstance.value(forKey: #keyPath(OrganismV2.numberOfFlippers)), + forKey: #keyPath(OrganismV3.numberOfLimbs) + ) } } } diff --git a/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift b/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift index f73dd89..ae748f4 100644 --- a/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift +++ b/CoreStoreDemo/CoreStoreDemo/Transactions Demo/TransactionsDemoViewController.swift @@ -140,7 +140,7 @@ class TransactionsDemoViewController: UIViewController, MKMapViewDelegate, Objec mapView.setCenter(object.coordinate, animated: true) mapView.selectAnnotation(object, animated: true) - if changedPersistentKeys.contains("latitude") || changedPersistentKeys.contains("longitude") { + if changedPersistentKeys.contains(#keyPath(Place.latitude) || changedPersistentKeys.contains(#keyPath(Place.longitude)) { self.geocode(place: object) } diff --git a/CoreStoreTests/FetchTests.swift b/CoreStoreTests/FetchTests.swift index 3c11a29..7963785 100644 --- a/CoreStoreTests/FetchTests.swift +++ b/CoreStoreTests/FetchTests.swift @@ -43,7 +43,7 @@ final class FetchTests: BaseTestDataTestCase { let from = From() let fetchClauses: [FetchClause] = [ - OrderBy(.ascending("testEntityID")) + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses)! do { @@ -121,7 +121,7 @@ final class FetchTests: BaseTestDataTestCase { let from = From() let fetchClauses: [FetchClause] = [ - OrderBy(.ascending("testEntityID")) + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses)! do { @@ -236,8 +236,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -250,8 +250,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -264,8 +264,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -280,8 +280,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -294,8 +294,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -308,8 +308,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -324,8 +324,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -342,8 +342,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -375,8 +375,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -389,8 +389,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -403,8 +403,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -419,8 +419,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -433,8 +433,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -447,8 +447,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -463,8 +463,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -477,8 +477,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -491,8 +491,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -507,8 +507,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -525,8 +525,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -558,8 +558,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -572,8 +572,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -586,8 +586,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -602,8 +602,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -616,8 +616,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -630,8 +630,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -646,8 +646,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -660,8 +660,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -674,8 +674,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = stack.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -701,8 +701,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -727,8 +727,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -753,8 +753,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -771,8 +771,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -797,8 +797,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -823,8 +823,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -841,8 +841,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.ascending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -859,8 +859,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("testNumber", isEqualTo: 0), - OrderBy(.descending("testEntityID")) + Where(#keyPath(TestEntity1.testNumber), isEqualTo: 0), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -892,8 +892,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -915,8 +915,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -938,8 +938,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -956,8 +956,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -981,8 +981,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1006,8 +1006,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -1024,8 +1024,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1049,8 +1049,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1074,8 +1074,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -1092,7 +1092,7 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - OrderBy(.ascending("testEntityID")) + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -1109,7 +1109,7 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - OrderBy(.descending("testEntityID")) + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -1141,8 +1141,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1164,8 +1164,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1187,8 +1187,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -1205,8 +1205,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1230,8 +1230,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1255,8 +1255,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -1273,8 +1273,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1298,8 +1298,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = stack.fetchAll(from, fetchClauses) @@ -1323,8 +1323,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = stack.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -1353,8 +1353,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1364,8 +1364,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1375,8 +1375,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1389,8 +1389,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1400,8 +1400,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1411,8 +1411,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1427,8 +1427,8 @@ final class FetchTests: BaseTestDataTestCase { stack.fetchCount( from, - Where("%K < %@", "testNumber", 4), - OrderBy(.ascending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -1439,8 +1439,8 @@ final class FetchTests: BaseTestDataTestCase { stack.fetchCount( from, - Where("testNumber", isEqualTo: 0), - OrderBy(.descending("testEntityID")) + Where(#keyPath(TestEntity1.testNumber), isEqualTo: 0), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -1464,8 +1464,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1475,8 +1475,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1486,8 +1486,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1500,8 +1500,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1511,8 +1511,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1522,8 +1522,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1536,8 +1536,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1547,8 +1547,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1558,8 +1558,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1574,8 +1574,8 @@ final class FetchTests: BaseTestDataTestCase { stack.fetchCount( from, - Where("%K < %@", "testNumber", 4), - OrderBy(.ascending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -1586,8 +1586,8 @@ final class FetchTests: BaseTestDataTestCase { stack.fetchCount( from, - Where("testNumber", isEqualTo: 0), - OrderBy(.descending("testEntityID")) + Where(#keyPath(TestEntity1.testNumber), isEqualTo: 0), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -1611,8 +1611,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1622,8 +1622,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1633,8 +1633,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1647,8 +1647,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1658,8 +1658,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1669,8 +1669,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1683,8 +1683,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1694,8 +1694,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -1705,8 +1705,8 @@ final class FetchTests: BaseTestDataTestCase { let count = stack.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -1729,8 +1729,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1743,8 +1743,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1757,8 +1757,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -1773,8 +1773,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1787,8 +1787,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1801,8 +1801,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -1817,8 +1817,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -1835,8 +1835,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -1868,8 +1868,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1882,8 +1882,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1896,8 +1896,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -1912,8 +1912,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1926,8 +1926,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1940,8 +1940,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -1956,8 +1956,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1970,8 +1970,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -1984,8 +1984,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -2000,8 +2000,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -2018,8 +2018,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = self.expectLogger([.logWarning]) { @@ -2051,8 +2051,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -2065,8 +2065,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -2079,8 +2079,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -2095,8 +2095,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -2109,8 +2109,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -2123,8 +2123,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -2139,8 +2139,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -2153,8 +2153,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.descending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNotNil(object) @@ -2167,8 +2167,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let object = transaction.fetchOne(from, fetchClauses) XCTAssertNil(object) @@ -2194,8 +2194,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2220,8 +2220,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2246,8 +2246,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2264,8 +2264,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2290,8 +2290,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2316,8 +2316,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2334,8 +2334,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 4), - OrderBy(.ascending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -2352,8 +2352,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("testNumber", isEqualTo: 0), - OrderBy(.descending("testEntityID")) + Where(#keyPath(TestEntity1.testNumber), isEqualTo: 0), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -2385,8 +2385,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2408,8 +2408,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2431,8 +2431,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2449,8 +2449,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2474,8 +2474,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2499,8 +2499,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2517,8 +2517,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2542,8 +2542,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2567,8 +2567,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2585,7 +2585,7 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - OrderBy(.ascending("testEntityID")) + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -2602,7 +2602,7 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - OrderBy(.descending("testEntityID")) + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ] let objects = self.expectLogger([.logWarning]) { @@ -2634,8 +2634,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2657,8 +2657,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2680,8 +2680,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2698,8 +2698,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2723,8 +2723,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2748,8 +2748,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2766,8 +2766,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2791,8 +2791,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ] let objects = transaction.fetchAll(from, fetchClauses) @@ -2816,8 +2816,8 @@ final class FetchTests: BaseTestDataTestCase { do { let fetchClauses: [FetchClause] = [ - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] let objects = transaction.fetchAll(from, fetchClauses) XCTAssertNotNil(objects) @@ -2846,8 +2846,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -2857,8 +2857,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -2868,8 +2868,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -2882,8 +2882,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -2893,8 +2893,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 5), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -2904,8 +2904,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -2920,8 +2920,8 @@ final class FetchTests: BaseTestDataTestCase { transaction.fetchCount( from, - Where("%K < %@", "testNumber", 4), - OrderBy(.ascending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -2932,8 +2932,8 @@ final class FetchTests: BaseTestDataTestCase { transaction.fetchCount( from, - Where("testNumber", isEqualTo: 0), - OrderBy(.descending("testEntityID")) + Where(#keyPath(TestEntity1.testNumber), isEqualTo: 0), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -2957,8 +2957,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -2968,8 +2968,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -2979,8 +2979,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -2993,8 +2993,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3004,8 +3004,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3015,8 +3015,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -3029,8 +3029,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3040,8 +3040,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3051,8 +3051,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -3067,8 +3067,8 @@ final class FetchTests: BaseTestDataTestCase { transaction.fetchCount( from, - Where("%K < %@", "testNumber", 4), - OrderBy(.ascending("testEntityID")) + Where("%K < %@", #keyPath(TestEntity1.testNumber), 4), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -3079,8 +3079,8 @@ final class FetchTests: BaseTestDataTestCase { transaction.fetchCount( from, - Where("testNumber", isEqualTo: 0), - OrderBy(.descending("testEntityID")) + Where(#keyPath(TestEntity1.testNumber), isEqualTo: 0), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))) ) } XCTAssertNil(count) @@ -3104,8 +3104,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3115,8 +3115,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3126,8 +3126,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -3140,8 +3140,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3151,8 +3151,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3162,8 +3162,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) @@ -3176,8 +3176,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")), + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3187,8 +3187,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K < %@", "testNumber", 3), - OrderBy(.descending("testEntityID")), + Where("%K < %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.descending(#keyPath(TestEntity1.testEntityID))), Tweak { $0.fetchLimit = 3 } ) XCTAssertNotNil(count) @@ -3198,8 +3198,8 @@ final class FetchTests: BaseTestDataTestCase { let count = transaction.fetchCount( from, - Where("%K > %@", "testNumber", 5), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 5), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ) XCTAssertNotNil(count) XCTAssertEqual(count, 0) diff --git a/CoreStoreTests/GroupByTests.swift b/CoreStoreTests/GroupByTests.swift index 90ad2c7..a5a9336 100644 --- a/CoreStoreTests/GroupByTests.swift +++ b/CoreStoreTests/GroupByTests.swift @@ -66,7 +66,7 @@ final class GroupByTests: BaseTestCase { self.prepareStack { (dataStack) in - let groupBy = GroupBy("testString") + let groupBy = GroupBy(#keyPath(TestEntity1.testString)) let request = NSFetchRequest() _ = From().applyToFetchRequest(request, context: dataStack.mainContext) diff --git a/CoreStoreTests/ImportTests.swift b/CoreStoreTests/ImportTests.swift index 58fe061..22584a3 100644 --- a/CoreStoreTests/ImportTests.swift +++ b/CoreStoreTests/ImportTests.swift @@ -45,12 +45,12 @@ class ImportTests: BaseTestDataTestCase { let object = try transaction.importObject( Into(), source: [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 1), - "testDecimal": NSDecimalNumber(string: "1"), - "testString": "nil:TestEntity1:1", - "testData": ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 1), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "1"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:1", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, "skip_insert": "" ] ) @@ -78,12 +78,12 @@ class ImportTests: BaseTestDataTestCase { let _ = try transaction.importObject( Into(), source: [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 1), - "testDecimal": NSDecimalNumber(string: "1"), - "testString": "nil:TestEntity1:1", - "testData": ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 1), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "1"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:1", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, "throw_on_insert": "" ] ) @@ -126,12 +126,12 @@ class ImportTests: BaseTestDataTestCase { let object = try transaction.importObject( Into(), source: [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 1), - "testDecimal": NSDecimalNumber(string: "1"), - "testString": "nil:TestEntity1:1", - "testData": ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-01T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 1), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "1"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:1", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-01T00:00:00Z")! ] ) XCTAssertNotNil(object) @@ -147,12 +147,12 @@ class ImportTests: BaseTestDataTestCase { try transaction.importObject( object!, source: [ - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 2), - "testDecimal": NSDecimalNumber(string: "2"), - "testString": "nil:TestEntity1:2", - "testData": ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 2), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "2"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:2", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! ] ) XCTAssertEqual(transaction.fetchCount(From()), 1) @@ -184,21 +184,21 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 1), - "testDecimal": NSDecimalNumber(string: "1"), - "testString": "nil:TestEntity1:1", - "testData": ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 1), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "1"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:1", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, "skip_insert": "" ], [ - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 2), - "testDecimal": NSDecimalNumber(string: "2"), - "testString": "nil:TestEntity1:2", - "testData": ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 2), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "2"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:2", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! ] ] let objects = try transaction.importObjects( @@ -211,12 +211,12 @@ class ImportTests: BaseTestDataTestCase { let object = objects[0] let dictionary = sourceArray[1] XCTAssertNil(object.testEntityID) - XCTAssertEqual(object.testBoolean, dictionary["testBoolean"] as? NSNumber) - XCTAssertEqual(object.testNumber, dictionary["testNumber"] as? NSNumber) - XCTAssertEqual(object.testDecimal, dictionary["testDecimal"] as? NSDecimalNumber) - XCTAssertEqual(object.testString, dictionary["testString"] as? String) - XCTAssertEqual(object.testData, dictionary["testData"] as? Data) - XCTAssertEqual(object.testDate, dictionary["testDate"] as? Date) + XCTAssertEqual(object.testBoolean, dictionary[(#keyPath(TestEntity1.testBoolean))] as? NSNumber) + XCTAssertEqual(object.testNumber, dictionary[(#keyPath(TestEntity1.testNumber))] as? NSNumber) + XCTAssertEqual(object.testDecimal, dictionary[(#keyPath(TestEntity1.testDecimal))] as? NSDecimalNumber) + XCTAssertEqual(object.testString, dictionary[(#keyPath(TestEntity1.testString))] as? String) + XCTAssertEqual(object.testData, dictionary[(#keyPath(TestEntity1.testData))] as? Data) + XCTAssertEqual(object.testDate, dictionary[(#keyPath(TestEntity1.testDate))] as? Date) } catch { @@ -239,21 +239,21 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 1), - "testDecimal": NSDecimalNumber(string: "1"), - "testString": "nil:TestEntity1:1", - "testData": ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 1), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "1"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:1", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-01T00:00:00Z")!, "throw_on_insert": "" ], [ - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 2), - "testDecimal": NSDecimalNumber(string: "2"), - "testString": "nil:TestEntity1:2", - "testData": ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 2), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "2"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:2", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! ] ] let _ = try transaction.importObjects( @@ -298,20 +298,20 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 1), - "testDecimal": NSDecimalNumber(string: "1"), - "testString": "nil:TestEntity1:1", - "testData": ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-01T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 1), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "1"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:1", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:1" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-01T00:00:00Z")! ], [ - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 2), - "testDecimal": NSDecimalNumber(string: "2"), - "testString": "nil:TestEntity1:2", - "testData": ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 2), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "2"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:2", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:2" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-02T00:00:00Z")! ] ] let objects = try transaction.importObjects( @@ -327,12 +327,12 @@ class ImportTests: BaseTestDataTestCase { let dictionary = sourceArray[i] XCTAssertNil(object.testEntityID) - XCTAssertEqual(object.testBoolean, dictionary["testBoolean"] as? NSNumber) - XCTAssertEqual(object.testNumber, dictionary["testNumber"] as? NSNumber) - XCTAssertEqual(object.testDecimal, dictionary["testDecimal"] as? NSDecimalNumber) - XCTAssertEqual(object.testString, dictionary["testString"] as? String) - XCTAssertEqual(object.testData, dictionary["testData"] as? Data) - XCTAssertEqual(object.testDate, dictionary["testDate"] as? Date) + XCTAssertEqual(object.testBoolean, dictionary[(#keyPath(TestEntity1.testBoolean))] as? NSNumber) + XCTAssertEqual(object.testNumber, dictionary[(#keyPath(TestEntity1.testNumber))] as? NSNumber) + XCTAssertEqual(object.testDecimal, dictionary[(#keyPath(TestEntity1.testDecimal))] as? NSDecimalNumber) + XCTAssertEqual(object.testString, dictionary[(#keyPath(TestEntity1.testString))] as? String) + XCTAssertEqual(object.testData, dictionary[(#keyPath(TestEntity1.testData))] as? Data) + XCTAssertEqual(object.testDate, dictionary[(#keyPath(TestEntity1.testDate))] as? Date) } } catch { @@ -358,13 +358,13 @@ class ImportTests: BaseTestDataTestCase { let object = try transaction.importUniqueObject( Into(), source: [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "skip_insert": "" ] ) @@ -380,20 +380,20 @@ class ImportTests: BaseTestDataTestCase { let object = try transaction.importUniqueObject( Into(), source: [ - "testEntityID": NSNumber(value: 105), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 105), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "skip_update": "" ] ) XCTAssertNil(object) XCTAssertEqual(transaction.fetchCount(From()), 5) - let existingObjects = transaction.fetchAll(From(), Where("testEntityID", isEqualTo: 105)) + let existingObjects = transaction.fetchAll(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105)) XCTAssertNotNil(existingObjects) XCTAssertEqual(existingObjects?.count, 1) @@ -431,13 +431,13 @@ class ImportTests: BaseTestDataTestCase { let _ = try transaction.importUniqueObject( Into(), source: [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "throw_on_insert": "" ] ) @@ -448,7 +448,7 @@ class ImportTests: BaseTestDataTestCase { errorExpectation.fulfill() XCTAssertEqual(transaction.fetchCount(From()), 6) - let object = transaction.fetchOne(From(), Where("testEntityID", isEqualTo: 106)) + let object = transaction.fetchOne(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106)) XCTAssertNotNil(object) XCTAssertEqual(object?.testEntityID, NSNumber(value: 106)) XCTAssertNil(object?.testBoolean) @@ -472,13 +472,13 @@ class ImportTests: BaseTestDataTestCase { let _ = try transaction.importUniqueObject( Into(), source: [ - "testEntityID": NSNumber(value: 105), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 105), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "throw_on_update": "" ] ) @@ -489,7 +489,7 @@ class ImportTests: BaseTestDataTestCase { errorExpectation.fulfill() XCTAssertEqual(transaction.fetchCount(From()), 6) - let existingObjects = transaction.fetchAll(From(), Where("testEntityID", isEqualTo: 105)) + let existingObjects = transaction.fetchAll(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105)) XCTAssertNotNil(existingObjects) XCTAssertEqual(existingObjects?.count, 1) @@ -528,13 +528,13 @@ class ImportTests: BaseTestDataTestCase { let object = try transaction.importUniqueObject( Into(), source: [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")! + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")! ] ) XCTAssertNotNil(object) @@ -557,13 +557,13 @@ class ImportTests: BaseTestDataTestCase { let object = try transaction.importUniqueObject( Into(), source: [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 7), - "testDecimal": NSDecimalNumber(string: "7"), - "testString": "nil:TestEntity1:7", - "testData": ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-07T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 7), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "7"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:7", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-07T00:00:00Z")!, ] ) XCTAssertNotNil(object) @@ -577,7 +577,7 @@ class ImportTests: BaseTestDataTestCase { XCTAssertEqual(object?.testData, ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!) XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-07T00:00:00Z")!) - let existingObjects = transaction.fetchAll(From(), Where("testEntityID", isEqualTo: 106)) + let existingObjects = transaction.fetchAll(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106)) XCTAssertNotNil(existingObjects) XCTAssertEqual(existingObjects?.count, 1) @@ -606,23 +606,23 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "skip_insert": "" ], [ - "testEntityID": NSNumber(value: 107), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 7), - "testDecimal": NSDecimalNumber(string: "7"), - "testString": "nil:TestEntity1:7", - "testData": ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-07T00:00:00Z")! + #keyPath(TestEntity1.testEntityID): NSNumber(value: 107), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 7), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "7"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:7", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-07T00:00:00Z")! ] ] let objects = try transaction.importUniqueObjects( @@ -634,13 +634,13 @@ class ImportTests: BaseTestDataTestCase { let object = objects[0] let dictionary = sourceArray[1] - XCTAssertEqual(object.testEntityID, dictionary["testEntityID"] as? NSNumber) - XCTAssertEqual(object.testBoolean, dictionary["testBoolean"] as? NSNumber) - XCTAssertEqual(object.testNumber, dictionary["testNumber"] as? NSNumber) - XCTAssertEqual(object.testDecimal, dictionary["testDecimal"] as? NSDecimalNumber) - XCTAssertEqual(object.testString, dictionary["testString"] as? String) - XCTAssertEqual(object.testData, dictionary["testData"] as? Data) - XCTAssertEqual(object.testDate, dictionary["testDate"] as? Date) + XCTAssertEqual(object.testEntityID, dictionary[(#keyPath(TestEntity1.testEntityID))] as? NSNumber) + XCTAssertEqual(object.testBoolean, dictionary[(#keyPath(TestEntity1.testBoolean))] as? NSNumber) + XCTAssertEqual(object.testNumber, dictionary[(#keyPath(TestEntity1.testNumber))] as? NSNumber) + XCTAssertEqual(object.testDecimal, dictionary[(#keyPath(TestEntity1.testDecimal))] as? NSDecimalNumber) + XCTAssertEqual(object.testString, dictionary[(#keyPath(TestEntity1.testString))] as? String) + XCTAssertEqual(object.testData, dictionary[(#keyPath(TestEntity1.testData))] as? Data) + XCTAssertEqual(object.testDate, dictionary[(#keyPath(TestEntity1.testDate))] as? Date) } catch { @@ -665,23 +665,23 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "throw_on_id": "" ], [ - "testEntityID": NSNumber(value: 107), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 7), - "testDecimal": NSDecimalNumber(string: "7"), - "testString": "nil:TestEntity1:7", - "testData": ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-07T00:00:00Z")! + #keyPath(TestEntity1.testEntityID): NSNumber(value: 107), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 7), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "7"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:7", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-07T00:00:00Z")! ] ] let _ = try transaction.importUniqueObjects( @@ -695,8 +695,8 @@ class ImportTests: BaseTestDataTestCase { errorExpectation.fulfill() XCTAssertEqual(transaction.fetchCount(From()), 5) - XCTAssertNil(transaction.fetchOne(From(), Where("testEntityID", isEqualTo: 106))) - XCTAssertNil(transaction.fetchOne(From(), Where("testEntityID", isEqualTo: 107))) + XCTAssertNil(transaction.fetchOne(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))) + XCTAssertNil(transaction.fetchOne(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 107))) } catch { @@ -712,23 +712,23 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "throw_on_insert": "" ], [ - "testEntityID": NSNumber(value: 107), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 7), - "testDecimal": NSDecimalNumber(string: "7"), - "testString": "nil:TestEntity1:7", - "testData": ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-07T00:00:00Z")! + #keyPath(TestEntity1.testEntityID): NSNumber(value: 107), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 7), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "7"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:7", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-07T00:00:00Z")! ] ] let _ = try transaction.importUniqueObjects( @@ -741,7 +741,7 @@ class ImportTests: BaseTestDataTestCase { errorExpectation.fulfill() - let object = transaction.fetchOne(From(), Where("testEntityID", isEqualTo: 106)) + let object = transaction.fetchOne(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106)) XCTAssertNotNil(object) XCTAssertEqual(object?.testEntityID, NSNumber(value: 106)) XCTAssertNil(object?.testBoolean) @@ -765,13 +765,13 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testEntityID": NSNumber(value: 105), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, + #keyPath(TestEntity1.testEntityID): NSNumber(value: 105), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")!, "throw_on_update": "" ] ] @@ -786,7 +786,7 @@ class ImportTests: BaseTestDataTestCase { errorExpectation.fulfill() XCTAssertEqual(transaction.fetchCount(From()), 5) - let object = transaction.fetchOne(From(), Where("testEntityID", isEqualTo: 105)) + let object = transaction.fetchOne(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105)) XCTAssertNotNil(object) XCTAssertEqual(object?.testEntityID, NSNumber(value: 105)) XCTAssertEqual(object?.testBoolean, NSNumber(value: true)) @@ -796,7 +796,7 @@ class ImportTests: BaseTestDataTestCase { XCTAssertEqual(object?.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!) XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!) - let existingObjects = transaction.fetchAll(From(), Where("testEntityID", isEqualTo: 105)) + let existingObjects = transaction.fetchAll(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105)) XCTAssertNotNil(existingObjects) XCTAssertEqual(existingObjects?.count, 1) @@ -826,22 +826,22 @@ class ImportTests: BaseTestDataTestCase { let sourceArray: [TestEntity1.ImportSource] = [ [ - "testEntityID": NSNumber(value: 105), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 15), - "testDecimal": NSDecimalNumber(string: "15"), - "testString": "nil:TestEntity1:15", - "testData": ("nil:TestEntity1:15" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-15T00:00:00Z")! + #keyPath(TestEntity1.testEntityID): NSNumber(value: 105), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 15), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "15"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:15", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:15" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-15T00:00:00Z")! ], [ - "testEntityID": NSNumber(value: 106), - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 6), - "testDecimal": NSDecimalNumber(string: "6"), - "testString": "nil:TestEntity1:6", - "testData": ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-06T00:00:00Z")! + #keyPath(TestEntity1.testEntityID): NSNumber(value: 106), + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 6), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "6"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:6", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:6" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-06T00:00:00Z")! ] ] let objects = try transaction.importUniqueObjects( @@ -855,15 +855,15 @@ class ImportTests: BaseTestDataTestCase { let object = objects[i] let dictionary = sourceArray[i] - XCTAssertEqual(object.testEntityID, dictionary["testEntityID"] as? NSNumber) - XCTAssertEqual(object.testBoolean, dictionary["testBoolean"] as? NSNumber) - XCTAssertEqual(object.testNumber, dictionary["testNumber"] as? NSNumber) - XCTAssertEqual(object.testDecimal, dictionary["testDecimal"] as? NSDecimalNumber) - XCTAssertEqual(object.testString, dictionary["testString"] as? String) - XCTAssertEqual(object.testData, dictionary["testData"] as? Data) - XCTAssertEqual(object.testDate, dictionary["testDate"] as? Date) + XCTAssertEqual(object.testEntityID, dictionary[(#keyPath(TestEntity1.testEntityID))] as? NSNumber) + XCTAssertEqual(object.testBoolean, dictionary[(#keyPath(TestEntity1.testBoolean))] as? NSNumber) + XCTAssertEqual(object.testNumber, dictionary[(#keyPath(TestEntity1.testNumber))] as? NSNumber) + XCTAssertEqual(object.testDecimal, dictionary[(#keyPath(TestEntity1.testDecimal))] as? NSDecimalNumber) + XCTAssertEqual(object.testString, dictionary[(#keyPath(TestEntity1.testString))] as? String) + XCTAssertEqual(object.testData, dictionary[(#keyPath(TestEntity1.testData))] as? Data) + XCTAssertEqual(object.testDate, dictionary[(#keyPath(TestEntity1.testDate))] as? Date) } - let existingObjects = transaction.fetchAll(From(), Where("testEntityID", isEqualTo: 105)) + let existingObjects = transaction.fetchAll(From(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105)) XCTAssertNotNil(existingObjects) XCTAssertEqual(existingObjects?.count, 1) @@ -915,12 +915,12 @@ extension TestEntity1: ImportableUniqueObject { throw TestInsertError() } - self.testBoolean = source["testBoolean"] as? NSNumber - self.testNumber = source["testNumber"] as? NSNumber - self.testDecimal = source["testDecimal"] as? NSDecimalNumber - self.testString = source["testString"] as? String - self.testData = source["testData"] as? Data - self.testDate = source["testDate"] as? Date + self.testBoolean = source[(#keyPath(TestEntity1.testBoolean))] as? NSNumber + self.testNumber = source[(#keyPath(TestEntity1.testNumber))] as? NSNumber + self.testDecimal = source[(#keyPath(TestEntity1.testDecimal))] as? NSDecimalNumber + self.testString = source[(#keyPath(TestEntity1.testString))] as? String + self.testData = source[(#keyPath(TestEntity1.testData))] as? Data + self.testDate = source[(#keyPath(TestEntity1.testDate))] as? Date self.testNil = nil } @@ -931,7 +931,7 @@ extension TestEntity1: ImportableUniqueObject { static var uniqueIDKeyPath: String { - return "testEntityID" + return #keyPath(TestEntity1.testEntityID) } var uniqueIDValue: NSNumber { @@ -962,7 +962,7 @@ extension TestEntity1: ImportableUniqueObject { throw TestIDError() } - return source["testEntityID"] as? NSNumber + return source[(#keyPath(TestEntity1.testEntityID))] as? NSNumber } func updateFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) throws { @@ -971,12 +971,12 @@ extension TestEntity1: ImportableUniqueObject { throw TestUpdateError() } - self.testBoolean = source["testBoolean"] as? NSNumber - self.testNumber = source["testNumber"] as? NSNumber - self.testDecimal = source["testDecimal"] as? NSDecimalNumber - self.testString = source["testString"] as? String - self.testData = source["testData"] as? Data - self.testDate = source["testDate"] as? Date + self.testBoolean = source[(#keyPath(TestEntity1.testBoolean))] as? NSNumber + self.testNumber = source[(#keyPath(TestEntity1.testNumber))] as? NSNumber + self.testDecimal = source[(#keyPath(TestEntity1.testDecimal))] as? NSDecimalNumber + self.testString = source[(#keyPath(TestEntity1.testString))] as? String + self.testData = source[(#keyPath(TestEntity1.testData))] as? Data + self.testDate = source[(#keyPath(TestEntity1.testDate))] as? Date self.testNil = nil } } diff --git a/CoreStoreTests/ListObserverTests.swift b/CoreStoreTests/ListObserverTests.swift index 143af1e..987d4de 100644 --- a/CoreStoreTests/ListObserverTests.swift +++ b/CoreStoreTests/ListObserverTests.swift @@ -43,8 +43,8 @@ class ListObserverTests: BaseTestDataTestCase { let observer = TestListObserver() let monitor = stack.monitorSectionedList( From(), - SectionBy("testBoolean"), - OrderBy(.ascending("testBoolean"), .ascending("testEntityID")) + SectionBy(#keyPath(TestEntity1.testBoolean)), + OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID))) ) monitor.addObserver(observer) @@ -171,8 +171,8 @@ class ListObserverTests: BaseTestDataTestCase { let observer = TestListObserver() let monitor = stack.monitorSectionedList( From(), - SectionBy("testBoolean"), - OrderBy(.ascending("testBoolean"), .ascending("testEntityID")) + SectionBy(#keyPath(TestEntity1.testBoolean)), + OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID))) ) monitor.addObserver(observer) @@ -272,7 +272,7 @@ class ListObserverTests: BaseTestDataTestCase { if let object = transaction.fetchOne( From(), - Where("testEntityID", isEqualTo: 101)) { + Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) { object.testNumber = NSNumber(value: 11) object.testDecimal = NSDecimalNumber(string: "11") @@ -286,7 +286,7 @@ class ListObserverTests: BaseTestDataTestCase { } if let object = transaction.fetchOne( From(), - Where("testEntityID", isEqualTo: 102)) { + Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 102)) { object.testNumber = NSNumber(value: 22) object.testDecimal = NSDecimalNumber(string: "22") @@ -325,8 +325,8 @@ class ListObserverTests: BaseTestDataTestCase { let observer = TestListObserver() let monitor = stack.monitorSectionedList( From(), - SectionBy("testBoolean"), - OrderBy(.ascending("testBoolean"), .ascending("testEntityID")) + SectionBy(#keyPath(TestEntity1.testBoolean)), + OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID))) ) monitor.addObserver(observer) @@ -398,7 +398,7 @@ class ListObserverTests: BaseTestDataTestCase { if let object = transaction.fetchOne( From(), - Where("testEntityID", isEqualTo: 102)) { + Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 102)) { object.testBoolean = NSNumber(value: true) } @@ -433,8 +433,8 @@ class ListObserverTests: BaseTestDataTestCase { let observer = TestListObserver() let monitor = stack.monitorSectionedList( From(), - SectionBy("testBoolean"), - OrderBy(.ascending("testBoolean"), .ascending("testEntityID")) + SectionBy(#keyPath(TestEntity1.testBoolean)), + OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID))) ) monitor.addObserver(observer) @@ -533,7 +533,7 @@ class ListObserverTests: BaseTestDataTestCase { transaction.deleteAll( From(), - Where("testBoolean", isEqualTo: false) + Where(#keyPath(TestEntity1.testBoolean), isEqualTo: false) ) transaction.commit { (result) in diff --git a/CoreStoreTests/ObjectObserverTests.swift b/CoreStoreTests/ObjectObserverTests.swift index fd96104..7884462 100644 --- a/CoreStoreTests/ObjectObserverTests.swift +++ b/CoreStoreTests/ObjectObserverTests.swift @@ -44,7 +44,7 @@ class ObjectObserverTests: BaseTestDataTestCase { guard let object = stack.fetchOne( From(), - Where("testEntityID", isEqualTo: 101)) else { + Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) else { XCTFail() return @@ -87,8 +87,8 @@ class ObjectObserverTests: BaseTestDataTestCase { "object": object, "changedPersistentKeys": Set( [ - "testNumber", - "testString" + #keyPath(TestEntity1.testNumber), + #keyPath(TestEntity1.testString) ] ) ] as NSDictionary @@ -141,7 +141,7 @@ class ObjectObserverTests: BaseTestDataTestCase { guard let object = stack.fetchOne( From(), - Where("testEntityID", isEqualTo: 101)) else { + Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) else { XCTFail() return diff --git a/CoreStoreTests/QueryTests.swift b/CoreStoreTests/QueryTests.swift index f613bd3..d77b86c 100644 --- a/CoreStoreTests/QueryTests.swift +++ b/CoreStoreTests/QueryTests.swift @@ -43,13 +43,13 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("testEntityID", isEqualTo: 101) + Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101) ] do { let value = stack.queryValue( from, - Select("testBoolean"), + Select(#keyPath(TestEntity1.testBoolean)), queryClauses ) XCTAssertNotNil(value) @@ -59,7 +59,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -69,7 +69,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -79,7 +79,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -89,7 +89,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -99,7 +99,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -109,7 +109,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -119,7 +119,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -129,7 +129,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testNumber"), + Select(#keyPath(TestEntity1.testNumber)), queryClauses ) XCTAssertNotNil(value) @@ -139,7 +139,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testDecimal"), + Select(#keyPath(TestEntity1.testDecimal)), queryClauses ) XCTAssertNotNil(value) @@ -149,7 +149,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testString"), + Select(#keyPath(TestEntity1.testString)), queryClauses ) XCTAssertNotNil(value) @@ -159,7 +159,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testString"), + Select(#keyPath(TestEntity1.testString)), queryClauses ) XCTAssertNotNil(value) @@ -169,7 +169,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testData"), + Select(#keyPath(TestEntity1.testData)), queryClauses ) XCTAssertNotNil(value) @@ -179,7 +179,17 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testDate"), + Select(#keyPath(TestEntity1.testData)), + queryClauses + ) + XCTAssertNotNil(value) + XCTAssertEqual(value as Data?, "nil:TestEntity1:1".data(using: .utf8)) + } + do { + + let value = stack.queryValue( + from, + Select(#keyPath(TestEntity1.testDate)), queryClauses ) XCTAssertNotNil(value) @@ -189,7 +199,17 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testDate"), + Select(#keyPath(TestEntity1.testDate)), + queryClauses + ) + XCTAssertNotNil(value) + XCTAssertEqual(value as Date?, self.dateFormatter.date(from: "2000-01-01T00:00:00Z")) + } + do { + + let value = stack.queryValue( + from, + Select(#keyPath(TestEntity1.testDate)), queryClauses ) XCTAssertNil(value) @@ -207,14 +227,14 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 1), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] do { let value = stack.queryValue( from, - Select(.average("testBoolean")), + Select(.average(#keyPath(TestEntity1.testBoolean))), queryClauses ) XCTAssertNotNil(value) @@ -224,7 +244,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -234,7 +254,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -244,7 +264,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -254,7 +274,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -264,7 +284,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -274,7 +294,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -284,7 +304,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -294,7 +314,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testNumber")), + Select(.average(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -304,7 +324,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testDecimal")), + Select(.average(#keyPath(TestEntity1.testDecimal))), queryClauses ) XCTAssertNotNil(value) @@ -314,7 +334,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testString")), + Select(.average(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNil(value) @@ -323,7 +343,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testString")), + Select(.average(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNil(value) @@ -332,7 +352,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testData")), + Select(.average(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNil(value) @@ -341,7 +361,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.average("testDate")), + Select(.average(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNil(value) @@ -350,7 +370,25 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select("testEntityID"), + Select(.average(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNil(value) + } + do { + + let value = stack.queryValue( + from, + Select(.average(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNil(value) + } + do { + + let value = stack.queryValue( + from, + Select(#keyPath(TestEntity1.testEntityID)), queryClauses ) XCTAssertNil(value) @@ -368,13 +406,13 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 1) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1) ] do { let value = stack.queryValue( from, - Select(.count("testBoolean")), + Select(.count(#keyPath(TestEntity1.testBoolean))), queryClauses ) XCTAssertNotNil(value) @@ -384,7 +422,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -394,7 +432,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -404,7 +442,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -414,7 +452,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -424,7 +462,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -434,7 +472,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -444,7 +482,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -454,7 +492,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testNumber")), + Select(.count(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -464,7 +502,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testDecimal")), + Select(.count(#keyPath(TestEntity1.testDecimal))), queryClauses ) XCTAssertNil(value) @@ -473,7 +511,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testString")), + Select(.count(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNil(value) @@ -482,7 +520,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testString")), + Select(.count(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNil(value) @@ -491,7 +529,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testData")), + Select(.count(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNil(value) @@ -500,7 +538,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testDate")), + Select(.count(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNil(value) @@ -509,7 +547,25 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.count("testEntityID")), + Select(.count(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNil(value) + } + do { + + let value = stack.queryValue( + from, + Select(.count(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNil(value) + } + do { + + let value = stack.queryValue( + from, + Select(.count(#keyPath(TestEntity1.testEntityID))), queryClauses ) XCTAssertNil(value) @@ -527,13 +583,13 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 1) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1) ] do { let value = stack.queryValue( from, - Select(.maximum("testBoolean")), + Select(.maximum(#keyPath(TestEntity1.testBoolean))), queryClauses ) XCTAssertNotNil(value) @@ -543,7 +599,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -553,7 +609,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -563,7 +619,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -573,7 +629,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -583,7 +639,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -593,7 +649,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -603,7 +659,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -613,7 +669,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testNumber")), + Select(.maximum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -623,7 +679,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testDecimal")), + Select(.maximum(#keyPath(TestEntity1.testDecimal))), queryClauses ) XCTAssertNotNil(value) @@ -633,7 +689,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testString")), + Select(.maximum(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNotNil(value) @@ -643,7 +699,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testString")), + Select(.maximum(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNotNil(value) @@ -653,7 +709,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testData")), + Select(.maximum(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNotNil(value) @@ -663,7 +719,17 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testDate")), + Select(.maximum(#keyPath(TestEntity1.testData))), + queryClauses + ) + XCTAssertNotNil(value) + XCTAssertEqual(value as Data?, "nil:TestEntity1:5".data(using: .utf8)) + } + do { + + let value = stack.queryValue( + from, + Select(.maximum(#keyPath(TestEntity1.testDate))), queryClauses ) XCTAssertNotNil(value) @@ -673,7 +739,17 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.maximum("testEntityID")), + Select(.maximum(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNotNil(value) + XCTAssertEqual(value as Date?, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")) + } + do { + + let value = stack.queryValue( + from, + Select(.maximum(#keyPath(TestEntity1.testEntityID))), queryClauses ) XCTAssertNil(value) @@ -691,13 +767,13 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 1) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1) ] do { let value = stack.queryValue( from, - Select(.minimum("testBoolean")), + Select(.minimum(#keyPath(TestEntity1.testBoolean))), queryClauses ) XCTAssertNotNil(value) @@ -707,7 +783,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -717,7 +793,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -727,7 +803,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -737,7 +813,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -747,7 +823,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -757,7 +833,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -767,7 +843,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -777,7 +853,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testNumber")), + Select(.minimum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -787,7 +863,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testDecimal")), + Select(.minimum(#keyPath(TestEntity1.testDecimal))), queryClauses ) XCTAssertNotNil(value) @@ -797,7 +873,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testString")), + Select(.minimum(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNotNil(value) @@ -807,7 +883,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testString")), + Select(.minimum(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNotNil(value) @@ -817,7 +893,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testData")), + Select(.minimum(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNotNil(value) @@ -827,7 +903,17 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testDate")), + Select(.minimum(#keyPath(TestEntity1.testData))), + queryClauses + ) + XCTAssertNotNil(value) + XCTAssertEqual(value as Data?, "nil:TestEntity1:2".data(using: .utf8)) + } + do { + + let value = stack.queryValue( + from, + Select(.minimum(#keyPath(TestEntity1.testDate))), queryClauses ) XCTAssertNotNil(value) @@ -837,7 +923,17 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.minimum("testEntityID")), + Select(.minimum(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNotNil(value) + XCTAssertEqual(value as Date?, self.dateFormatter.date(from: "2000-01-02T00:00:00Z")) + } + do { + + let value = stack.queryValue( + from, + Select(.minimum(#keyPath(TestEntity1.testEntityID))), queryClauses ) XCTAssertNil(value) @@ -855,13 +951,13 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 1) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1) ] do { let value = stack.queryValue( from, - Select(.sum("testBoolean")), + Select(.sum(#keyPath(TestEntity1.testBoolean))), queryClauses ) XCTAssertNotNil(value) @@ -871,7 +967,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -881,7 +977,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -891,7 +987,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -901,7 +997,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -911,7 +1007,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -921,7 +1017,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -931,7 +1027,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -941,7 +1037,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testNumber")), + Select(.sum(#keyPath(TestEntity1.testNumber))), queryClauses ) XCTAssertNotNil(value) @@ -951,7 +1047,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testDecimal")), + Select(.sum(#keyPath(TestEntity1.testDecimal))), queryClauses ) XCTAssertNotNil(value) @@ -961,7 +1057,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testString")), + Select(.sum(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNil(value) @@ -970,7 +1066,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testString")), + Select(.sum(#keyPath(TestEntity1.testString))), queryClauses ) XCTAssertNil(value) @@ -979,7 +1075,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testData")), + Select(.sum(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNil(value) @@ -988,7 +1084,7 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testDate")), + Select(.sum(#keyPath(TestEntity1.testData))), queryClauses ) XCTAssertNil(value) @@ -997,7 +1093,25 @@ class QueryTests: BaseTestDataTestCase { let value = stack.queryValue( from, - Select(.sum("testEntityID")), + Select(.sum(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNil(value) + } + do { + + let value = stack.queryValue( + from, + Select(.sum(#keyPath(TestEntity1.testDate))), + queryClauses + ) + XCTAssertNil(value) + } + do { + + let value = stack.queryValue( + from, + Select(.sum(#keyPath(TestEntity1.testEntityID))), queryClauses ) XCTAssertNil(value) @@ -1015,7 +1129,7 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 1) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 1) ] do { @@ -1125,6 +1239,15 @@ class QueryTests: BaseTestDataTestCase { ) XCTAssertNil(value) } + do { + + let value = stack.queryValue( + from, + Select(.objectID()), + queryClauses + ) + XCTAssertNil(value) + } do { let value = stack.queryValue( @@ -1134,6 +1257,15 @@ class QueryTests: BaseTestDataTestCase { ) XCTAssertNil(value) } + do { + + let value = stack.queryValue( + from, + Select(.objectID()), + queryClauses + ) + XCTAssertNil(value) + } do { let value = stack.queryValue( @@ -1165,21 +1297,21 @@ class QueryTests: BaseTestDataTestCase { let from = From(configurations) let queryClauses: [QueryClause] = [ - Where("%K > %@", "testNumber", 3), - OrderBy(.ascending("testEntityID")) + Where("%K > %@", #keyPath(TestEntity1.testNumber), 3), + OrderBy(.ascending(#keyPath(TestEntity1.testEntityID))) ] do { let values = stack.queryAttributes( from, Select( - "testBoolean", - "testNumber", - "testDecimal", - "testString", - "testData", - "testDate", - "testNil" + #keyPath(TestEntity1.testBoolean), + #keyPath(TestEntity1.testNumber), + #keyPath(TestEntity1.testDecimal), + #keyPath(TestEntity1.testString), + #keyPath(TestEntity1.testData), + #keyPath(TestEntity1.testDate), + #keyPath(TestEntity1.testNil) ), queryClauses ) @@ -1188,20 +1320,20 @@ class QueryTests: BaseTestDataTestCase { values as Any as! [NSDictionary], [ [ - "testBoolean": NSNumber(value: false), - "testNumber": NSNumber(value: 4), - "testDecimal": NSDecimalNumber(string: "4"), - "testString": "nil:TestEntity1:4", - "testData": ("nil:TestEntity1:4" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-04T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: false), + #keyPath(TestEntity1.testNumber): NSNumber(value: 4), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "4"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:4", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:4" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-04T00:00:00Z")! ], [ - "testBoolean": NSNumber(value: true), - "testNumber": NSNumber(value: 5), - "testDecimal": NSDecimalNumber(string: "5"), - "testString": "nil:TestEntity1:5", - "testData": ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!, - "testDate": self.dateFormatter.date(from: "2000-01-05T00:00:00Z")! + #keyPath(TestEntity1.testBoolean): NSNumber(value: true), + #keyPath(TestEntity1.testNumber): NSNumber(value: 5), + #keyPath(TestEntity1.testDecimal): NSDecimalNumber(string: "5"), + #keyPath(TestEntity1.testString): "nil:TestEntity1:5", + #keyPath(TestEntity1.testData): ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!, + #keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-05T00:00:00Z")! ] ] as [NSDictionary] ) @@ -1224,11 +1356,11 @@ class QueryTests: BaseTestDataTestCase { let values = stack.queryAttributes( from, Select( - .sum("testBoolean"), - .count("testNumber"), - .maximum("testNumber"), - .minimum("testNumber"), - .average("testDecimal") + .sum(#keyPath(TestEntity1.testBoolean)), + .count(#keyPath(TestEntity1.testNumber)), + .maximum(#keyPath(TestEntity1.testNumber)), + .minimum(#keyPath(TestEntity1.testNumber)), + .average(#keyPath(TestEntity1.testDecimal)) ), queryClauses ) @@ -1251,11 +1383,11 @@ class QueryTests: BaseTestDataTestCase { let values = stack.queryAttributes( from, Select( - .sum("testBoolean", as: "testSum"), - .count("testNumber", as: "testCount"), - .maximum("testNumber", as: "testMaximum"), - .minimum("testNumber", as: "testMinimum"), - .average("testDecimal", as: "testAverage") + .sum(#keyPath(TestEntity1.testBoolean), as: "testSum"), + .count(#keyPath(TestEntity1.testNumber), as: "testCount"), + .maximum(#keyPath(TestEntity1.testNumber), as: "testMaximum"), + .minimum(#keyPath(TestEntity1.testNumber), as: "testMinimum"), + .average(#keyPath(TestEntity1.testDecimal), as: "testAverage") ), queryClauses ) diff --git a/Sources/CoreStoreError.swift b/Sources/CoreStoreError.swift index d5013df..945df3b 100644 --- a/Sources/CoreStoreError.swift +++ b/Sources/CoreStoreError.swift @@ -32,7 +32,7 @@ import CoreData /** All errors thrown from CoreStore are expressed in `CoreStoreError` enum values. */ -public enum CoreStoreError: Error, Hashable { +public enum CoreStoreError: Error, CustomNSError, Hashable { /** A failure occured because of an unknown error. @@ -60,14 +60,14 @@ public enum CoreStoreError: Error, Hashable { case internalError(NSError: NSError) - // MARK: ErrorType + // MARK: CustomNSError - public var _domain: String { + public static var errorDomain: String { return CoreStoreErrorDomain } - public var _code: Int { + public var errorCode: Int { switch self { @@ -88,6 +88,37 @@ public enum CoreStoreError: Error, Hashable { } } + public var errorUserInfo: [String : Any] { + + switch self { + + case .unknown: + return [:] + + case .differentStorageExistsAtURL(let existingPersistentStoreURL): + return [ + "existingPersistentStoreURL": existingPersistentStoreURL + ] + + case .mappingModelNotFound(let localStoreURL, let targetModel, let targetModelVersion): + return [ + "localStoreURL": localStoreURL, + "targetModel": targetModel, + "targetModelVersion": targetModelVersion + ] + + case .progressiveMigrationRequired(let localStoreURL): + return [ + "localStoreURL": localStoreURL + ] + + case .internalError(let NSError): + return [ + "NSError": NSError + ] + } + } + // MARK: Hashable diff --git a/Sources/Fetching and Querying/Concrete Clauses/Select.swift b/Sources/Fetching and Querying/Concrete Clauses/Select.swift index 64f9a4c..960c5ca 100644 --- a/Sources/Fetching and Querying/Concrete Clauses/Select.swift +++ b/Sources/Fetching and Querying/Concrete Clauses/Select.swift @@ -322,13 +322,14 @@ public func == (lhs: SelectTerm, rhs: SelectTerm) -> Bool { - `Double` - `Float` - `String` + - `Date` + - `Data` - `NSNumber` - `NSString` - `NSDecimalNumber` - `NSDate` - `NSData` - `NSManagedObjectID` - - `NSString` - for `queryAttributes(...)` methods: - `NSDictionary` diff --git a/Sources/Fetching and Querying/Concrete Clauses/Tweak.swift b/Sources/Fetching and Querying/Concrete Clauses/Tweak.swift index 340cdcd..108be78 100644 --- a/Sources/Fetching and Querying/Concrete Clauses/Tweak.swift +++ b/Sources/Fetching and Querying/Concrete Clauses/Tweak.swift @@ -65,6 +65,6 @@ public struct Tweak: FetchClause, QueryClause, DeleteClause { public func applyToFetchRequest(_ fetchRequest: NSFetchRequest) { - self.closure(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) + self.closure(fetchRequest as! NSFetchRequest) } } diff --git a/Sources/Internal/CoreStoreFetchedResultsController.swift b/Sources/Internal/CoreStoreFetchedResultsController.swift index e4fc19f..251ddd0 100644 --- a/Sources/Internal/CoreStoreFetchedResultsController.swift +++ b/Sources/Internal/CoreStoreFetchedResultsController.swift @@ -55,7 +55,7 @@ internal final class CoreStoreFetchedResultsController: NSFetchedResultsControll context: context, applyAffectedStores: false ) - applyFetchClauses(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) + applyFetchClauses(fetchRequest) if let from = from { diff --git a/Sources/Logging/CoreStoreLogger.swift b/Sources/Logging/CoreStoreLogger.swift index eb6c62b..57e1714 100644 --- a/Sources/Logging/CoreStoreLogger.swift +++ b/Sources/Logging/CoreStoreLogger.swift @@ -82,7 +82,7 @@ public protocol CoreStoreLogger { /** Handles fatal errors made throughout the `CoreStore` framework. The app wil terminate after this method is called. - - Important: Implementers may guarantee that the function doesn't return, either by calling another `@noreturn` function such as `fatalError()` or `abort()`, or by raising an exception. If the implementation does not terminate the app, CoreStore will call an internal `fatalError()` to do so. + - Important: Implementers may guarantee that the function doesn't return, either by calling another `Never` function such as `fatalError()` or `abort()`, or by raising an exception. If the implementation does not terminate the app, CoreStore will call an internal `fatalError()` to do so. - parameter message: the fatal error message - parameter fileName: the source file name diff --git a/Sources/Logging/DefaultLogger.swift b/Sources/Logging/DefaultLogger.swift index a798797..fcfc486 100644 --- a/Sources/Logging/DefaultLogger.swift +++ b/Sources/Logging/DefaultLogger.swift @@ -113,7 +113,7 @@ public final class DefaultLogger: CoreStoreLogger { /** Handles fatal errors made throughout the `CoreStore` framework. - - Important: This method should be marked `@noreturn` and implementers should guarantee that the function doesn't, either by calling another `@noreturn` function such as `fatalError()` or `abort()`, or by raising an exception. + - Important: Implementers should guarantee that this function doesn't return, either by calling another `Never` function such as `fatalError()` or `abort()`, or by raising an exception. - parameter message: the fatal error message - parameter fileName: the source file name diff --git a/Sources/ObjectiveC/CSDataStack+Observing.swift b/Sources/ObjectiveC/CSDataStack+Observing.swift index 371b014..133446b 100644 --- a/Sources/ObjectiveC/CSDataStack+Observing.swift +++ b/Sources/ObjectiveC/CSDataStack+Observing.swift @@ -74,7 +74,7 @@ public extension CSDataStack { sectionBy: nil, applyFetchClauses: { (fetchRequest) in - fetchClauses.forEach { $0.applyToFetchRequest(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) } + fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest) } } ) } @@ -104,7 +104,7 @@ public extension CSDataStack { sectionBy: nil, applyFetchClauses: { (fetchRequest) in - fetchClauses.forEach { $0.applyToFetchRequest(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) } + fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest) } }, createAsynchronously: { @@ -140,7 +140,7 @@ public extension CSDataStack { sectionBy: sectionBy.bridgeToSwift, applyFetchClauses: { (fetchRequest) in - fetchClauses.forEach { $0.applyToFetchRequest(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) } + fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest) } } ) } @@ -170,7 +170,7 @@ public extension CSDataStack { sectionBy: sectionBy.bridgeToSwift, applyFetchClauses: { (fetchRequest) in - fetchClauses.forEach { $0.applyToFetchRequest(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) } + fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest) } }, createAsynchronously: { diff --git a/Sources/ObjectiveC/CSError.swift b/Sources/ObjectiveC/CSError.swift index 5058641..39c8c83 100644 --- a/Sources/ObjectiveC/CSError.swift +++ b/Sources/ObjectiveC/CSError.swift @@ -76,58 +76,7 @@ public final class CSError: NSError, CoreStoreObjectiveCType { return swift } - - func createSwiftObject(_ error: CSError) -> CoreStoreError { - - guard error.domain == CoreStoreErrorDomain else { - - return .internalError(NSError: self) - } - - guard let code = CoreStoreErrorCode(rawValue: error.code) else { - - return .unknown - } - - let info = error.userInfo - switch code { - - case .unknownError: - return .unknown - - case .differentStorageExistsAtURL: - guard case let existingPersistentStoreURL as URL = info["existingPersistentStoreURL"] else { - - return .unknown - } - return .differentStorageExistsAtURL(existingPersistentStoreURL: existingPersistentStoreURL) - - case .mappingModelNotFound: - guard let localStoreURL = info["localStoreURL"] as? URL, - let targetModel = info["targetModel"] as? NSManagedObjectModel, - let targetModelVersion = info["targetModelVersion"] as? String else { - - return .unknown - } - return .mappingModelNotFound(localStoreURL: localStoreURL, targetModel: targetModel, targetModelVersion: targetModelVersion) - - case .progressiveMigrationRequired: - guard let localStoreURL = info["localStoreURL"] as? URL else { - - return .unknown - } - return .progressiveMigrationRequired(localStoreURL: localStoreURL) - - case .internalError: - guard case let NSError as NSError = info["NSError"] else { - - return .unknown - } - return .internalError(NSError: NSError) - } - } - - let swift = createSwiftObject(self) + let swift = CoreStoreError(_bridgedNSError: self) ?? .unknown self.swiftError = swift return swift } @@ -138,43 +87,7 @@ public final class CSError: NSError, CoreStoreObjectiveCType { public init(_ swiftValue: CoreStoreError) { self.swiftError = swiftValue - - let code: CoreStoreErrorCode - let info: [AnyHashable: Any] - switch swiftValue { - - case .unknown: - code = .unknownError - info = [:] - - case .differentStorageExistsAtURL(let existingPersistentStoreURL): - code = .differentStorageExistsAtURL - info = [ - "existingPersistentStoreURL": existingPersistentStoreURL - ] - - case .mappingModelNotFound(let localStoreURL, let targetModel, let targetModelVersion): - code = .mappingModelNotFound - info = [ - "localStoreURL": localStoreURL, - "targetModel": targetModel, - "targetModelVersion": targetModelVersion - ] - - case .progressiveMigrationRequired(let localStoreURL): - code = .progressiveMigrationRequired - info = [ - "localStoreURL": localStoreURL - ] - - case .internalError(let NSError): - code = .internalError - info = [ - "NSError": NSError - ] - } - - super.init(domain: CoreStoreErrorDomain, code: code.rawValue, userInfo: info) + super.init(domain: CoreStoreError.errorDomain, code: swiftValue.errorCode, userInfo: swiftValue.errorUserInfo) } public required init?(coder aDecoder: NSCoder) { @@ -229,7 +142,7 @@ public enum CSErrorCode: Int { // MARK: - CoreStoreError -extension CoreStoreError: CoreStoreSwiftType { +extension CoreStoreError: CoreStoreSwiftType, _ObjectiveCBridgeableError { // MARK: CoreStoreSwiftType @@ -237,6 +150,73 @@ extension CoreStoreError: CoreStoreSwiftType { return CSError(self) } + + + // MARK: _ObjectiveCBridgeableError + + public init?(_bridgedNSError error: NSError) { + + guard error.domain == CoreStoreErrorDomain else { + + if error is CSError { + + self = .internalError(NSError: error) + return + } + return nil + } + + guard let code = CoreStoreErrorCode(rawValue: error.code) else { + + if error is CSError { + + self = .unknown + return + } + return nil + } + + let info = error.userInfo + switch code { + + case .unknownError: + self = .unknown + + case .differentStorageExistsAtURL: + guard case let existingPersistentStoreURL as URL = info["existingPersistentStoreURL"] else { + + self = .unknown + return + } + self = .differentStorageExistsAtURL(existingPersistentStoreURL: existingPersistentStoreURL) + + case .mappingModelNotFound: + guard let localStoreURL = info["localStoreURL"] as? URL, + let targetModel = info["targetModel"] as? NSManagedObjectModel, + let targetModelVersion = info["targetModelVersion"] as? String else { + + self = .unknown + return + } + self = .mappingModelNotFound(localStoreURL: localStoreURL, targetModel: targetModel, targetModelVersion: targetModelVersion) + + case .progressiveMigrationRequired: + guard let localStoreURL = info["localStoreURL"] as? URL else { + + self = .unknown + return + } + self = .progressiveMigrationRequired(localStoreURL: localStoreURL) + + case .internalError: + guard case let NSError as NSError = info["NSError"] else { + + self = .unknown + return + } + self = .internalError(NSError: NSError) + } + } } diff --git a/Sources/ObjectiveC/CSListMonitor.swift b/Sources/ObjectiveC/CSListMonitor.swift index 8fb2f0c..5b9c359 100644 --- a/Sources/ObjectiveC/CSListMonitor.swift +++ b/Sources/ObjectiveC/CSListMonitor.swift @@ -503,7 +503,7 @@ public final class CSListMonitor: NSObject, CoreStoreObjectiveCType { self.bridgeToSwift.refetch { (fetchRequest) in - fetchClauses.forEach { $0.applyToFetchRequest(unsafeBitCast(fetchRequest, to: NSFetchRequest.self)) } + fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest) } } } diff --git a/Sources/Setup/CoreStore+Setup.swift b/Sources/Setup/CoreStore+Setup.swift index 211caa2..d4346de 100644 --- a/Sources/Setup/CoreStore+Setup.swift +++ b/Sources/Setup/CoreStore+Setup.swift @@ -99,11 +99,11 @@ public extension CoreStore { } /** - Creates a `LocalStorageface` of the specified store type with default values and adds it to the `defaultStack`. This method blocks until completion. + Creates a `LocalStorageInterface` of the specified store type with default values and adds it to the `defaultStack`. This method blocks until completion. ``` try CoreStore.addStorageAndWait(SQLiteStore.self) ``` - - parameter storeType: the `LocalStorageface` type + - parameter storeType: the `LocalStorageInterface` type - throws: a `CoreStoreError` value indicating the failure - returns: the local storage added to the `defaultStack` */ diff --git a/Sources/Setup/DataStack.swift b/Sources/Setup/DataStack.swift index d0cf4f0..559b943 100644 --- a/Sources/Setup/DataStack.swift +++ b/Sources/Setup/DataStack.swift @@ -177,11 +177,11 @@ public final class DataStack { } /** - Creates a `LocalStorageface` of the specified store type with default values and adds it to the stack. This method blocks until completion. + Creates a `LocalStorageInterface` of the specified store type with default values and adds it to the stack. This method blocks until completion. ``` try dataStack.addStorageAndWait(SQLiteStore.self) ``` - - parameter storeType: the `LocalStorageface` type + - parameter storeType: the `LocalStorageInterface` type - throws: a `CoreStoreError` value indicating the failure - returns: the local storage added to the stack */ @@ -424,36 +424,33 @@ public final class DataStack { internal func persistentStoreForEntityClass(_ entityClass: AnyClass, configuration: String?, inferStoreIfPossible: Bool) -> (store: NSPersistentStore?, isAmbiguous: Bool) { - var returnValue: (store: NSPersistentStore?, isAmbiguous: Bool) = (store: nil, isAmbiguous: false) - self.storeMetadataUpdateQueue.sync(flags: .barrier) { + return self.storeMetadataUpdateQueue.sync(flags: .barrier) { () -> (store: NSPersistentStore?, isAmbiguous: Bool) in let configurationsForEntity = self.entityConfigurationsMapping[NSStringFromClass(entityClass)] ?? [] if let configuration = configuration { if configurationsForEntity.contains(configuration) { - returnValue = (store: self.configurationStoreMapping[configuration], isAmbiguous: false) - return + return (store: self.configurationStoreMapping[configuration], isAmbiguous: false) } else if !inferStoreIfPossible { - return + return (store: nil, isAmbiguous: false) } } switch configurationsForEntity.count { case 0: - return + return (store: nil, isAmbiguous: false) case 1 where inferStoreIfPossible: - returnValue = (store: self.configurationStoreMapping[configurationsForEntity.first!], isAmbiguous: false) + return (store: self.configurationStoreMapping[configurationsForEntity.first!], isAmbiguous: false) default: - returnValue = (store: nil, isAmbiguous: true) + return (store: nil, isAmbiguous: true) } } - return returnValue } internal func createPersistentStoreFromStorage(_ storage: StorageInterface, finalURL: URL?, finalStoreOptions: [AnyHashable: Any]?) throws -> NSPersistentStore { diff --git a/Sources/Setup/StorageInterfaces/ICloudStore.swift b/Sources/Setup/StorageInterfaces/ICloudStore.swift index 409f31e..f8d65ce 100644 --- a/Sources/Setup/StorageInterfaces/ICloudStore.swift +++ b/Sources/Setup/StorageInterfaces/ICloudStore.swift @@ -34,7 +34,7 @@ import CoreData /** A storage interface backed by an SQLite database managed by iCloud. */ -public class ICloudStore: CloudStorage { +public final class ICloudStore: CloudStorage { /** Initializes an iCloud store interface from the given ubiquitous store information. Returns `nil` if the container could not be located or if iCloud storage is unavailable for the current user or device diff --git a/Sources/Transactions/BaseDataTransaction.swift b/Sources/Transactions/BaseDataTransaction.swift index a61ab56..8688485 100644 --- a/Sources/Transactions/BaseDataTransaction.swift +++ b/Sources/Transactions/BaseDataTransaction.swift @@ -454,8 +454,6 @@ public /*abstract*/ class BaseDataTransaction { internal let childTransactionQueue = DispatchQueue.serial("com.corestore.datastack.childtransactionqueue") internal let supportsUndo: Bool internal let bypassesQueueing: Bool - - internal var isCommitted = false internal var result: SaveResult?