Skip to content

Commit 0194507

Browse files
committed
wip
1 parent 67ca68b commit 0194507

File tree

2 files changed

+121
-84
lines changed

2 files changed

+121
-84
lines changed

Tests/StructuredQueriesMacrosTests/SelectionMacroTests.swift

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,22 +156,35 @@ extension SnapshotTests {
156156
"""
157157
} diagnostics: {
158158
"""
159-
@Selection struct ReminderDate {
160-
var date: Date
161-
┬─────────────
162-
╰─ 🛑 'Date' column requires a query representation
163-
✏️ Insert '@Column(as: Date.ISO8601Representation.self)'
164-
✏️ Insert '@Column(as: Date.UnixTimeRepresentation.self)'
165-
✏️ Insert '@Column(as: Date.JulianDayRepresentation.self)'
166-
}
167-
"""
168-
} fixes: {
159+
169160
"""
170-
@Selection struct ReminderDate {
171-
@Column(as: Date.ISO8601Representation.self)
161+
}expansion: {
162+
#"""
163+
struct ReminderDate {
172164
var date: Date
173165
}
174-
"""
166+
167+
extension ReminderDate: StructuredQueriesCore.QueryRepresentable {
168+
public struct Columns: StructuredQueriesCore.QueryExpression {
169+
public typealias QueryValue = ReminderDate
170+
public let queryFragment: StructuredQueriesCore.QueryFragment
171+
public init(
172+
date: some StructuredQueriesCore.QueryExpression<Date.ISO8601Representation>
173+
) {
174+
self.queryFragment = """
175+
\(date.queryFragment) AS "date"
176+
"""
177+
}
178+
}
179+
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
180+
let date = try decoder.decode(Date.ISO8601Representation.self)
181+
guard let date else {
182+
throw QueryDecodingError.missingRequiredColumn
183+
}
184+
self.date = date
185+
}
186+
}
187+
"""#
175188
} expansion: {
176189
#"""
177190
struct ReminderDate {
@@ -183,15 +196,15 @@ extension SnapshotTests {
183196
public typealias QueryValue = ReminderDate
184197
public let queryFragment: StructuredQueriesCore.QueryFragment
185198
public init(
186-
date: some StructuredQueriesCore.QueryExpression<Date.ISO8601Representation>
199+
date: some StructuredQueriesCore.QueryExpression<Date>
187200
) {
188201
self.queryFragment = """
189202
\(date.queryFragment) AS "date"
190203
"""
191204
}
192205
}
193206
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
194-
let date = try decoder.decode(Date.ISO8601Representation.self)
207+
let date = try decoder.decode(Date.self)
195208
guard let date else {
196209
throw QueryDecodingError.missingRequiredColumn
197210
}

Tests/StructuredQueriesMacrosTests/TableMacroTests.swift

Lines changed: 93 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -229,18 +229,18 @@ extension SnapshotTests {
229229
var baz: Int
230230
}
231231
232-
extension Bar: StructuredQueries.Table {
233-
public struct TableColumns: StructuredQueries.TableDefinition {
232+
extension Bar: StructuredQueriesCore.Table {
233+
public struct TableColumns: StructuredQueriesCore.TableDefinition {
234234
public typealias QueryValue = Bar
235-
public let baz = StructuredQueries.TableColumn<QueryValue, Int>("baz", keyPath: \QueryValue.baz)
236-
public static var allColumns: [any StructuredQueries.TableColumnExpression] {
235+
public let baz = StructuredQueriesCore.TableColumn<QueryValue, Int>("baz", keyPath: \QueryValue.baz)
236+
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
237237
[QueryValue.columns.baz]
238238
}
239239
}
240240
public static let columns = TableColumns()
241241
public static let tableName = "bar"
242242
public static let schemaName: Swift.String? = "foo"
243-
public init(decoder: inout some StructuredQueries.QueryDecoder) throws {
243+
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
244244
let baz = try decoder.decode(Int.self)
245245
guard let baz else {
246246
throw QueryDecodingError.missingRequiredColumn
@@ -540,24 +540,33 @@ extension SnapshotTests {
540540
"""
541541
} diagnostics: {
542542
"""
543-
@Table
544-
struct Foo {
545-
var bar: Date
546-
┬────────────
547-
╰─ 🛑 'Date' column requires a query representation
548-
✏️ Insert '@Column(as: Date.ISO8601Representation.self)'
549-
✏️ Insert '@Column(as: Date.UnixTimeRepresentation.self)'
550-
✏️ Insert '@Column(as: Date.JulianDayRepresentation.self)'
551-
}
552-
"""
553-
} fixes: {
543+
554544
"""
555-
@Table
545+
}expansion: {
546+
#"""
556547
struct Foo {
557-
@Column(as: Date.ISO8601Representation.self)
558548
var bar: Date
559549
}
560-
"""
550+
551+
extension Foo: StructuredQueriesCore.Table {
552+
public struct TableColumns: StructuredQueriesCore.TableDefinition {
553+
public typealias QueryValue = Foo
554+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation>("bar", keyPath: \QueryValue.bar)
555+
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
556+
[QueryValue.columns.bar]
557+
}
558+
}
559+
public static let columns = TableColumns()
560+
public static let tableName = "foos"
561+
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
562+
let bar = try decoder.decode(Date.ISO8601Representation.self)
563+
guard let bar else {
564+
throw QueryDecodingError.missingRequiredColumn
565+
}
566+
self.bar = bar
567+
}
568+
}
569+
"""#
561570
} expansion: {
562571
#"""
563572
struct Foo {
@@ -567,15 +576,15 @@ extension SnapshotTests {
567576
extension Foo: StructuredQueriesCore.Table {
568577
public struct TableColumns: StructuredQueriesCore.TableDefinition {
569578
public typealias QueryValue = Foo
570-
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation>("bar", keyPath: \QueryValue.bar)
579+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date>("bar", keyPath: \QueryValue.bar)
571580
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
572581
[QueryValue.columns.bar]
573582
}
574583
}
575584
public static let columns = TableColumns()
576585
public static let tableName = "foos"
577586
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
578-
let bar = try decoder.decode(Date.ISO8601Representation.self)
587+
let bar = try decoder.decode(Date.self)
579588
guard let bar else {
580589
throw QueryDecodingError.missingRequiredColumn
581590
}
@@ -596,24 +605,29 @@ extension SnapshotTests {
596605
"""
597606
} diagnostics: {
598607
"""
599-
@Table
600-
struct Foo {
601-
var bar: Date?
602-
┬─────────────
603-
╰─ 🛑 'Date' column requires a query representation
604-
✏️ Insert '@Column(as: Date.ISO8601Representation?.self)'
605-
✏️ Insert '@Column(as: Date.UnixTimeRepresentation?.self)'
606-
✏️ Insert '@Column(as: Date.JulianDayRepresentation?.self)'
607-
}
608-
"""
609-
} fixes: {
608+
610609
"""
611-
@Table
610+
}expansion: {
611+
#"""
612612
struct Foo {
613-
@Column(as: Date.ISO8601Representation?.self)
614613
var bar: Date?
615614
}
616-
"""
615+
616+
extension Foo: StructuredQueriesCore.Table {
617+
public struct TableColumns: StructuredQueriesCore.TableDefinition {
618+
public typealias QueryValue = Foo
619+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation?>("bar", keyPath: \QueryValue.bar)
620+
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
621+
[QueryValue.columns.bar]
622+
}
623+
}
624+
public static let columns = TableColumns()
625+
public static let tableName = "foos"
626+
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
627+
self.bar = try decoder.decode(Date.ISO8601Representation.self)
628+
}
629+
}
630+
"""#
617631
} expansion: {
618632
#"""
619633
struct Foo {
@@ -623,15 +637,15 @@ extension SnapshotTests {
623637
extension Foo: StructuredQueriesCore.Table {
624638
public struct TableColumns: StructuredQueriesCore.TableDefinition {
625639
public typealias QueryValue = Foo
626-
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation?>("bar", keyPath: \QueryValue.bar)
640+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date?>("bar", keyPath: \QueryValue.bar)
627641
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
628642
[QueryValue.columns.bar]
629643
}
630644
}
631645
public static let columns = TableColumns()
632646
public static let tableName = "foos"
633647
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
634-
self.bar = try decoder.decode(Date.ISO8601Representation.self)
648+
self.bar = try decoder.decode(Date.self)
635649
}
636650
}
637651
"""#
@@ -648,24 +662,29 @@ extension SnapshotTests {
648662
"""
649663
} diagnostics: {
650664
"""
651-
@Table
652-
struct Foo {
653-
var bar: Optional<Date>
654-
┬──────────────────────
655-
╰─ 🛑 'Date' column requires a query representation
656-
✏️ Insert '@Column(as: Date.ISO8601Representation?.self)'
657-
✏️ Insert '@Column(as: Date.UnixTimeRepresentation?.self)'
658-
✏️ Insert '@Column(as: Date.JulianDayRepresentation?.self)'
659-
}
660-
"""
661-
} fixes: {
665+
662666
"""
663-
@Table
667+
}expansion: {
668+
#"""
664669
struct Foo {
665-
@Column(as: Date.ISO8601Representation?.self)
666670
var bar: Optional<Date>
667671
}
668-
"""
672+
673+
extension Foo: StructuredQueriesCore.Table {
674+
public struct TableColumns: StructuredQueriesCore.TableDefinition {
675+
public typealias QueryValue = Foo
676+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation?>("bar", keyPath: \QueryValue.bar)
677+
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
678+
[QueryValue.columns.bar]
679+
}
680+
}
681+
public static let columns = TableColumns()
682+
public static let tableName = "foos"
683+
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
684+
self.bar = try decoder.decode(Date.ISO8601Representation.self)
685+
}
686+
}
687+
"""#
669688
} expansion: {
670689
#"""
671690
struct Foo {
@@ -675,15 +694,15 @@ extension SnapshotTests {
675694
extension Foo: StructuredQueriesCore.Table {
676695
public struct TableColumns: StructuredQueriesCore.TableDefinition {
677696
public typealias QueryValue = Foo
678-
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation?>("bar", keyPath: \QueryValue.bar)
697+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Optional<Date>>("bar", keyPath: \QueryValue.bar)
679698
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
680699
[QueryValue.columns.bar]
681700
}
682701
}
683702
public static let columns = TableColumns()
684703
public static let tableName = "foos"
685704
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
686-
self.bar = try decoder.decode(Date.ISO8601Representation.self)
705+
self.bar = try decoder.decode(Optional<Date>.self)
687706
}
688707
}
689708
"""#
@@ -700,24 +719,29 @@ extension SnapshotTests {
700719
"""
701720
} diagnostics: {
702721
"""
703-
@Table
704-
struct Foo {
705-
var bar = Date()
706-
┬───────────────
707-
╰─ 🛑 'Date' column requires a query representation
708-
✏️ Insert '@Column(as: Date.ISO8601Representation.self)'
709-
✏️ Insert '@Column(as: Date.UnixTimeRepresentation.self)'
710-
✏️ Insert '@Column(as: Date.JulianDayRepresentation.self)'
711-
}
712-
"""
713-
} fixes: {
722+
714723
"""
715-
@Table
724+
}expansion: {
725+
#"""
716726
struct Foo {
717-
@Column(as: Date.ISO8601Representation.self)
718727
var bar = Date()
719728
}
720-
"""
729+
730+
extension Foo: StructuredQueriesCore.Table {
731+
public struct TableColumns: StructuredQueriesCore.TableDefinition {
732+
public typealias QueryValue = Foo
733+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation>("bar", keyPath: \QueryValue.bar, default: Date())
734+
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
735+
[QueryValue.columns.bar]
736+
}
737+
}
738+
public static let columns = TableColumns()
739+
public static let tableName = "foos"
740+
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
741+
self.bar = try decoder.decode(Date.ISO8601Representation.self) ?? Date()
742+
}
743+
}
744+
"""#
721745
} expansion: {
722746
#"""
723747
struct Foo {
@@ -727,15 +751,15 @@ extension SnapshotTests {
727751
extension Foo: StructuredQueriesCore.Table {
728752
public struct TableColumns: StructuredQueriesCore.TableDefinition {
729753
public typealias QueryValue = Foo
730-
public let bar = StructuredQueriesCore.TableColumn<QueryValue, Date.ISO8601Representation>("bar", keyPath: \QueryValue.bar, default: Date())
754+
public let bar = StructuredQueriesCore.TableColumn<QueryValue, _>("bar", keyPath: \QueryValue.bar, default: Date())
731755
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
732756
[QueryValue.columns.bar]
733757
}
734758
}
735759
public static let columns = TableColumns()
736760
public static let tableName = "foos"
737761
public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
738-
self.bar = try decoder.decode(Date.ISO8601Representation.self) ?? Date()
762+
self.bar = try decoder.decode() ?? Date()
739763
}
740764
}
741765
"""#

0 commit comments

Comments
 (0)