NativeOdbcConnection class
Native ODBC connection implementation using FFI bindings.
Provides direct access to the Rust-based ODBC engine through FFI. This is the low-level implementation that handles all native ODBC operations including connections, queries, transactions, prepared statements, connection pooling, and streaming.
Example:
final native = NativeOdbcConnection();
native.initialize();
final connId = native.connect('DSN=MyDatabase');
- Implemented types
Constructors
- NativeOdbcConnection()
- Creates a new NativeOdbcConnection instance.
- NativeOdbcConnection.testing(OdbcNative native)
-
Creates an instance backed by injected
native(unit tests only).
Properties
- auditLogger → OdbcAuditLogger
-
Typed wrapper for native audit APIs.
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- isInitialized → bool
-
Whether the ODBC environment has been initialized.
no setterinherited
- native → OdbcNative
-
Internal — exposes the underlying bindings.OdbcNative to
helpers like XaTransactionHandle that need to drive the FFI
directly. Not part of the public API; callers should use the
high-level methods on this class.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- supportsAsyncExecuteApi → bool
-
Whether the loaded native library supports async execute FFI endpoints.
no setterinherited
- supportsAsyncExecuteParamsApi → bool
-
Whether async execute also supports serialized parameter buffers.
no setterinherited
- supportsAsyncStreamApi → bool
-
Whether the loaded native library supports async stream FFI endpoints.
no setterinherited
- supportsAuditApi → bool
-
Whether the loaded native library supports audit FFI endpoints.
no setterinherited
- supportsConnectionDbmsInfoApi → bool
-
Whether the loaded native library exposes live DBMS introspection
(v2.1
odbc_get_connection_dbms_info).no setterinherited - supportsDriverCapabilitiesApi → bool
-
Whether the loaded native library supports driver capabilities FFI API.
no setterinherited
- supportsExecuteQueryMultiParams → bool
-
Whether the loaded native library exports
odbc_exec_query_multi_params(added in v3.2.0).no setterinherited - supportsMetadataCacheApi → bool
-
Whether the loaded native library supports metadata cache FFI endpoints.
no setterinherited
- supportsResultEncodingOptions → bool
-
Whether parameterized query execution can request columnar result
encodings. When false, callers fall back to row-major v1.
no setterinherited
- supportsStreamQueryMulti → bool
-
Whether the loaded native library exports the M8 streaming
multi-result FFIs (added in v3.3.0).
no setterinherited
- supportsStructuredErrorForConnection → bool
-
Whether the native library supports per-connection structured error API.
no setterinherited
- supportsTransactionAccessMode → bool
-
True when the loaded native library supports
odbc_transaction_begin_v2(Sprint 4.1, theaccessModeparameter ofbeginTransaction). When false,accessModeis silently ignored and every transaction isREAD WRITE.no setterinherited - supportsTransactionLockTimeout → bool
-
True when the loaded native library supports
odbc_transaction_begin_v3(Sprint 4.2, thelockTimeoutMsparameter ofbeginTransaction). When false,lockTimeoutMsis silently ignored and every transaction uses the engine default lock timeout.no setterinherited - supportsXa → bool
-
True when the loaded native library supports the XA / 2PC FFI
family (Sprint 4.3). Callers should gate on this before invoking
xaStart/xaRecover/xaResumePrepared; older binaries throwUnsupportedError.no setterinherited
Methods
-
asyncCancel(
int requestId) → bool -
Best-effort cancellation for an async request.
inherited
-
asyncFree(
int requestId) → bool -
Frees async request resources.
inherited
-
asyncGetResult(
int requestId) → Uint8List? -
Retrieves binary result for a completed async request.
inherited
-
asyncPoll(
int requestId) → int? -
Polls async request status:
0pending,1ready,-1error,-2cancelled.inherited -
beginTransaction(
int connectionId, int isolationLevel, {int savepointDialect = 0, int accessMode = 0, int lockTimeoutMs = 0}) → int -
Begins a new transaction with the specified isolation level.
inherited
-
beginTransactionHandle(
int connectionId, int isolationLevel, {int savepointDialect = 0, int accessMode = 0, int lockTimeoutMs = 0}) → TransactionHandle? -
Begins a new transaction and returns a TransactionHandle wrapper.
inherited
-
bulkInsertArray(
int connectionId, String table, List< String> columns, Uint8List dataBuffer, int rowCount) → int -
Performs a bulk insert operation.
inherited
-
bulkInsertParallel(
int poolId, String table, List< String> columns, Uint8List dataBuffer, int parallelism) → int -
Performs parallel bulk insert through
poolId.inherited -
cancelStatement(
int stmtId) → bool -
Requests cancellation of a prepared statement execution.
inherited
-
catalogColumns(
int connectionId, String table) → Uint8List? -
inherited
-
catalogForeignKeys(
int connectionId, String table) → Uint8List? -
inherited
-
catalogIndexes(
int connectionId, String table) → Uint8List? -
inherited
-
catalogPrimaryKeys(
int connectionId, String table) → Uint8List? -
inherited
-
catalogQuery(
int connectionId) → CatalogQuery -
Creates a CatalogQuery wrapper for database catalog queries.
inherited
-
catalogTables(
int connectionId, {String catalog = '', String schema = ''}) → Uint8List? -
inherited
-
catalogTypeInfo(
int connectionId) → Uint8List? -
inherited
-
clearAllStatements(
) → int -
inherited
-
clearAuditEvents(
) → bool -
Clears in-memory native audit events.
inherited
-
clearMetadataCache(
) → bool -
Clears metadata cache entries.
inherited
-
clearStatementCache(
) → bool -
Clears the prepared statement cache.
inherited
-
closeStatement(
int stmtId) → bool -
inherited
-
commitTransaction(
int txnId) → bool -
inherited
-
connect(
String connectionString) → int -
Establishes a new database connection.
inherited
-
connectWithTimeout(
String connectionString, int timeoutMs) → int -
Establishes a connection with a login timeout.
inherited
-
createConnectionPool(
String connectionString, int maxSize, {PoolOptions? options}) → ConnectionPool? -
Creates a new connection pool and returns a ConnectionPool wrapper.
inherited
-
createSavepoint(
int txnId, String name) → bool -
inherited
-
detectDriver(
String connectionString) → String? -
Detects the database driver from a connection string.
inherited
-
disconnect(
int connectionId) → bool -
Closes and disconnects a connection.
inherited
-
dispose(
) → void -
Disposes of native resources.
inherited
-
executeAsyncStart(
int connectionId, String sql) → int? -
Starts non-blocking query execution and returns async request ID.
inherited
-
executeAsyncStartParams(
int connectionId, String sql, Uint8List? serializedParams, {ResultEncoding resultEncoding = ResultEncoding.rowMajor}) → int? -
Starts non-blocking parameterized query execution.
inherited
-
executePrepared(
int stmtId, List< ParamValue> ? params, int timeoutOverrideMs, int fetchSize, {int? maxBufferBytes}) → Uint8List? -
inherited
-
executePreparedRaw(
int stmtId, Uint8List? serializedParams, int timeoutOverrideMs, int fetchSize, {int? maxBufferBytes}) → Uint8List? -
Executes a prepared statement with params already serialized (bytes).
inherited
-
executeQueryMulti(
int connectionId, String sql, {int? maxBufferBytes}) → Uint8List? -
Executes a SQL query that returns multiple result sets.
inherited
-
executeQueryMultiParams(
int connectionId, String sql, Uint8List? paramsBuffer, {int? maxBufferBytes}) → Uint8List? -
Executes a parameterised batch SQL that may return multiple result sets.
inherited
-
executeQueryParams(
int connectionId, String sql, List< ParamValue> params, {int? maxBufferBytes, ResultEncoding resultEncoding = ResultEncoding.rowMajor}) → Uint8List? -
Executes a SQL query with parameters.
inherited
-
executeQueryParamsRaw(
int connectionId, String sql, Uint8List? serializedParams, {int? maxBufferBytes, ResultEncoding resultEncoding = ResultEncoding.rowMajor}) → Uint8List? -
Executes a parameterized query with params already serialized (bytes).
inherited
-
getAuditEventsJson(
{int limit = 0}) → String? -
Gets audit events as JSON payload.
inherited
-
getAuditStatusJson(
) → String? -
Gets audit status as JSON payload.
inherited
-
getCacheMetrics(
) → PreparedStatementMetrics? -
inherited
-
getConnectionDbmsInfoJson(
int connectionId) → String? -
Returns the live DBMS introspection JSON for
connectionId, or null when the call fails or the API is unavailable. Use the high-levelOdbcDriverCapabilities.getDbmsInfoForConnectionto obtain a typedDbmsInfoinstead of raw JSON.inherited -
getDriverCapabilities(
String connectionString) → DriverCapabilities? -
Returns typed driver capabilities from
connectionString, or null when API is unavailable or invalid.inherited -
getDriverCapabilitiesJson(
String connectionString) → String? -
Returns driver capabilities payload as JSON, or null on failure.
inherited
-
getError(
) → String -
Gets the last error message from the native engine.
inherited
-
getMetadataCacheStatsJson(
) → String? -
Returns metadata cache stats JSON payload.
inherited
-
getMetrics(
) → OdbcMetrics? -
inherited
-
getStructuredError(
) → StructuredError? -
Gets structured error information including SQLSTATE and native code.
inherited
-
getStructuredErrorForConnection(
int connectionId) → StructuredError? -
Gets structured error for a specific connection (per-connection
isolation).
inherited
-
getVersion(
) → Map< String, String> ? -
Gets performance and operational metrics.
inherited
-
initialize(
) → bool -
Initializes the ODBC environment.
inherited
-
metadataCacheEnable(
{required int maxEntries, required int ttlSeconds}) → bool -
Enables metadata cache in native engine.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
poolClose(
int poolId) → bool -
inherited
-
poolCreate(
String connectionString, int maxSize, {PoolOptions? options}) → int -
Creates a new connection pool.
inherited
-
poolCreateWithOptions(
String connectionString, int maxSize, {String? optionsJson}) → int -
Creates a pool from a pre-encoded native options JSON payload.
inherited
-
poolGetConnection(
int poolId) → int -
inherited
-
poolGetState(
int poolId) → ({int idle, int size})? -
inherited
-
poolGetStateJson(
int poolId) → Map< String, dynamic> ? -
Returns pool state telemetry payload as JSON, or null on failure.
inherited
-
poolHealthCheck(
int poolId) → bool -
inherited
-
poolReleaseConnection(
int connectionId) → bool -
inherited
-
poolSetSize(
int poolId, int newMaxSize) → bool -
inherited
-
prepare(
int connectionId, String sql, {int timeoutMs = 0}) → int -
Prepares a SQL statement for execution.
inherited
-
prepareStatement(
int connectionId, String sql, {int timeoutMs = 0}) → PreparedStatement? -
Prepares a SQL statement and returns a PreparedStatement wrapper.
inherited
-
prepareStatementNamed(
int connectionId, String sql, {int timeoutMs = 0}) → PreparedStatement? -
Prepares a SQL statement with named parameters and returns a
PreparedStatementwrapper that supportsexecuteNamed.inherited -
releaseSavepoint(
int txnId, String name) → bool -
inherited
-
rollbackToSavepoint(
int txnId, String name) → bool -
inherited
-
rollbackTransaction(
int txnId) → bool -
inherited
-
setAuditEnabled(
{required bool enabled}) → bool -
Enables/disables native audit event collection.
inherited
-
setLogLevel(
int level) → void -
Sets native engine log verbosity (0=off, 5=trace).
inherited
-
streamAsync(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, Duration pollInterval = const Duration(milliseconds: 10), ResultEncoding resultEncoding = ResultEncoding.rowMajor, bool lazyStrings = false}) → Stream< ParsedRowBuffer> -
Poll-based async batched streaming via
odbc_stream_start_async.inherited -
streamCancel(
int streamId) → bool -
Requests cancellation for a low-level native stream.
inherited
-
streamClose(
int streamId) → bool -
Closes a low-level native stream.
inherited
-
streamFetch(
int streamId) → StreamFetchResult -
Fetches the next chunk for a low-level native stream.
inherited
-
streamMultiStartAsync(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, int resultEncodingWire = 0}) → int? -
Async variant of
streamMultiStartBatched. Combine withstreamPollAsyncfor non-blocking readiness.inherited -
streamMultiStartBatched(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, int resultEncodingWire = 0}) → int? -
Starts a streaming multi-result batch in batched mode and returns the
new stream id (or
nullon failure / unsupported native lib). UsestreamFetch/streamCancel/streamCloseto drive it. WhenresultEncodingWireis non-zero and the native library exportsodbc_stream_multi_start_batched_options, result-set frames use columnar v2 wire layout.inherited -
streamPollAsync(
int streamId) → int? -
Polls async stream status:
0pending,1ready,2done,-1error,-2cancelled.inherited -
streamQuery(
int connectionId, String sql, {int chunkSize = 1000}) → Stream< ParsedRowBuffer> -
Executes a SQL query and returns results as a batched stream.
inherited
-
streamQueryBatched(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, ResultEncoding resultEncoding = ResultEncoding.rowMajor, bool lazyStrings = false}) → Stream< ParsedRowBuffer> -
Executes a SQL query and returns results as a batched stream.
inherited
-
streamQueryBuffer(
int connectionId, String sql, {int chunkSize = 1000, bool lazyStrings = false}) → Stream< ParsedRowBuffer> -
Legacy buffer-mode streaming via
odbc_stream_start. Materialises the full result in native memory before yielding a single parsed chunk. PreferstreamQueryorstreamQueryBatchedfor large result sets.inherited -
streamQueryColumnarBatched(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, bool lazyStrings = false, ResultEncoding resultEncoding = ResultEncoding.columnar}) → Stream< TypedColumnarResult> -
Like
streamQueryBatchedbut decodes columnar v2 frames directly to TypedColumnarResult without a row-major intermediate.inherited -
streamStart(
int connectionId, String sql, {int chunkSize = 1000}) → int -
Starts a low-level streaming query and returns a native stream ID.
inherited
-
streamStartAsync(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, int resultEncodingWire = 0}) → int? -
Starts async stream and returns stream ID.
inherited
-
streamStartBatched(
int connectionId, String sql, {int fetchSize = 1000, int chunkSize = 64 * 1024, int resultEncodingWire = 0}) → int -
Starts a low-level batched streaming query and returns stream ID.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
-
validateConnectionString(
String connectionString) → String? -
Validates connection string format without opening a connection.
inherited
-
xaRecover(
int connectionId) → List< Xid> ? -
xa_recover: list every XID currently in the XaState.prepared state on the resource manager. Used after process restart to discover branches awaiting a Phase 2 decision.inherited -
xaResumePrepared(
int connectionId, Xid xid) → XaTransactionHandle? -
Resume a previously prepared
xid— rebuilds an XaTransactionHandle in the XaState.prepared state for crash- recovery scenarios. Returnsnullon failure.inherited -
xaStart(
int connectionId, Xid xid) → XaTransactionHandle? -
xa_start: open a new XA branch onconnectionIdwith the givenxid. Returns a live XaTransactionHandle in the XaState.active state on success,nullon failure (callgetStructuredErrorto inspect the cause).inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited