@@ -73,7 +73,7 @@ public struct SwiftLanguage: Language {
7373 migrations: [ String ] ,
7474 tables: [ GeneratedModel ] ,
7575 queries: [ ( String ? , [ GeneratedQuery ] ) ] ,
76- adapters: [ String ]
76+ adapters: [ AdapterReference ]
7777 ) throws -> String {
7878 // Note: For now just going to ignore the `adapters`
7979 // Kotlin will need that info which is why it exists.
@@ -130,7 +130,7 @@ public struct SwiftLanguage: Language {
130130 tables: [ GeneratedModel ] ,
131131 queries: [ GeneratedQuery ] ,
132132 addConnection: Bool ,
133- adapters: [ String ]
133+ adapters: [ AdapterReference ]
134134 ) -> [ String ] {
135135 var decls : [ String ] = [ ]
136136
@@ -170,7 +170,7 @@ public struct SwiftLanguage: Language {
170170 private func dbStruct(
171171 queries: [ ( String ? , [ GeneratedQuery ] ) ] ,
172172 migrations: [ String ] ,
173- adapters: [ String ]
173+ adapters: [ AdapterReference ]
174174 ) {
175175 writer. write ( line: " struct " , options. databaseName, " : Database " )
176176
@@ -214,7 +214,7 @@ public struct SwiftLanguage: Language {
214214 }
215215 }
216216
217- private func adapters( adapters: [ String ] ) {
217+ private func adapters( adapters: [ AdapterReference ] ) {
218218 writer. write ( line: " let adapters: Adapters " )
219219 writer. newline ( )
220220
@@ -224,7 +224,26 @@ public struct SwiftLanguage: Language {
224224 writer. write ( line: " struct Adapters: Otter.Adapters " )
225225 writer. braces {
226226 for adapter in adapters {
227- writer. write ( line: " let " , adapter, " : AnyDatabaseValueAdapter " )
227+ writer. write ( line: " let " , adapter. name, " : AnyDatabaseValueAdapter< " , adapter. type, " > " )
228+ }
229+
230+ writer. blankLine ( )
231+ writer. write ( line: " init( " )
232+ writer. indented {
233+ for (position, adapter) in adapters. positional ( ) {
234+ writer. write ( line: adapter. name, " : any DatabaseValueAdapter< " , adapter. type, " > " )
235+
236+ if !position. isLast {
237+ writer. write ( " , " )
238+ }
239+ }
240+ }
241+ writer. write ( line: " ) " )
242+
243+ writer. braces {
244+ for adapter in adapters {
245+ writer. write ( line: " self. " , adapter. name, " = AnyDatabaseValueAdapter< " , adapter. type, " >( " , adapter. name, " ) " )
246+ }
228247 }
229248 }
230249 }
@@ -274,36 +293,43 @@ public struct SwiftLanguage: Language {
274293 }
275294
276295 private func queriesNoop( name: String , queries: [ GeneratedQuery ] ) {
277- writer. write ( line: " static var noop: " , name, " { " )
296+ writer. write ( line: " static func noop( " )
297+ writer. indented {
298+ for (position, query) in queries. positional ( ) {
299+ writer. write ( line: query. variableName, " : any " , query. typealiasName, " = " )
300+
301+ switch query. output {
302+ case . model:
303+ // We might be able to initialize one in the future with all default values
304+ // but it seems hacky so just fail
305+ writer. write ( " Queries.Fail() " )
306+ case . builtin( let name) :
307+ let defaultValue = switch name {
308+ case " Double " : " 0.0 "
309+ case " Int " : " 0 "
310+ case " String " : " \" \" "
311+ case " Data " : " Data() "
312+ default : " SQLAny.int(0) "
313+ }
314+ writer. write ( " Queries.Just( " , defaultValue, " ) " )
315+ default :
316+ writer. write ( " Queries.Just() " )
317+ }
318+
319+ if !position. isLast {
320+ writer. write ( " , " )
321+ }
322+ }
323+ }
324+ writer. write ( line: " ) " )
325+
278326 writer. indent ( )
279327
280328 writer. write ( line: name, " ( " )
281329 writer. indent ( )
282330
283- for (position, query) in queries. positional ( ) {
284- writer. write ( line: query. variableName, " : " )
285-
286- switch query. output {
287- case . model:
288- // We might be able to initialize one in the future with all default values
289- // but it seems hacky so just fail
290- writer. write ( " Queries.Fail() " )
291- case . builtin( let name) :
292- let defaultValue = switch name {
293- case " Double " : " 0.0 "
294- case " Int " : " 0 "
295- case " String " : " \" \" "
296- case " Data " : " Data() "
297- default : " SQLAny.int(0) "
298- }
299- writer. write ( " Queries.Just( " , defaultValue, " ) " )
300- default :
301- writer. write ( " Queries.Just() " )
302- }
303-
304- if !position. isLast {
305- writer. write ( " , " )
306- }
331+ for query in queries {
332+ writer. write ( line: " self. " , query. variableName, " = " , query. variableName)
307333 }
308334
309335 writer. unindent ( )
@@ -542,10 +568,10 @@ public struct SwiftLanguage: Language {
542568 writer. write ( " ) " )
543569 index += model. fields. count
544570 case let . encoded( storage, _, adapter) :
545- writer. write ( " row.value(at: start + " , index. description, " , using: adapters. " , adapter, " , storage: " , typeName ( for: storage) , " .self) " )
571+ writer. write ( " row.value(at: start + " , index. description, " , using: adapters. " , adapter. name , " , storage: " , typeName ( for: storage) , " .self) " )
546572 index += 1
547573 case let . optional( . encoded( storage, _, adapter) ) :
548- writer. write ( " row.optionalValue(at: start + " , index. description, " , using: adapters. " , adapter, " , storage: " , typeName ( for: storage) , " .self) " )
574+ writer. write ( " row.optionalValue(at: start + " , index. description, " , using: adapters. " , adapter. name , " , storage: " , typeName ( for: storage) , " .self) " )
549575 index += 1
550576 default :
551577 fatalError ( " Invalid field type \( field. typeName) \( field. type) " )
@@ -708,7 +734,7 @@ public struct SwiftLanguage: Language {
708734 writer. write ( name, " , to: " , index. description)
709735
710736 if let adapter {
711- writer. write ( " , using: adapters. " , adapter. name, " , as: " , adapter. storage, " .self " )
737+ writer. write ( " , using: adapters. " , adapter. adapter . name, " , as: " , adapter. storage, " .self " )
712738 }
713739
714740 writer. write ( " ) " )
0 commit comments