Skip to content

Commit a743119

Browse files
committed
WIP - No queries protocol
1 parent b87b2fb commit a743119

1 file changed

Lines changed: 42 additions & 63 deletions

File tree

Sources/Compiler/Gen/SwiftLanguage.swift

Lines changed: 42 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)