diff --git a/.gitignore b/.gitignore index 9111809..c43493d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.xcuserdatad +RealmVsSwiftData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/RealmVsSwiftData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/RealmVsSwiftData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 7620f83..0000000 --- a/RealmVsSwiftData.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,42 +0,0 @@ -{ - "originHash" : "7d9a1b256e63f6d5d8efcb97b0a396631c321eca19f5bb8324f18e19e52d3f3e", - "pins" : [ - { - "identity" : "managedmodels", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Data-swift/ManagedModels.git", - "state" : { - "revision" : "82baf8558c9f4c41b8c67bc1351729ea6308f29a", - "version" : "0.8.12" - } - }, - { - "identity" : "realm-core", - "kind" : "remoteSourceControl", - "location" : "https://github.com/realm/realm-core.git", - "state" : { - "revision" : "058ecce712b4be8b2a2384ed893bf83d56a49fc0", - "version" : "14.10.1" - } - }, - { - "identity" : "realm-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/realm/realm-swift", - "state" : { - "branch" : "master", - "revision" : "e3258a29f1993bef4fe3d9be801c7f83dc40eef5" - } - }, - { - "identity" : "swift-syntax", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-syntax.git", - "state" : { - "revision" : "64889f0c732f210a935a0ad7cda38f77f876262d", - "version" : "509.1.1" - } - } - ], - "version" : 3 -} diff --git a/RealmVsSwiftData/DB/CoreData/CoreDatabase.swift b/RealmVsSwiftData/DB/CoreData/CoreDatabase.swift index e2a25e8..05dac1e 100644 --- a/RealmVsSwiftData/DB/CoreData/CoreDatabase.swift +++ b/RealmVsSwiftData/DB/CoreData/CoreDatabase.swift @@ -27,17 +27,25 @@ extension CoreDatabase { var fileURL: URL? { container.configurations.first?.url } + + var context: ModelContext { + return ModelContext(container) + } func create(_ items: [T]) throws { let context = ModelContext(container) items.forEach { $0.insertWithAllDependencies(into: context) } try context.save() + + context.reset() } func create(_ item: T) throws { let context = ModelContext(container) item.insertWithAllDependencies(into: context) try context.save() + + context.reset() } func read(predicate: Filtering?, sortBy sortDescriptors: [NSSortDescriptor]) throws -> [T] { diff --git a/RealmVsSwiftData/DB/CoreData/Users/CoreUser.swift b/RealmVsSwiftData/DB/CoreData/Users/CoreUser.swift index 3a2fafe..6005ba2 100644 --- a/RealmVsSwiftData/DB/CoreData/Users/CoreUser.swift +++ b/RealmVsSwiftData/DB/CoreData/Users/CoreUser.swift @@ -28,9 +28,18 @@ final class CoreUser: NSManagedObject, User { } self.init(firstName: firstName, surname: surname, age: Int.random(in: 0..<99)) } + + convenience init(moc: ModelContext? = nil) { + guard let firstName = firstNames.randomElement(), + let surname = surnames.randomElement() else { + //throw UserError.nameNotFound + fatalError("Name not found") + } + self.init(context: moc, firstName: firstName, surname: surname, age: Int.random(in: 0..<99)) + } - convenience init(firstName: String, surname: String, age: Int) { - self.init(context: nil) + convenience init(context: ModelContext? = nil, firstName: String, surname: String, age: Int) { + self.init(context: context) self.id = UUID() self.firstName = firstName self.surname = surname diff --git a/RealmVsSwiftData/PerformanceTesting/CoreUsersTests.swift b/RealmVsSwiftData/PerformanceTesting/CoreUsersTests.swift index 0dab273..51da8b6 100644 --- a/RealmVsSwiftData/PerformanceTesting/CoreUsersTests.swift +++ b/RealmVsSwiftData/PerformanceTesting/CoreUsersTests.swift @@ -16,6 +16,7 @@ func coreUsersPerformanceTests(with usersCount: Int = 100_000) { try! db.deleteAll() +/* var users = [CoreUser]() logExecutionTime("User instantiation") { users = (0.. Void = { limit in + var users = [CoreUser]() + logExecutionTime("User instantiation") { + users = (0.. Void = { limit in + let context = db.context + context.performAndWait { + logExecutionTime("User instantiation") { + (0..