executeQueryColumnar abstract method
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
@override
Future<Result<TypedColumnarResult>> executeQueryColumnar(
String connectionId,
String sql, {
List<dynamic>? params,
});