OdbcService class

High-level ODBC service that provides simplified API for database operations.

This service wraps IOdbcRepository to provide a more convenient interface for common database operations. Implementation is split across capability delegates (OdbcQueryService, OdbcPoolService, OdbcAdminService, OdbcTransactionService); this class is a thin façade that forwards each call.

Usage

final service = OdbcService(repository);
await service.initialize();
final result = await service.executeQuery(
  'SELECT * FROM users',
  connectionId: connection.id,
);
Implemented types
Available extensions

Constructors

OdbcService(IOdbcRepository repository, {IDialectService? dialect})
Creates a new OdbcService instance.

Properties

events → Stream<OdbcEvent>
Broadcast stream of connection-lifecycle events emitted by the runtime (connection lost, worker recovered, pool resized, etc.).
no setteroverride
hashCode → int
The hash code for this object.
no setterinherited
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
supportsDialectApi → bool
True when the loaded native library exports the dialect capability FFIs.
no setteroverride

Methods

appendReturningClause({required String connectionString, required String sql, required DmlVerb verb, required List<String> columns}) → String?
Append a RETURNING/OUTPUT clause to sql.
override
asyncCancel(int requestId) → Future<Result<void>>
override
asyncFree(int requestId) → Future<Result<void>>
override
asyncGetResult(int requestId, {int? maxBufferBytes}) → Future<Result<QueryResult>>
override
asyncPoll(int requestId) → Future<Result<int>>
override
beginTransaction(String connectionId, {IsolationLevel? isolationLevel, SavepointDialect? savepointDialect, TransactionAccessMode? accessMode, Duration? lockTimeout}) → Future<Result<int>>
override
beginTransactionFor(Connection conn, {IsolationLevel? isolationLevel, SavepointDialect? savepointDialect, TransactionAccessMode? accessMode, Duration? lockTimeout}) → Future<Result<int>>

Available on ITransactionService, provided by the ITransactionServiceConnectionOverloads extension

beginTransaction overload that accepts a Connection.
buildUpsertSql({required String connectionString, required String table, required List<String> columns, required List<String> conflictColumns, List<String>? updateColumns}) → String?
Build an UPSERT statement for the dialect implied by connectionString.
override
bulkInsert(String connectionId, String table, List<String> columns, List<int> dataBuffer, int rowCount) → Future<Result<int>>
override
bulkInsertParallel(int poolId, String table, List<String> columns, List<int> dataBuffer, int rowCount, {int parallelism = 0}) → Future<Result<int>>
override
cancelStatement(String connectionId, int stmtId) → Future<Result<void>>
Requests cancellation of an in-flight prepared statement.
override
cancelStream(int streamId) → Future<Result<void>>
override
catalogColumns(String connectionId, String table) → Future<Result<QueryResult>>
override
catalogForeignKeys(String connectionId, String table) → Future<Result<QueryResult>>
override
catalogIndexes(String connectionId, String table) → Future<Result<QueryResult>>
override
catalogPrimaryKeys(String connectionId, String table) → Future<Result<QueryResult>>
override
catalogTables({required String connectionId, String catalog = '', String schema = ''}) → Future<Result<QueryResult>>
override
catalogTypeInfo(String connectionId) → Future<Result<QueryResult>>
override
clearAllStatements() → Future<Result<void>>
override
clearAuditEvents() → Future<Result<void>>
override
clearMetadataCache() → Future<Result<void>>
override
clearStatementCache() → Future<Result<void>>
override
closeEvents() → Future<void>
Closes the internal event bridge. Call from owners that explicitly dispose the service. Safe to call multiple times.
closeStatement(String connectionId, int stmtId) → Future<Result<void>>
override
commitTransaction(String connectionId, int txnId) → Future<Result<void>>
override
connect(String connectionString, {ConnectionOptions? options}) → Future<Result<Connection>>
override
createSavepoint(String connectionId, int txnId, String name) → Future<Result<void>>
override
detectDriver(String connectionString) → Future<String?>
override
disconnect(String connectionId) → Future<Result<void>>
override
dispose() → void
override
executeAsyncStart(String connectionId, String sql) → Future<Result<int>>
override
executePreparedNamed(String connectionId, int stmtId, Map<String, Object?> namedParams, StatementOptions? options) → Future<Result<QueryResult>>
override
executePreparedParamValues(String connectionId, int stmtId, List<ParamValue>? params, StatementOptions? options, {ResultEncoding? resultEncoding}) → Future<Result<QueryResult>>
override
executePreparedParamValuesFromObjects(String connectionId, int stmtId, List<Object?>? params, StatementOptions? options) → Future<Result<QueryResult>>

