@@ -20,20 +20,20 @@ extension SnapshotTests {
2020 let team: Team
2121 }
2222
23- extension PlayerAndTeam: StructuredQueries .QueryRepresentable {
24- public struct Columns: StructuredQueries .QueryExpression {
23+ extension PlayerAndTeam: StructuredQueriesCore .QueryRepresentable {
24+ public struct Columns: StructuredQueriesCore .QueryExpression {
2525 public typealias QueryValue = PlayerAndTeam
26- public let queryFragment: StructuredQueries .QueryFragment
26+ public let queryFragment: StructuredQueriesCore .QueryFragment
2727 public init(
28- player: some StructuredQueries .QueryExpression<Player>,
29- team: some StructuredQueries .QueryExpression<Team>
28+ player: some StructuredQueriesCore .QueryExpression<Player>,
29+ team: some StructuredQueriesCore .QueryExpression<Team>
3030 ) {
3131 self.queryFragment = """
3232 \(player.queryFragment) AS "player", \(team.queryFragment) AS "team"
3333 """
3434 }
3535 }
36- public init(decoder: inout some StructuredQueries .QueryDecoder) throws {
36+ public init(decoder: inout some StructuredQueriesCore .QueryDecoder) throws {
3737 let player = try decoder.decode(Player.self)
3838 let team = try decoder.decode(Team.self)
3939 guard let player else {
@@ -82,20 +82,20 @@ extension SnapshotTests {
8282 var listTitle: String?
8383 }
8484
85- extension ReminderTitleAndListTitle: StructuredQueries .QueryRepresentable {
86- public struct Columns: StructuredQueries .QueryExpression {
85+ extension ReminderTitleAndListTitle: StructuredQueriesCore .QueryRepresentable {
86+ public struct Columns: StructuredQueriesCore .QueryExpression {
8787 public typealias QueryValue = ReminderTitleAndListTitle
88- public let queryFragment: StructuredQueries .QueryFragment
88+ public let queryFragment: StructuredQueriesCore .QueryFragment
8989 public init(
90- reminderTitle: some StructuredQueries .QueryExpression<String>,
91- listTitle: some StructuredQueries .QueryExpression<String?>
90+ reminderTitle: some StructuredQueriesCore .QueryExpression<String>,
91+ listTitle: some StructuredQueriesCore .QueryExpression<String?>
9292 ) {
9393 self.queryFragment = """
9494 \(reminderTitle.queryFragment) AS "reminderTitle", \(listTitle.queryFragment) AS "listTitle"
9595 """
9696 }
9797 }
98- public init(decoder: inout some StructuredQueries .QueryDecoder) throws {
98+ public init(decoder: inout some StructuredQueriesCore .QueryDecoder) throws {
9999 let reminderTitle = try decoder.decode(String.self)
100100 let listTitle = try decoder.decode(String.self)
101101 guard let reminderTitle else {
@@ -123,19 +123,74 @@ extension SnapshotTests {
123123 var date: Date
124124 }
125125
126- extension ReminderDate: StructuredQueries .QueryRepresentable {
127- public struct Columns: StructuredQueries .QueryExpression {
126+ extension ReminderDate: StructuredQueriesCore .QueryRepresentable {
127+ public struct Columns: StructuredQueriesCore .QueryExpression {
128128 public typealias QueryValue = ReminderDate
129- public let queryFragment: StructuredQueries .QueryFragment
129+ public let queryFragment: StructuredQueriesCore .QueryFragment
130130 public init(
131- date: some StructuredQueries .QueryExpression<Date.ISO8601Representation>
131+ date: some StructuredQueriesCore .QueryExpression<Date.ISO8601Representation>
132132 ) {
133133 self.queryFragment = """
134134 \(date.queryFragment) AS "date"
135135 """
136136 }
137137 }
138- public init(decoder: inout some StructuredQueries.QueryDecoder) throws {
138+ public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
139+ let date = try decoder.decode(Date.ISO8601Representation.self)
140+ guard let date else {
141+ throw QueryDecodingError.missingRequiredColumn
142+ }
143+ self.date = date
144+ }
145+ }
146+ """#
147+ }
148+ }
149+
150+ @Test func dateDiagnostic( ) {
151+ assertMacro {
152+ """
153+ @Selection struct ReminderDate {
154+ var date: Date
155+ }
156+ """
157+ } diagnostics: {
158+ """
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: {
169+ """
170+ @Selection struct ReminderDate {
171+ @Column(as: Date.ISO8601Representation.self)
172+ var date: Date
173+ }
174+ """
175+ } expansion: {
176+ #"""
177+ struct ReminderDate {
178+ var date: Date
179+ }
180+
181+ extension ReminderDate: StructuredQueriesCore.QueryRepresentable {
182+ public struct Columns: StructuredQueriesCore.QueryExpression {
183+ public typealias QueryValue = ReminderDate
184+ public let queryFragment: StructuredQueriesCore.QueryFragment
185+ public init(
186+ date: some StructuredQueriesCore.QueryExpression<Date.ISO8601Representation>
187+ ) {
188+ self.queryFragment = """
189+ \(date.queryFragment) AS "date"
190+ """
191+ }
192+ }
193+ public init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
139194 let date = try decoder.decode(Date.ISO8601Representation.self)
140195 guard let date else {
141196 throw QueryDecodingError.missingRequiredColumn
0 commit comments