From 6e350ab9e74594d96bc7d8ea4f8d596a514cf0fc Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Fri, 8 Aug 2025 18:42:53 -0500 Subject: [PATCH 1/2] Drop sendable requirements. --- Examples/Examples.xcodeproj/project.pbxproj | 4 ++++ .../xcshareddata/swiftpm/Package.resolved | 23 ++++++------------- Examples/Reminders/ReminderForm.swift | 12 +++++----- Package.resolved | 6 ++--- Package.swift | 2 +- Sources/SharingGRDBCore/FetchAll.swift | 5 +++- Sources/SharingGRDBCore/FetchOne.swift | 16 +++++++++---- .../Internal/Deprecations.swift | 10 ++++++-- .../Internal/StatementKey.swift | 2 +- 9 files changed, 45 insertions(+), 35 deletions(-) diff --git a/Examples/Examples.xcodeproj/project.pbxproj b/Examples/Examples.xcodeproj/project.pbxproj index ac989a7a..5830b20d 100644 --- a/Examples/Examples.xcodeproj/project.pbxproj +++ b/Examples/Examples.xcodeproj/project.pbxproj @@ -840,6 +840,8 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.Reminders; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -867,6 +869,8 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.Reminders; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index e53dc108..9d5a38d4 100644 --- a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "5ded5ba49617fcf43253f921c393a9829acb4bd0620c1d273ad236940406de92", + "originHash" : "22fb924569f92610b5675a628f98b8864244fe7f2f1702deb956f693c2598118", "pins" : [ { "identity" : "combine-schedulers", @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/groue/GRDB.swift", "state" : { - "revision" : "a5a1be26b4513dc7ec360eb56bc08a345bac6649", - "version" : "7.5.0" + "revision" : "8ba1bc9a96afc731a000fd4136dd13a5a46297bd", + "version" : "7.6.1" } }, { @@ -105,8 +105,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-sharing", "state" : { - "revision" : "75e846ee3159dc75b3a29bfc24b6ce5a557ddca9", - "version" : "2.5.2" + "revision" : "5d87dda90ed048f216826efbad404110141161bb", + "version" : "2.6.0" } }, { @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "revision" : "6b3f436f4da7fd2ea304742d936ac8205e5ef8f8", - "version" : "0.10.0" + "branch" : "drop-sendable", + "revision" : "7289b350e858e07b6b8ff46aaba907a15de19dc0" } }, { @@ -136,15 +136,6 @@ "version" : "601.0.1" } }, - { - "identity" : "swift-tagged", - "kind" : "remoteSourceControl", - "location" : "https://github.com/pointfreeco/swift-tagged", - "state" : { - "revision" : "3907a9438f5b57d317001dc99f3f11b46882272b", - "version" : "0.10.0" - } - }, { "identity" : "xctest-dynamic-overlay", "kind" : "remoteSourceControl", diff --git a/Examples/Reminders/ReminderForm.swift b/Examples/Reminders/ReminderForm.swift index 7c73c24b..5694b9c3 100644 --- a/Examples/Reminders/ReminderForm.swift +++ b/Examples/Reminders/ReminderForm.swift @@ -132,13 +132,13 @@ struct ReminderFormView: View { guard let reminderID = reminder.id else { return } do { + let q = Tag + .order { $0.title } + .join(ReminderTag.all) { $0.id.eq($1.tagID) } + .where { $1.reminderID.eq(reminderID) } + .select { tag, _ in tag } selectedTags = try await database.read { db in - try Tag - .order(by: \.title) - .join(ReminderTag.all) { $0.id.eq($1.tagID) } - .where { $1.reminderID.eq(reminderID) } - .select { tag, _ in tag } - .fetchAll(db) + try q.fetchAll(db) } } catch { selectedTags = [] diff --git a/Package.resolved b/Package.resolved index 55540f18..8d9fb956 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "12f0b0a2d75ac94fa86238ac64719d53b4116d58b62d2f0bbdbd50c0a617b32a", + "originHash" : "d878fb795eb67b95d7dd40477b11cecb9bf6426d17d8353474b195b9c4347508", "pins" : [ { "identity" : "combine-schedulers", @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "revision" : "6bd870099083ef269eeee8835808cb6233151654", - "version" : "0.7.0" + "branch" : "drop-sendable", + "revision" : "7289b350e858e07b6b8ff46aaba907a15de19dc0" } }, { diff --git a/Package.swift b/Package.swift index 3c45f580..9e854961 100644 --- a/Package.swift +++ b/Package.swift @@ -33,7 +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.7.0"), + .package(url: "https://github.com/pointfreeco/swift-structured-queries", branch: "drop-sendable"), ], targets: [ .target( diff --git a/Sources/SharingGRDBCore/FetchAll.swift b/Sources/SharingGRDBCore/FetchAll.swift index 7f5b50c4..8168cf39 100644 --- a/Sources/SharingGRDBCore/FetchAll.swift +++ b/Sources/SharingGRDBCore/FetchAll.swift @@ -511,7 +511,10 @@ extension FetchAll: Equatable where Element: Equatable { #endif private struct FetchAllStatementValueRequest: StatementKeyRequest { - let statement: any StructuredQueriesCore.Statement + let statement: SQLQueryExpression + init(statement: some StructuredQueriesCore.Statement) { + self.statement = SQLQueryExpression(statement) + } func fetch(_ db: Database) throws -> [Value.QueryOutput] { try statement.fetchAll(db) } diff --git a/Sources/SharingGRDBCore/FetchOne.swift b/Sources/SharingGRDBCore/FetchOne.swift index 14012d3d..4c04605a 100644 --- a/Sources/SharingGRDBCore/FetchOne.swift +++ b/Sources/SharingGRDBCore/FetchOne.swift @@ -1201,9 +1201,9 @@ extension FetchOne: Equatable where Value: Equatable { #endif private struct FetchOneStatementValueRequest: StatementKeyRequest { - let statement: any StructuredQueriesCore.Statement - init(statement: any StructuredQueriesCore.Statement) { - self.statement = statement + let statement: SQLQueryExpression + init(statement: some StructuredQueriesCore.Statement) { + self.statement = SQLQueryExpression(statement) } func fetch(_ db: Database) throws -> Value.QueryOutput { guard let result = try statement.fetchOne(db) @@ -1215,7 +1215,10 @@ private struct FetchOneStatementValueRequest: Stateme private struct FetchOneStatementOptionalValueRequest: StatementKeyRequest { - let statement: any StructuredQueriesCore.Statement + let statement: SQLQueryExpression + init(statement: some StructuredQueriesCore.Statement) { + self.statement = SQLQueryExpression(statement) + } func fetch(_ db: Database) throws -> Value.QueryOutput? { try statement.fetchOne(db) } @@ -1224,7 +1227,10 @@ private struct FetchOneStatementOptionalValueRequest: private struct FetchOneStatementOptionalProtocolRequest< Value: QueryRepresentable & _OptionalProtocol >: StatementKeyRequest where Value.QueryOutput: _OptionalProtocol { - let statement: any StructuredQueriesCore.Statement + let statement: SQLQueryExpression + init(statement: some StructuredQueriesCore.Statement) { + self.statement = SQLQueryExpression(statement) + } func fetch(_ db: Database) throws -> Value.QueryOutput { try statement.fetchOne(db) ?? ._none } diff --git a/Sources/SharingGRDBCore/Internal/Deprecations.swift b/Sources/SharingGRDBCore/Internal/Deprecations.swift index cbf78730..96df088e 100644 --- a/Sources/SharingGRDBCore/Internal/Deprecations.swift +++ b/Sources/SharingGRDBCore/Internal/Deprecations.swift @@ -277,7 +277,10 @@ extension FetchAll { @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) private struct FetchAllStatementPackRequest: StatementKeyRequest { - let statement: any StructuredQueriesCore.Statement<(repeat each Value)> + let statement: SQLQueryExpression<(repeat each Value)> + init(statement: some StructuredQueriesCore.Statement<(repeat each Value)>) { + self.statement = SQLQueryExpression(statement) + } func fetch(_ db: Database) throws -> [(repeat (each Value).QueryOutput)] { try statement.fetchAll(db) } @@ -540,7 +543,10 @@ extension FetchOne { @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) private struct FetchOneStatementPackRequest: StatementKeyRequest { - let statement: any StructuredQueriesCore.Statement<(repeat each Value)> + let statement: SQLQueryExpression<(repeat each Value)> + init(statement: some StructuredQueriesCore.Statement<(repeat each Value)>) { + self.statement = SQLQueryExpression(statement) + } func fetch(_ db: Database) throws -> (repeat (each Value).QueryOutput) { guard let result = try statement.fetchOne(db) else { throw NotFound() } diff --git a/Sources/SharingGRDBCore/Internal/StatementKey.swift b/Sources/SharingGRDBCore/Internal/StatementKey.swift index 2942ac2f..ff974ff8 100644 --- a/Sources/SharingGRDBCore/Internal/StatementKey.swift +++ b/Sources/SharingGRDBCore/Internal/StatementKey.swift @@ -1,6 +1,6 @@ protocol StatementKeyRequest: FetchKeyRequest { associatedtype QueryValue - var statement: any StructuredQueriesCore.Statement { get } + var statement: SQLQueryExpression { get } } extension StatementKeyRequest { From 810ee8148fe73c7d1f12a0e73521d7801709ace0 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Mon, 11 Aug 2025 10:30:43 -0700 Subject: [PATCH 2/2] wip --- Examples/Examples.xcodeproj/project.pbxproj | 4 ---- .../xcshareddata/swiftpm/Package.resolved | 23 +++++++++++++------ Examples/Reminders/ReminderForm.swift | 12 +++++----- Package.resolved | 6 ++--- Package.swift | 2 +- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Examples/Examples.xcodeproj/project.pbxproj b/Examples/Examples.xcodeproj/project.pbxproj index 5830b20d..ac989a7a 100644 --- a/Examples/Examples.xcodeproj/project.pbxproj +++ b/Examples/Examples.xcodeproj/project.pbxproj @@ -840,8 +840,6 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.Reminders; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -869,8 +867,6 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.Reminders; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9d5a38d4..e53dc108 100644 --- a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "22fb924569f92610b5675a628f98b8864244fe7f2f1702deb956f693c2598118", + "originHash" : "5ded5ba49617fcf43253f921c393a9829acb4bd0620c1d273ad236940406de92", "pins" : [ { "identity" : "combine-schedulers", @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/groue/GRDB.swift", "state" : { - "revision" : "8ba1bc9a96afc731a000fd4136dd13a5a46297bd", - "version" : "7.6.1" + "revision" : "a5a1be26b4513dc7ec360eb56bc08a345bac6649", + "version" : "7.5.0" } }, { @@ -105,8 +105,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-sharing", "state" : { - "revision" : "5d87dda90ed048f216826efbad404110141161bb", - "version" : "2.6.0" + "revision" : "75e846ee3159dc75b3a29bfc24b6ce5a557ddca9", + "version" : "2.5.2" } }, { @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "branch" : "drop-sendable", - "revision" : "7289b350e858e07b6b8ff46aaba907a15de19dc0" + "revision" : "6b3f436f4da7fd2ea304742d936ac8205e5ef8f8", + "version" : "0.10.0" } }, { @@ -136,6 +136,15 @@ "version" : "601.0.1" } }, + { + "identity" : "swift-tagged", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-tagged", + "state" : { + "revision" : "3907a9438f5b57d317001dc99f3f11b46882272b", + "version" : "0.10.0" + } + }, { "identity" : "xctest-dynamic-overlay", "kind" : "remoteSourceControl", diff --git a/Examples/Reminders/ReminderForm.swift b/Examples/Reminders/ReminderForm.swift index 5694b9c3..7c73c24b 100644 --- a/Examples/Reminders/ReminderForm.swift +++ b/Examples/Reminders/ReminderForm.swift @@ -132,13 +132,13 @@ struct ReminderFormView: View { guard let reminderID = reminder.id else { return } do { - let q = Tag - .order { $0.title } - .join(ReminderTag.all) { $0.id.eq($1.tagID) } - .where { $1.reminderID.eq(reminderID) } - .select { tag, _ in tag } selectedTags = try await database.read { db in - try q.fetchAll(db) + try Tag + .order(by: \.title) + .join(ReminderTag.all) { $0.id.eq($1.tagID) } + .where { $1.reminderID.eq(reminderID) } + .select { tag, _ in tag } + .fetchAll(db) } } catch { selectedTags = [] diff --git a/Package.resolved b/Package.resolved index 8d9fb956..55540f18 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "d878fb795eb67b95d7dd40477b11cecb9bf6426d17d8353474b195b9c4347508", + "originHash" : "12f0b0a2d75ac94fa86238ac64719d53b4116d58b62d2f0bbdbd50c0a617b32a", "pins" : [ { "identity" : "combine-schedulers", @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-structured-queries", "state" : { - "branch" : "drop-sendable", - "revision" : "7289b350e858e07b6b8ff46aaba907a15de19dc0" + "revision" : "6bd870099083ef269eeee8835808cb6233151654", + "version" : "0.7.0" } }, { diff --git a/Package.swift b/Package.swift index 9e854961..3c45f580 100644 --- a/Package.swift +++ b/Package.swift @@ -33,7 +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", branch: "drop-sendable"), + .package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.7.0"), ], targets: [ .target(