executeQueryColumnar abstract method

Future<Result<TypedColumnarResult>> executeQueryColumnar(
  1. String connectionId,
  2. String sql, {
  3. List? params,
})

Column-major opt-in variant of executeQueryParams.

Same FFI path as the row-major call (with ResultEncoding.columnar requested), but the returned TypedColumnarResult exposes typed primitive arrays per column (Int32List, Int64List, Float64List) so numeric pipelines avoid dynamic boxing. Strings, bytes and dates remain in List<T?>.

Behaviour vs executeQueryParams:

  • Same validation, same error mapping.
  • Conversion overhead: one extra pass over the result; the win comes from downstream reads in tight loops.

Example:

final r = await service.executeQueryColumnar(
  connectionId,
  'SELECT id, total_cents FROM orders WHERE region = ?',
  params: ['SA'],
);
r.fold(
  (typed) {
    final ids = typed.column('id') as TypedColumnInt32;
    final totals = typed.column('total_cents') as TypedColumnInt64;
    for (var i = 0; i < typed.rowCount; i++) {
      process(ids.values[i], totals.values[i]);
    }
  },
  (err) => log.error(err.message),
);

Implementation

Future<Result<TypedColumnarResult>> executeQueryColumnar(
  String connectionId,
  String sql, {
  List<dynamic>? params,
});