Query Data

SELECT files live under queries/. Subdirectories become generated namespaces and file names become generated method names.

queries/task/selectAll.sql
queries/task/selectById.sql

Basic SELECT

SELECT id, title, completed, created_at
FROM task
ORDER BY created_at DESC;

queries/task/selectAll.sql generates a Swift method under db.task:

let rows = try await db.task.selectAll().list()

for row in rows {
    print(row.title)
}

Parameters

Named parameters become generated params objects.

SELECT id, title, completed, created_at
FROM task
WHERE id = :id;
let task = try await db.task
    .selectById(TaskSelectByIdParams(id: 42))
    .oneOrNull()

Result Cardinality

Use the runner method that matches the expected result shape:

  • asList() for zero or more rows.
  • asOne() when exactly one row must exist.
  • asOneOrNull() when zero or one row is valid.

Swift SELECT methods expose AsyncThrowingStream APIs for reactive reads:

for try await rows in db.task.selectAll().stream() {
    tasks = rows
}