query<R> method

Future<List<R>> query<R>(
  1. SqlQuery<R> query, {
  2. ExecutionOptions options = const ExecutionOptions(),
  3. Iterable<String> changedTables = const [],
})

Executes and decodes one statement using its actual result labels.

A decode failure poisons the current transaction even if caught. Outside a transaction a write may already be committed; decoding is never retried.

Implementation

Future<List<R>> query<R>(
  SqlQuery<R> query, {
  ExecutionOptions options = const ExecutionOptions(),
  Iterable<String> changedTables = const [],
}) async {
  final result = await execute(
    query.sql.compile(capabilities),
    options: options,
    changedTables: changedTables,
  );
  return _guardSqlResult(this, () {
    final decode = query.result.bind(result.columns);
    return [for (final row in result.rows) decode(row)];
  });
}