Available on IOdbcService, provided by the IOdbcServiceTypedParamExtensions extension

Prepared positional execute with automatic ParamValue conversion.
executeQuery(String sql, {String? connectionId}) → Future<Result<QueryResult>>
Convenience query after connect() using the active connection id.
override
executeQueryColumnarFromObjects(String connectionId, String sql, {List<Object?>? params}) → Future<Result<TypedColumnarResult>>

Available on IQueryService, provided by the IQueryServiceTypedParamExtensions extension

Columnar execute with automatic ParamValue conversion.
executeQueryColumnarParamValues(String connectionId, String sql, {List<ParamValue>? params}) → Future<Result<TypedColumnarResult>>
Column-major opt-in variant of executeQueryParamValues.
override
executeQueryColumnarParamValuesFor(Connection conn, String sql, {List<ParamValue>? params}) → Future<Result<TypedColumnarResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

executeQueryColumnarParamValues overload that accepts a Connection.
executeQueryDirectedParams(String connectionId, String sql, List<DirectedParam> params) → Future<Result<QueryResult>>
Like positional executeQueryParams for OUT / INOUT (DRT1 on the wire).
override
executeQueryFor(Connection conn, String sql) → Future<Result<QueryResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

executeQuery overload that accepts a Connection.
executeQueryMulti(String connectionId, String sql) → Future<Result<QueryResult>>
override
executeQueryMultiFull(String connectionId, String sql) → Future<Result<QueryResultMulti>>
override
executeQueryMultiParamValues(String connectionId, String sql, List<ParamValue> params) → Future<Result<QueryResultMulti>>
Executes a parameterised batch SQL and returns all multi-result items.
override
executeQueryMultiParamValuesFromObjects(String connectionId, String sql, List<Object?> params) → Future<Result<QueryResultMulti>>

Available on IOdbcService, provided by the IOdbcServiceTypedParamExtensions extension

Multi-result positional execute with automatic ParamValue conversion.
executeQueryNamed(String connectionId, String sql, Map<String, Object?> namedParams) → Future<Result<QueryResult>>
override
executeQueryNamedFor(Connection conn, String sql, Map<String, Object?> namedParams) → Future<Result<QueryResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

executeQueryNamed overload that accepts a Connection.
executeQueryParamValues(String connectionId, String sql, List<ParamValue> params, {ResultEncoding? resultEncoding}) → Future<Result<QueryResult>>
Typed positional parameters via ParamValue wire tags.
override
executeQueryParamValuesFor(Connection conn, String sql, List<ParamValue> params, {ResultEncoding? resultEncoding}) → Future<Result<QueryResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

executeQueryParamValues overload that accepts a Connection.
executeQueryParamValuesFromObjects(String connectionId, String sql, List<Object?> params, {ResultEncoding? resultEncoding}) → Future<Result<QueryResult>>

Available on IQueryService, provided by the IQueryServiceTypedParamExtensions extension

