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
4 changes: 2 additions & 2 deletions Sources/StructuredQueriesMacros/TableMacro.swift
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ extension TableMacro: ExtensionMacro {
\(columnQueryValueType?.rewritten(selfRewriter) ?? "_")\
>(\
\(columnName), \
keyPath: \\QueryValue.\(identifier)\(defaultValue.map { ", default: \($0)" } ?? "")\
keyPath: \\QueryValue.\(identifier)\((defaultValue?.trimmedDescription).map { ", default: \($0)" } ?? "")\
)
"""
)
Expand Down Expand Up @@ -794,7 +794,7 @@ extension TableMacro: MemberMacro {
\(columnQueryValueType?.rewritten(selfRewriter) ?? "_")\
>(\
\(columnName), \
keyPath: \\QueryValue.\(identifier)\(defaultValue.map { ", default: \($0)" } ?? "")\
keyPath: \\QueryValue.\(identifier)\((defaultValue?.trimmedDescription).map { ", default: \($0)" } ?? "")\
)
"""
)
Expand Down
22 changes: 11 additions & 11 deletions Tests/StructuredQueriesMacrosTests/TableMacroTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ extension SnapshotTests {
@Table
struct User {
/// The user's identifier.
let id: /* TODO: UUID */Int
let id: /* TODO: UUID */Int // Primary key
/// The user's email.
var email: String? // TODO: Should this be non-optional?
var email: String? = "" // TODO: Should this be non-optional?
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comments were being take with defaults and causing compilation errors in the expanded macro code.

/// The user's age.
var age: Int
}
Expand All @@ -69,16 +69,16 @@ extension SnapshotTests {
#"""
struct User {
/// The user's identifier.
let id: /* TODO: UUID */Int
let id: /* TODO: UUID */Int // Primary key
/// The user's email.
var email: String? // TODO: Should this be non-optional?
var email: String? = "" // TODO: Should this be non-optional?
/// The user's age.
var age: Int

public nonisolated struct TableColumns: StructuredQueriesCore.TableDefinition, StructuredQueriesCore.PrimaryKeyedTableDefinition {
public typealias QueryValue = User
public let id = StructuredQueriesCore.TableColumn<QueryValue, Int>("id", keyPath: \QueryValue.id)
public let email = StructuredQueriesCore.TableColumn<QueryValue, String?>("email", keyPath: \QueryValue.email)
public let email = StructuredQueriesCore.TableColumn<QueryValue, String?>("email", keyPath: \QueryValue.email, default: "")
public let age = StructuredQueriesCore.TableColumn<QueryValue, Int>("age", keyPath: \QueryValue.age)
public var primaryKey: StructuredQueriesCore.TableColumn<QueryValue, Int> {
self.id
Expand All @@ -96,13 +96,13 @@ extension SnapshotTests {

public struct Draft: StructuredQueriesCore.TableDraft {
public typealias PrimaryTable = User
let id: /* TODO: UUID */ Int?
var email: String?
let id: /* TODO: UUID */ Int? // Primary key
var email: String? = ""
var age: Int
public nonisolated struct TableColumns: StructuredQueriesCore.TableDefinition {
public typealias QueryValue = Draft
public let id = StructuredQueriesCore.TableColumn<QueryValue, Int?>("id", keyPath: \QueryValue.id)
public let email = StructuredQueriesCore.TableColumn<QueryValue, String?>("email", keyPath: \QueryValue.email)
public let email = StructuredQueriesCore.TableColumn<QueryValue, String?>("email", keyPath: \QueryValue.email, default: "")
public let age = StructuredQueriesCore.TableColumn<QueryValue, Int>("age", keyPath: \QueryValue.age)
public static var allColumns: [any StructuredQueriesCore.TableColumnExpression] {
[QueryValue.columns.id, QueryValue.columns.email, QueryValue.columns.age]
Expand All @@ -124,7 +124,7 @@ extension SnapshotTests {

public nonisolated init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
self.id = try decoder.decode(Int.self)
self.email = try decoder.decode(String.self)
self.email = try decoder.decode(String.self) ?? ""
let age = try decoder.decode(Int.self)
guard let age else {
throw QueryDecodingError.missingRequiredColumn
Expand All @@ -139,7 +139,7 @@ extension SnapshotTests {
}
public init(
id: /* TODO: UUID */ Int? = nil,
email: String? = nil,
email: String? = "",
age: Int
) {
self.id = id
Expand All @@ -158,7 +158,7 @@ extension SnapshotTests {
}
public nonisolated init(decoder: inout some StructuredQueriesCore.QueryDecoder) throws {
let id = try decoder.decode(Int.self)
self.email = try decoder.decode(String.self)
self.email = try decoder.decode(String.self) ?? "" // TODO: Should this be non-optional?
let age = try decoder.decode(Int.self)
guard let id else {
throw QueryDecodingError.missingRequiredColumn
Expand Down
10 changes: 10 additions & 0 deletions Tests/StructuredQueriesTests/CompileTimeTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,13 @@ func dynamicMemberLookup() {
b.baz.is(nil)
}
}

@Table
struct TableWithComments {
/// The user's identifier.
let id: /* TODO: UUID */ Int // Primary key
/// The user's email.
var email: String? = "" // TODO: Should this be non-optional?
/// The user's age.
var age: Int
}