Skip to content

Commit ab2b9bc

Browse files
authored
Fix macro-generated code for enum selections (#208)
1 parent edb84b3 commit ab2b9bc

File tree

3 files changed

+80
-26
lines changed

3 files changed

+80
-26
lines changed

Sources/StructuredQueriesMacros/TableMacro.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ extension TableMacro: MemberMacro {
913913
[(name: TokenSyntax, firstName: TokenSyntax, type: TypeSyntax?, default: ExprSyntax?)] = []
914914
var allColumnNames: [TokenSyntax] = []
915915
var writableColumns: [TokenSyntax] = []
916-
var selectedColumns: [TokenSyntax] = []
916+
var selectedColumns: [(name: TokenSyntax, type: TypeSyntax?)] = []
917917
var columnsProperties: [DeclSyntax] = []
918918
var expansionFailed = false
919919

@@ -1045,7 +1045,7 @@ extension TableMacro: MemberMacro {
10451045
)
10461046
}
10471047

1048-
selectedColumns.append(identifier)
1048+
selectedColumns.append((identifier, columnQueryValueType))
10491049

10501050
if !isGenerated {
10511051
// NB: A compiler bug prevents us from applying the '@_Draft' macro directly
@@ -1190,7 +1190,7 @@ extension TableMacro: MemberMacro {
11901190

11911191
let selectionAssignment =
11921192
selectedColumns
1193-
.map { "allColumns.append(contentsOf: \($0)._allColumns)\n" }
1193+
.map { c, _ in "allColumns.append(contentsOf: \(c)._allColumns)\n" }
11941194
.joined()
11951195

11961196
selectionInitializers.append(
@@ -1268,7 +1268,7 @@ extension TableMacro: MemberMacro {
12681268
}
12691269
}
12701270

1271-
selectedColumns.append(identifier)
1271+
selectedColumns.append((identifier, columnQueryValueType))
12721272

12731273
let defaultValue = parameter.defaultValue?.value.rewritten(selfRewriter)
12741274
let tableColumnType =
@@ -1312,7 +1312,7 @@ extension TableMacro: MemberMacro {
13121312
argument.append(" = \(type)(queryOutput: \(defaultValue))")
13131313
}
13141314
let staticColumns = selectedColumns.map {
1315-
$0 == identifier ? "\($0)" : "\(valueType)?(queryOutput: nil)" as ExprSyntax
1315+
$0 == identifier ? "\($0)" : "\($1)?(queryOutput: nil)" as ExprSyntax
13161316
}
13171317
let staticInitialization =
13181318
staticColumns
@@ -1469,7 +1469,7 @@ extension TableMacro: MemberMacro {
14691469
\(raw: writableColumnsAssignment)return writableColumns
14701470
}
14711471
public var queryFragment: QueryFragment {
1472-
"\(raw: selectedColumns.map { #"\(self.\#($0))"# }.joined(separator: ", "))"
1472+
"\(raw: selectedColumns.map { c, _ in #"\(self.\#(c))"# }.joined(separator: ", "))"
14731473
}
14741474
}
14751475
""",

Tests/StructuredQueriesMacrosTests/TableMacroTests.swift

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2453,22 +2453,22 @@ extension SnapshotTests {
24532453
}
24542454
}
24552455
2456-
public struct Selection: StructuredQueriesCore.TableExpression {
2456+
public nonisolated struct Selection: StructuredQueriesCore.TableExpression {
24572457
public typealias QueryValue = Post
24582458
public let allColumns: [any StructuredQueriesCore.QueryExpression]
24592459
public static func photo(
24602460
_ photo: some StructuredQueriesCore.QueryExpression<Photo>
24612461
) -> Self {
24622462
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
24632463
allColumns.append(contentsOf: photo._allColumns)
2464-
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
2464+
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
24652465
return Self(allColumns: allColumns)
24662466
}
24672467
public static func note(
24682468
_ note: some StructuredQueriesCore.QueryExpression<String>
24692469
) -> Self {
24702470
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
2471-
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
2471+
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
24722472
allColumns.append(contentsOf: note._allColumns)
24732473
return Self(allColumns: allColumns)
24742474
}
@@ -2482,7 +2482,10 @@ extension SnapshotTests {
24822482
TableColumns()
24832483
}
24842484
public nonisolated static var _columnWidth: Int {
2485-
[Photo._columnWidth, String._columnWidth].reduce(0, +)
2485+
var columnWidth = 0
2486+
columnWidth += Photo._columnWidth
2487+
columnWidth += String._columnWidth
2488+
return columnWidth
24862489
}
24872490
public nonisolated static var tableName: String {
24882491
"posts"
@@ -2557,22 +2560,22 @@ extension SnapshotTests {
25572560
}
25582561
}
25592562
2560-
public struct Selection: StructuredQueriesCore.TableExpression {
2563+
public nonisolated struct Selection: StructuredQueriesCore.TableExpression {
25612564
public typealias QueryValue = Post
25622565
public let allColumns: [any StructuredQueriesCore.QueryExpression]
25632566
public static func photo(
25642567
_ photo: some StructuredQueriesCore.QueryExpression<Photo>
25652568
) -> Self {
25662569
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
25672570
allColumns.append(contentsOf: photo._allColumns)
2568-
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
2571+
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
25692572
return Self(allColumns: allColumns)
25702573
}
25712574
public static func note(
25722575
_ note: some StructuredQueriesCore.QueryExpression<String>
25732576
) -> Self {
25742577
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
2575-
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
2578+
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
25762579
allColumns.append(contentsOf: note._allColumns)
25772580
return Self(allColumns: allColumns)
25782581
}
@@ -2586,7 +2589,10 @@ extension SnapshotTests {
25862589
TableColumns()
25872590
}
25882591
public nonisolated static var _columnWidth: Int {
2589-
[Photo._columnWidth, String._columnWidth].reduce(0, +)
2592+
var columnWidth = 0
2593+
columnWidth += Photo._columnWidth
2594+
columnWidth += String._columnWidth
2595+
return columnWidth
25902596
}
25912597
public nonisolated static var tableName: String {
25922598
"posts"
@@ -2657,22 +2663,22 @@ extension SnapshotTests {
26572663
}
26582664
}
26592665
2660-
public struct Selection: StructuredQueriesCore.TableExpression {
2666+
public nonisolated struct Selection: StructuredQueriesCore.TableExpression {
26612667
public typealias QueryValue = Post
26622668
public let allColumns: [any StructuredQueriesCore.QueryExpression]
26632669
public static func photo(
26642670
_ photo: some StructuredQueriesCore.QueryExpression<Photo>
26652671
) -> Self {
26662672
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
26672673
allColumns.append(contentsOf: photo._allColumns)
2668-
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
2674+
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
26692675
return Self(allColumns: allColumns)
26702676
}
26712677
public static func note(
26722678
_ note: some StructuredQueriesCore.QueryExpression<String>
26732679
) -> Self {
26742680
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
2675-
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
2681+
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
26762682
allColumns.append(contentsOf: note._allColumns)
26772683
return Self(allColumns: allColumns)
26782684
}
@@ -2686,7 +2692,10 @@ extension SnapshotTests {
26862692
TableColumns()
26872693
}
26882694
public nonisolated static var _columnWidth: Int {
2689-
[Photo._columnWidth, String._columnWidth].reduce(0, +)
2695+
var columnWidth = 0
2696+
columnWidth += Photo._columnWidth
2697+
columnWidth += String._columnWidth
2698+
return columnWidth
26902699
}
26912700
public nonisolated static var tableName: String {
26922701
"posts"
@@ -2742,22 +2751,22 @@ extension SnapshotTests {
27422751
}
27432752
}
27442753
2745-
public struct Selection: StructuredQueriesCore.TableExpression {
2754+
public nonisolated struct Selection: StructuredQueriesCore.TableExpression {
27462755
public typealias QueryValue = Post
27472756
public let allColumns: [any StructuredQueriesCore.QueryExpression]
27482757
public static func photo(
27492758
_ photo: some StructuredQueriesCore.QueryExpression<Photo>
27502759
) -> Self {
27512760
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
27522761
allColumns.append(contentsOf: photo._allColumns)
2753-
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
2762+
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
27542763
return Self(allColumns: allColumns)
27552764
}
27562765
public static func note(
27572766
text note: some StructuredQueriesCore.QueryExpression<String>
27582767
) -> Self {
27592768
var allColumns: [any StructuredQueriesCore.QueryExpression] = []
2760-
allColumns.append(contentsOf: String?(queryOutput: nil)._allColumns)
2769+
allColumns.append(contentsOf: Photo?(queryOutput: nil)._allColumns)
27612770
allColumns.append(contentsOf: note._allColumns)
27622771
return Self(allColumns: allColumns)
27632772
}
@@ -2771,7 +2780,10 @@ extension SnapshotTests {
27712780
TableColumns()
27722781
}
27732782
public nonisolated static var _columnWidth: Int {
2774-
[Photo._columnWidth, String._columnWidth].reduce(0, +)
2783+
var columnWidth = 0
2784+
columnWidth += Photo._columnWidth
2785+
columnWidth += String._columnWidth
2786+
return columnWidth
27752787
}
27762788
public nonisolated static var tableName: String {
27772789
"posts"
@@ -2823,7 +2835,7 @@ extension SnapshotTests {
28232835
}
28242836
}
28252837
2826-
public struct Selection: StructuredQueriesCore.TableExpression {
2838+
public nonisolated struct Selection: StructuredQueriesCore.TableExpression {
28272839
public typealias QueryValue = Post
28282840
public let allColumns: [any StructuredQueriesCore.QueryExpression]
28292841
public static func note(
@@ -2843,7 +2855,9 @@ extension SnapshotTests {
28432855
TableColumns()
28442856
}
28452857
public nonisolated static var _columnWidth: Int {
2846-
[String._columnWidth].reduce(0, +)
2858+
var columnWidth = 0
2859+
columnWidth += String._columnWidth
2860+
return columnWidth
28472861
}
28482862
public nonisolated static var tableName: String {
28492863
"posts"
@@ -2893,7 +2907,7 @@ extension SnapshotTests {
28932907
}
28942908
}
28952909
2896-
public struct Selection: StructuredQueriesCore.TableExpression {
2910+
public nonisolated struct Selection: StructuredQueriesCore.TableExpression {
28972911
public typealias QueryValue = Post
28982912
public let allColumns: [any StructuredQueriesCore.QueryExpression]
28992913
public static func timestamp(
@@ -2913,7 +2927,9 @@ extension SnapshotTests {
29132927
TableColumns()
29142928
}
29152929
public nonisolated static var _columnWidth: Int {
2916-
[Date.UnixTimeRepresentation._columnWidth].reduce(0, +)
2930+
var columnWidth = 0
2931+
columnWidth += Date.UnixTimeRepresentation._columnWidth
2932+
return columnWidth
29172933
}
29182934
public nonisolated static var tableName: String {
29192935
"posts"

Tests/StructuredQueriesTests/EnumTableTests.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,44 @@
342342
"""
343343
}
344344
}
345+
346+
@Test func selection() {
347+
assertQuery(
348+
Values(
349+
Attachment.Kind.Selection.note("Hello, world!")
350+
)
351+
) {
352+
"""
353+
SELECT NULL AS "link", 'Hello, world!' AS "note", NULL AS "videoURL", NULL AS "videoKind", NULL AS "imageCaption", NULL AS "imageURL"
354+
"""
355+
} results: {
356+
"""
357+
┌───────────────────────────────────────┐
358+
│ Attachment.Kind.note("Hello, world!") │
359+
└───────────────────────────────────────┘
360+
"""
361+
}
362+
assertQuery(
363+
Values(
364+
Attachment.Kind.Selection.image(Attachment.Image(caption: "Blob", url: URL(string: "https://pointfree.co")!))
365+
)
366+
) {
367+
"""
368+
SELECT NULL AS "link", NULL AS "note", NULL AS "videoURL", NULL AS "videoKind", 'Blob', 'https://pointfree.co' AS "imageCaption"
369+
"""
370+
} results: {
371+
"""
372+
┌────────────────────────────────────┐
373+
│ Attachment.Kind.image( │
374+
│ Attachment.Image( │
375+
│ caption: "Blob", │
376+
│ url: URL(https://pointfree.co) │
377+
│ ) │
378+
│ ) │
379+
└────────────────────────────────────┘
380+
"""
381+
}
382+
}
345383
}
346384
}
347385

0 commit comments

Comments
 (0)