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 Dart method under db.task:

final rows = await db.task.selectAll().asList();

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

Parameters

Named parameters become generated params objects.

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

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.

Dart SELECT methods also expose watch() for reactive reads:

final subscription = db.task.selectAll().watch().listen((rows) {
  setState(() => tasks = rows);
});