Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Sources/StructuredQueriesMacros/Internal/Nonisolated.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import SwiftSyntax

#if compiler(>=6.1)
let nonisolated: TokenSyntax? = .keyword(.nonisolated, trailingTrivia: .space)
#else
let nonisolated: TokenSyntax? = nil
#endif
14 changes: 7 additions & 7 deletions Sources/StructuredQueriesMacros/TableMacro.swift
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ extension TableMacro: ExtensionMacro {
if let draftTableType {
initFromOther = """

public nonisolated init(_ other: \(draftTableType)) {
public \(nonisolated)init(_ other: \(draftTableType)) {
\(allColumns.map { "self.\($0) = other.\($0)" as ExprSyntax }, separator: "\n")
}
"""
Expand Down Expand Up @@ -571,7 +571,7 @@ extension TableMacro: ExtensionMacro {
if let schemaName {
letSchemaName = """

public nonisolated static let schemaName: Swift.String? = \(schemaName)
public \(nonisolated)static let schemaName: Swift.String? = \(schemaName)
"""
}
var initDecoder: DeclSyntax?
Expand All @@ -589,7 +589,7 @@ extension TableMacro: ExtensionMacro {
} else {
initDecoder = """

public nonisolated init(decoder: inout some \(moduleName).QueryDecoder) throws {
public \(nonisolated)init(decoder: inout some \(moduleName).QueryDecoder) throws {
\(raw: (decodings + decodingUnwrappings + decodingAssignments).joined(separator: "\n"))
}
"""
Expand All @@ -598,11 +598,11 @@ extension TableMacro: ExtensionMacro {
return [
DeclSyntax(
"""
\(declaration.attributes.availability)nonisolated extension \(type)\
\(declaration.attributes.availability)\(nonisolated)extension \(type)\
\(conformances.isEmpty ? "" : ": \(conformances, separator: ", ")") {\
\(statics, separator: "\n")
public nonisolated static var columns: TableColumns { TableColumns() }
public nonisolated static var tableName: String { \(tableName) }\(letSchemaName)\(initDecoder)\(initFromOther)
public \(nonisolated)static var columns: TableColumns { TableColumns() }
public \(nonisolated)static var tableName: String { \(tableName) }\(letSchemaName)\(initDecoder)\(initFromOther)
}
"""
)
Expand Down Expand Up @@ -1029,7 +1029,7 @@ extension TableMacro: MemberMacro {

return [
"""
public nonisolated struct TableColumns: \(schemaConformances, separator: ", ") {
public \(nonisolated)struct TableColumns: \(schemaConformances, separator: ", ") {
public typealias QueryValue = \(type.trimmed)
\(columnsProperties, separator: "\n")
public static var allColumns: [any \(moduleName).TableColumnExpression] { \
Expand Down
172 changes: 87 additions & 85 deletions Tests/StructuredQueriesTests/SelectTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1247,92 +1247,94 @@ extension SnapshotTests {
}
}

@Test func reusableStaticHelperOnDraft() {
assertQuery(
Reminder.Draft.incomplete.select(\.id)
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
assertQuery(
Reminder.Draft.where { _ in true }.incomplete.select(\.id)
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE 1 AND NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
assertQuery(
Reminder.Draft.select(\.id).incomplete
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
assertQuery(
Reminder.Draft.all.incomplete.select(\.id)
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
#if swift(>=6.1)
@Test func reusableStaticHelperOnDraft() {
assertQuery(
Reminder.Draft.incomplete.select(\.id)
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
assertQuery(
Reminder.Draft.where { _ in true }.incomplete.select(\.id)
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE 1 AND NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
assertQuery(
Reminder.Draft.select(\.id).incomplete
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
assertQuery(
Reminder.Draft.all.incomplete.select(\.id)
) {
"""
SELECT "reminders"."id"
FROM "reminders"
WHERE NOT ("reminders"."isCompleted")
"""
} results: {
"""
┌───┐
│ 1 │
│ 2 │
│ 3 │
│ 5 │
│ 6 │
│ 8 │
│ 9 │
└───┘
"""
}
}
}
#endif

@Test func reusableColumnHelperOnDraft() {
assertQuery(
Expand Down