From 087cb3e692cfcad423a21a2a3dcadcfdd37958a2 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Tue, 29 Apr 2025 17:44:53 -0700 Subject: [PATCH 1/3] Leverage upstream database seeding helper This logic is being incorporated directly into StructuredQueries. --- Package.swift | 3 ++- .../xcshareddata/swiftpm/Package.resolved | 6 ++--- Sources/StructuredQueriesGRDBCore/Seed.swift | 24 ++----------------- 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/Package.swift b/Package.swift index e6f3b8ed..9b349892 100644 --- a/Package.swift +++ b/Package.swift @@ -33,7 +33,8 @@ let package = Package( .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "1.9.0"), .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "1.5.0"), .package(url: "https://github.com/pointfreeco/swift-sharing", from: "2.3.0"), - .package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.1.1"), +// .package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.1.1"), + .package(url: "https://github.com/pointfreeco/swift-structured-queries", branch: "seeds"), ], targets: [ .target( diff --git a/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved index dd25d597..cb61f5d5 100644 --- a/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "64ad2f093fc84d1ab79b168712ff3b5d4c6e8d8480ba75cddecef434366b9e82", + "originHash" : "4aec9a7a24016147788669999ebe1144addf88a904de079fde71fb9b8280d2ac", "pins" : [ { "identity" : "combine-schedulers", @@ -141,8 +141,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "revision" : "f157e6036aaf29e80771485e3efcf1177bfb76ae", - "version" : "0.1.1" + "branch" : "seeds", + "revision" : "945ce718455b8b1dff43a6e3535899f0a03fc095" } }, { diff --git a/Sources/StructuredQueriesGRDBCore/Seed.swift b/Sources/StructuredQueriesGRDBCore/Seed.swift index 271495a7..45ca55f0 100644 --- a/Sources/StructuredQueriesGRDBCore/Seed.swift +++ b/Sources/StructuredQueriesGRDBCore/Seed.swift @@ -53,28 +53,8 @@ extension Database { @InsertValuesBuilder _ build: () -> [any StructuredQueriesCore.Table] ) throws { - var seeds = build() - while !seeds.isEmpty { - guard let first = seeds.first else { break } - let firstType = type(of: first) - - if let firstType = firstType as? any TableDraft.Type { - func insertBatch(_: T.Type) throws { - let batch = Array(seeds.lazy.prefix { $0 is T }.compactMap { $0 as? T }) - defer { seeds.removeFirst(batch.count) } - try T.PrimaryTable.insert(batch).execute(self) - } - - try insertBatch(firstType) - } else { - func insertBatch(_: T.Type) throws { - let batch = Array(seeds.lazy.prefix { $0 is T }.compactMap { $0 as? T }) - defer { seeds.removeFirst(batch.count) } - try T.insert(batch).execute(self) - } - - try insertBatch(firstType) - } + for insert in Seeds(build) { + try insert.execute(self) } } } From d9874b36193e637e274c10090c984219d732c3e8 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 30 Apr 2025 09:51:47 -0700 Subject: [PATCH 2/3] wip --- Package.swift | 3 +-- .../xcshareddata/swiftpm/Package.resolved | 6 +++--- Tests/SharingGRDBTests/FetchTests.swift | 1 - 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index 9b349892..516fff8e 100644 --- a/Package.swift +++ b/Package.swift @@ -33,8 +33,7 @@ let package = Package( .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "1.9.0"), .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "1.5.0"), .package(url: "https://github.com/pointfreeco/swift-sharing", from: "2.3.0"), -// .package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.1.1"), - .package(url: "https://github.com/pointfreeco/swift-structured-queries", branch: "seeds"), + .package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.2.0"), ], targets: [ .target( diff --git a/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved index cb61f5d5..99749b44 100644 --- a/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/SharingGRDB.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "4aec9a7a24016147788669999ebe1144addf88a904de079fde71fb9b8280d2ac", + "originHash" : "ec7a0ec47976760149a8edf8f7d5f19c9e9ff83c418b7952e6dc20d8e1416329", "pins" : [ { "identity" : "combine-schedulers", @@ -141,8 +141,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "branch" : "seeds", - "revision" : "945ce718455b8b1dff43a6e3535899f0a03fc095" + "revision" : "71657e2f1d5b5af29e8cc5c450a67523433671b1", + "version" : "0.2.0" } }, { diff --git a/Tests/SharingGRDBTests/FetchTests.swift b/Tests/SharingGRDBTests/FetchTests.swift index 3732dd06..706cdea2 100644 --- a/Tests/SharingGRDBTests/FetchTests.swift +++ b/Tests/SharingGRDBTests/FetchTests.swift @@ -4,7 +4,6 @@ import GRDB import Sharing import SharingGRDB import StructuredQueries -import SwiftUI import Testing @Suite(.dependency(\.defaultDatabase, try .database())) From 95d999a85c81f81f4e2a6f204c9e2a6ee9312946 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 30 Apr 2025 09:55:15 -0700 Subject: [PATCH 3/3] wip --- Examples/Reminders/RemindersListDetail.swift | 2 +- Examples/Reminders/Schema.swift | 2 +- Examples/Reminders/SearchReminders.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Examples/Reminders/RemindersListDetail.swift b/Examples/Reminders/RemindersListDetail.swift index ab6986ba..93483d22 100644 --- a/Examples/Reminders/RemindersListDetail.swift +++ b/Examples/Reminders/RemindersListDetail.swift @@ -203,7 +203,7 @@ struct RemindersListDetailView: View { let remindersList: RemindersList let isPastDue: Bool let notes: String - @Column(as: JSONRepresentation<[String]>.self) + @Column(as: [String].JSONRepresentation.self) let tags: [String] } } diff --git a/Examples/Reminders/Schema.swift b/Examples/Reminders/Schema.swift index f39a84bd..1f2bbd05 100644 --- a/Examples/Reminders/Schema.swift +++ b/Examples/Reminders/Schema.swift @@ -71,7 +71,7 @@ extension Tag { } extension Tag.TableColumns { - var jsonNames: some QueryExpression> { + var jsonNames: some QueryExpression<[String].JSONRepresentation> { self.title.jsonGroupArray(filter: self.title.isNot(nil)) } } diff --git a/Examples/Reminders/SearchReminders.swift b/Examples/Reminders/SearchReminders.swift index 0073c556..35de7334 100644 --- a/Examples/Reminders/SearchReminders.swift +++ b/Examples/Reminders/SearchReminders.swift @@ -112,7 +112,7 @@ struct SearchRemindersView: View { let notes: String let reminder: Reminders.Reminder let remindersList: RemindersList - @Column(as: JSONRepresentation<[String]>.self) + @Column(as: [String].JSONRepresentation.self) let tags: [String] } }