@@ -10,6 +10,15 @@ import SwiftSyntax
1010import SwiftSyntaxBuilder
1111
1212public protocol Language {
13+ static func queryTypeName( input: String , output: String ) -> String
14+
15+ static func inputTypeName( input: BuiltinOrGenerated ? ) -> String
16+
17+ static func outputTypeName(
18+ output: BuiltinOrGenerated ? ,
19+ cardinality: Cardinality
20+ ) -> String
21+
1322 /// Returns the Language builtin for the given SQL type
1423 static func builtinType( for type: Type ) -> String
1524
@@ -19,7 +28,7 @@ public protocol Language {
1928 databaseName: String ,
2029 migrations: [ String ] ,
2130 tables: [ GeneratedModel ] ,
22- queries: [ GeneratedQuery ] ,
31+ queries: [ ( String ? , [ GeneratedQuery ] ) ] ,
2332 options: GenerationOptions
2433 ) throws -> String
2534
@@ -39,7 +48,7 @@ extension Language {
3948 imports: [ String ] ,
4049 databaseName: String ,
4150 migrations: [ String ] ,
42- queries: [ Statement ] ,
51+ queries: [ ( String ? , [ Statement ] ) ] ,
4352 schema: Schema ,
4453 options: GenerationOptions
4554 ) throws -> String {
@@ -56,14 +65,14 @@ extension Language {
5665 }
5766
5867 public static func assemble(
59- queries: [ Statement ] ,
68+ queries: [ ( String ? , [ Statement ] ) ] ,
6069 schema: Schema
6170 ) throws -> (
6271 tables: [ GeneratedModel ] ,
63- queries: [ GeneratedQuery ]
72+ queries: [ ( String ? , [ GeneratedQuery ] ) ]
6473 ) {
6574 let tables = schema. mapValues ( model ( for: ) )
66- let queries = queries. map { query ( for: $0, tables: tables) }
75+ let queries = queries. map { ( $0 . map { " \( $0 ) Queries " } , $1 . map { query ( for: $0, tables: tables) } ) }
6776 return ( Array ( tables. values) , queries)
6877 }
6978
@@ -91,10 +100,18 @@ extension Language {
91100 }
92101 } . joined ( )
93102
103+ let inputTypeName = inputTypeName ( input: input)
104+ let outputTypeName = outputTypeName ( output: output, cardinality: statement. outputCardinality)
105+
94106 return GeneratedQuery (
95- name: " \( definition. name) Query " ,
107+ name: definition. name. description,
108+ variableName: definition. name. lowercaseFirst,
109+ typeName: queryTypeName ( input: inputTypeName, output: outputTypeName) ,
110+ typealiasName: " \( definition. name. capitalizedFirst) Query " ,
96111 input: input,
112+ inputName: inputTypeName,
97113 output: output,
114+ outputName: outputTypeName,
98115 outputCardinality: statement. outputCardinality,
99116 sourceSql: sql,
100117 isReadOnly: statement. isReadOnly,
@@ -230,9 +247,7 @@ extension Language {
230247
231248public typealias GenerationOptions = Set < GenerationOption >
232249
233- public enum GenerationOption : Hashable {
234- case namespaceGeneratedModels
235- }
250+ public enum GenerationOption : Hashable { }
236251
237252public struct GeneratedModel {
238253 let name : String
@@ -261,8 +276,13 @@ public struct GeneratedField {
261276
262277public struct GeneratedQuery {
263278 let name : String
279+ let variableName : String
280+ let typeName : String
281+ let typealiasName : String
264282 let input : BuiltinOrGenerated ?
283+ let inputName : String
265284 let output : BuiltinOrGenerated ?
285+ let outputName : String
266286 let outputCardinality : Cardinality
267287 let sourceSql : String
268288 let isReadOnly : Bool
0 commit comments