Skip to content

Commit 07053cb

Browse files
committed
Use type name for query name in macros
1 parent 0b0edf1 commit 07053cb

File tree

5 files changed

+24
-13
lines changed

5 files changed

+24
-13
lines changed

Sources/OtterMacros/DatabaseMacro.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ extension DatabaseMacro: MemberMacro {
4444
}
4545
}
4646

47-
for (name, variable) in variables {
48-
guard let queryMacro = variable.queryMacroInputsIfIsQuery(in: context) else { continue }
47+
for variable in variables.values {
48+
guard let queryMacro = variable.queryMacroInputsIfIsQuery(in: context),
49+
let typeName = variable.typeName?.removingQuerySuffix() else { continue }
4950

5051
let (statement, diagnostics) = compiler.compile(
5152
query: queryMacro.source,
52-
named: name.removingQuerySuffix(),
53+
named: typeName,
5354
inputType: queryMacro.inputName,
5455
outputType: queryMacro.outputName
5556
)

Sources/OtterMacros/Syntax+Extensions.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ import SwiftSyntaxBuilder
1212
import SwiftSyntaxMacros
1313

1414
extension VariableDeclSyntax {
15+
/// The variables type name.
16+
var typeName: String? {
17+
for binding in bindings {
18+
guard let someOrAny = binding.typeAnnotation?.type.as(SomeOrAnyTypeSyntax.self),
19+
let name = someOrAny.constraint.as(IdentifierTypeSyntax.self)?.name.text else { continue }
20+
return name
21+
}
22+
return nil
23+
}
24+
1525
/// Searchs the variable decl for the `@Query` macro and gets the input
1626
/// arguments and performs any validation.
1727
func queryMacroInputsIfIsQuery(in context: some MacroExpansionContext) -> (

Tests/OtterTests/DatabaseValueAdapterTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ struct DatabaseValueAdapterTests {
142142
@Database
143143
struct TestDB {
144144
@Query("INSERT INTO hasValues VALUES (?, ?)")
145-
var insert: InsertDatabaseQuery
145+
var insert: any InsertQuery
146146

147147
@Query("SELECT * FROM hasValues")
148-
var all: AllDatabaseQuery
148+
var all: any AllQuery
149149

150150
static var migrations: [String] {
151151
return [

Tests/OtterTests/SQLAnyTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ struct SQLAnyTests {
4343
@Database
4444
struct AnyDB {
4545
@Query("INSERT INTO foo (bar) VALUES (?)")
46-
var insertFoo: InsertFooDatabaseQuery
46+
var insertFoo: any InsertFooQuery
4747

4848
@Query("SELECT * FROM foo")
49-
var selectFoos: SelectFoosDatabaseQuery
49+
var selectFoos: any SelectFoosQuery
5050

5151
static var migrations: [String] {
5252
return ["CREATE TABLE foo (bar ANY);"]

Tests/OtterTests/TestDatabase.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@ import Otter
1212
@Database
1313
struct TestDB {
1414
@Query("SELECT * FROM foo")
15-
var selectFoos: SelectFoosDatabaseQuery
15+
var selectFoos: any SelectFoosQuery
1616

1717
@Query("SELECT * FROM foo WHERE bar = ?")
18-
var selectFoo: SelectFooDatabaseQuery
18+
var selectFoo: any SelectFooQuery
1919

2020
@Query("INSERT INTO foo (bar) VALUES (?)")
21-
var insertFoo: InsertFooDatabaseQuery
21+
var insertFoo: any InsertFooQuery
2222

2323
@Query("INSERT INTO baz (qux) VALUES (?)")
24-
var insertBaz: InsertBazDatabaseQuery
24+
var insertBaz: any InsertBazQuery
2525

2626
@Query("SELECT foo.*, baz.* FROM foo LEFT OUTER JOIN baz ON foo.bar = baz.qux")
27-
var selectFooAndBaz: SelectFooAndBazDatabaseQuery
27+
var selectFooAndBaz: any SelectFooAndBazQuery
2828

2929
@Query("SELECT foo.*, baz.* FROM foo INNER JOIN baz ON foo.bar = baz.qux")
30-
var selectFooAndBazNotOptional: SelectFooAndBazNotOptionalDatabaseQuery
30+
var selectFooAndBazNotOptional: any SelectFooAndBazNotOptionalQuery
3131

3232
static var migrations: [String] {
3333
return [

0 commit comments

Comments
 (0)