@@ -105,9 +105,7 @@ public struct SwiftLanguage: Language {
105105
106106 for (namespace, queries) in queries {
107107 if let namespace {
108- queriesProtocol ( name: namespace, queries: queries)
109- queriesNoop ( name: namespace, queries: queries)
110- queriesImpl ( name: namespace, queries: queries)
108+ self . queries ( name: namespace, queries: queries)
111109 }
112110 }
113111
@@ -208,11 +206,11 @@ public struct SwiftLanguage: Language {
208206
209207 for (namespace, queries) in queries {
210208 if let namespace {
211- writer. write ( line: " var " , namespace. lowercaseFirst, " : " , namespace, " Impl " )
209+ writer. write ( line: " var " , namespace. lowercaseFirst, " : " , namespace, " " )
212210
213211 // Initialize queries object
214212 writer. braces {
215- writer. write ( line: namespace, " Impl " , " (connection: connection) " )
213+ writer. write ( line: namespace, " .live (connection: connection, adapters: adapters )" )
216214 }
217215 } else {
218216 // Generate queries with `nil` namespace which would make it global.
@@ -226,49 +224,64 @@ public struct SwiftLanguage: Language {
226224 }
227225 }
228226
229- private func queriesProtocol( name: String , queries: [ GeneratedQuery ] ) {
230- writer. write ( line: " protocol " , name, " : ConnectionWrapper { " )
231-
227+ private func queries( name: String , queries: [ GeneratedQuery ] ) {
228+ writer. write ( line: " struct " , name, " { " )
232229 writer. indent ( )
233230
234231 for query in queries {
235- let associatedType = query. name. capitalizedFirst
236- writer. write ( line: " associatedtype _ " , associatedType, " : " , query. typealiasName)
237- writer. write ( line: " var " , query. variableName, " : _ " , associatedType, " { get } " )
232+ writer. write ( line: " var " , query. variableName, " : any " , query. typealiasName)
238233 }
239234
235+ writer. blankLine ( )
236+
237+ queriesNoop ( name: name, queries: queries)
238+ queriesLive ( name: name, queries: queries)
239+
240240 writer. unindent ( )
241241 writer. write ( line: " } " )
242242 writer. blankLine ( )
243243 }
244244
245- private func queriesNoop ( name: String , queries: [ GeneratedQuery ] ) {
246- writer. write ( line: " struct " , name , " Noop: " , name , " { " )
245+ private func queriesLive ( name: String , queries: [ GeneratedQuery ] ) {
246+ writer. write ( line: " static func live(connection: Connection, adapters: DB.Adapters) -> {" )
247247 writer. indent ( )
248248
249- writer. write ( line: " let connection: any Connection = NoopConnection() " )
249+ writer. write ( line: " return " , name, " ( " )
250+ writer. indent ( )
250251
251- for query in queries {
252- writer. write ( line: " let " )
253- writer . write ( query . variableName )
254- writer . write ( " : AnyQuery< " )
255- writer . write ( query . inputName )
256- writer . write ( " , " )
257- writer. write ( query . outputName )
258- writer . write ( " > " )
252+ for (position , query) in queries. positional ( ) {
253+ writer. write ( line: query . variableName , " : " )
254+
255+ expression ( for : query )
256+
257+ if !position . isLast {
258+ writer. write ( " , " )
259+ }
259260 }
260261
262+ writer. unindent ( )
263+ writer. write ( line: " ) " )
264+
265+ writer. unindent ( )
266+ writer. write ( line: " } " )
261267 writer. blankLine ( )
262- writer. write ( line: " init( " )
268+ }
269+
270+ private func queriesNoop( name: String , queries: [ GeneratedQuery ] ) {
271+ writer. write ( line: " static var noop: " , name, " { " )
272+ writer. indent ( )
273+
274+ writer. write ( line: name, " ( " )
263275 writer. indent ( )
276+
264277 for (position, query) in queries. positional ( ) {
265- writer. write ( line: query. variableName, " : any " , query . typealiasName )
278+ writer. write ( line: query. variableName, " : " )
266279
267280 switch query. output {
268281 case . model:
269282 // We might be able to initialize one in the future with all default values
270283 // but it seems hacky so just fail
271- writer. write ( " = Queries.Fail()" )
284+ writer. write ( " Queries.Fail() " )
272285 case . builtin( let name) :
273286 let defaultValue = switch name {
274287 case " Double " : " 0.0 "
@@ -277,60 +290,26 @@ public struct SwiftLanguage: Language {
277290 case " Data " : " Data() "
278291 default : " SQLAny.int(0) "
279292 }
280- writer. write ( " = Queries.Just(" , defaultValue, " ) " )
293+ writer. write ( " Queries.Just( " , defaultValue, " ) " )
281294 default :
282- writer. write ( " = Queries.Just()" )
295+ writer. write ( " Queries.Just() " )
283296 }
284297
285298 if !position. isLast {
286299 writer. write ( " , " )
287300 }
288301 }
289- writer. unindent ( )
290- writer. write ( line: " ) { " )
291- writer. indent ( )
292-
293- for query in queries {
294- writer. write ( line: " self. " , query. variableName, " = " , query. variableName, " .eraseToAnyQuery() " )
295- }
296302
297303 writer. unindent ( )
298- writer. write ( line: " } " )
299-
300- writer. unindent ( )
301- writer. write ( line: " } " )
302- writer. blankLine ( )
303- }
304-
305- private func queriesImpl( name: String , queries: [ GeneratedQuery ] ) {
306- writer. write ( line: " struct " , name, " Impl: " , name, " { " )
307- writer. indent ( )
308-
309- writer. write ( line: " let connection: any Connection " )
310- writer. write ( line: " let adapters: " , options. databaseName, " Adapters " )
311- writer. blankLine ( )
312-
313- for (position, query) in queries. positional ( ) {
314- writer. write ( line: " var " , query. variableName, " : " , query. typeName, " { " )
315-
316- writer. indented {
317- expression ( for: query)
318- }
319-
320- writer. write ( line: " } " )
321-
322- if !position. isLast {
323- writer. newline ( )
324- }
325- }
304+ writer. write ( line: " ) " )
326305
327306 writer. unindent ( )
328307 writer. write ( line: " } " )
329308 writer. blankLine ( )
330309 }
331310
332311 private func expression( for query: GeneratedQuery ) {
333- writer. write ( line : query. typeName)
312+ writer. write ( query. typeName)
334313 writer. write ( " ( " )
335314
336315 writer. indented {
0 commit comments