Positional execute with automatic ParamValue conversion.
getAuditEvents({int limit = 0}) → Future<Result<List<Map<String, Object?>>>>
override
getAuditStatus() → Future<Result<Map<String, Object?>>>
override
getConnectionDbmsInfo(String connectionId) → Future<Result<DbmsInfo>>
override
getDriverCapabilities(String connectionString) → Future<Result<Map<String, Object?>>>
override
getMetrics() → Future<Result<OdbcMetrics>>
override
getPreparedStatementsMetrics() → Future<Result<PreparedStatementMetrics>>
override
getSessionInitSql({required String connectionString, SessionOptions? options}) → List<String>?
Post-connect session init statements for the dialect.
override
getVersion() → Future<Result<Map<String, String>>>
override
getWorkerPoolStats() → Future<AsyncWorkerPoolStats?>
Returns Dart-side worker-pool statistics when the underlying connection runs in async mode (P95 latency, fallbacks to blocking, queue depth, etc.). Returns null in sync mode where no worker pool exists.
override
initialize() → Future<Result<void>>
override
isInitialized() → bool
override
metadataCacheEnable({required int maxEntries, required int ttlSeconds}) → Future<Result<void>>
override
metadataCacheStats() → Future<Result<Map<String, Object?>>>
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
poolClose(int poolId) → Future<Result<void>>
override
poolCreate(String connectionString, int maxSize, {PoolOptions? options, ConnectionOptions? connectionOptions}) → Future<Result<int>>
override
poolGetConnection(int poolId, {ConnectionOptions? options}) → Future<Result<Connection>>
override
poolGetState(int poolId) → Future<Result<PoolState>>
override
poolGetStateDetailed(int poolId) → Future<Result<Map<String, Object?>>>
override
poolHealthCheck(int poolId) → Future<Result<bool>>
override
poolReleaseConnection(String connectionId) → Future<Result<void>>
override
poolSetSize(int poolId, int newMaxSize) → Future<Result<void>>
override
prepare(String connectionId, String sql, {int timeoutMs = 0}) → Future<Result<int>>
override
prepareNamed(String connectionId, String sql, {int timeoutMs = 0}) → Future<Result<int>>
override
releaseSavepoint(String connectionId, int txnId, String name) → Future<Result<void>>
override
rollbackToSavepoint(String connectionId, int txnId, String name) → Future<Result<void>>
override
rollbackTransaction(String connectionId, int txnId) → Future<Result<void>>
override
runInTransaction<T extends Object>(String connectionId, Future<Result<T>> action(int txnId), {IsolationLevel? isolationLevel, SavepointDialect? savepointDialect, TransactionAccessMode? accessMode, Duration? lockTimeout}) → Future<Result<T>>
Runs action inside a transaction with automatic commit on success and rollback on any failure (returned Failure or thrown exception).
override
runInTransactionFor<T extends Object>(Connection conn, Future<Result<T>> action(int txnId), {IsolationLevel? isolationLevel, SavepointDialect? savepointDialect, TransactionAccessMode? accessMode, Duration? lockTimeout}) → Future<Result<T>>

Available on ITransactionService, provided by the ITransactionServiceConnectionOverloads extension

runInTransaction overload that accepts a Connection.
runInXaTransaction<T extends Object>(String connectionId, Xid xid, Future<Result<T>> action(XaTransactionHandle xa), {bool onePhase = false}) → Future<Result<T>>
Runs action inside a distributed XA / 2PC branch on connectionId.
override
setAuditEnabled({required bool enabled}) → Future<Result<void>>
override
setLogLevel(int level) → Future<Result<void>>
override
streamPollAsync(int streamId) → Future<Result<int>>
override
streamQuery(String connectionId, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResult>>
override
streamQueryColumnar(String connectionId, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<TypedColumnarResult>>
Batched streaming with columnar v2 wire when supported (odbc_stream_start_batched_options). See IQueryService.streamQueryColumnar for semantics and fallbacks.
override
streamQueryColumnarFor(Connection conn, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<TypedColumnarResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

streamQueryColumnar overload that accepts a Connection.
streamQueryFor(Connection conn, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

streamQuery overload that accepts a Connection.
streamQueryMulti(String connectionId, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResultMultiItem>>
Streams a multi-result batch one item at a time. New in v3.3.0 (M8).
override
streamQueryMultiBatches(String connectionId, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResultMultiBatchItem>>
Streams individual native fetch batches for a multi-result query.
override
streamQueryMultiBatchesFor(Connection conn, String sql, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResultMultiBatchItem>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

streamQueryMultiBatches overload that accepts a Connection.
streamQueryMultiBatchesParamValues(String connectionId, String sql, List<ParamValue> params, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResultMultiBatchItem>>
override
streamQueryMultiParamValues(String connectionId, String sql, List<ParamValue> params, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResultMultiItem>>
override
streamQueryNamed(String connectionId, String sql, Map<String, Object?> namedParams, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResult>>
Executes a named-parameter query and returns results as a stream.
override
streamQueryNamedFor(Connection conn, String sql, Map<String, Object?> namedParams, {int fetchSize = 1000, int? chunkSize}) → Stream<Result<QueryResult>>

Available on IQueryService, provided by the IQueryServiceConnectionOverloads extension

streamQueryNamed overload that accepts a Connection.
streamStartAsync(String connectionId, String sql, {int fetchSize = 1000, int? chunkSize}) → Future<Result<int>>
override
toString() → String
A string representation of this object.
inherited
validateConnectionString(String connectionString) → Future<Result<void>>
override
xaRecover(String connectionId) → Future<Result<List<Xid>>>
List prepared XIDs on the resource manager for crash recovery.
override
xaResumePrepared(String connectionId, Xid xid) → Future<Result<XaTransactionHandle>>
Resume a prepared XID as an XaTransactionHandle in prepared state.
override

Operators

operator ==(Object other) → bool
The equality operator.
inherited