odbc_fast 1.1.2
odbc_fast: ^1.1.2 copied to clipboard
Enterprise-grade ODBC data platform for Dart with a Rust native engine, streaming queries, pooling, and structured diagnostics.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.1.2 - 2026-03-03 #
Added #
workflow_dispatchsupport in publish workflow for manual pub.dev publishing
1.1.0 - 2026-02-19 #
Added #
- Statement cancellation API exposed at high-level service/repository layers:
cancelStatement(connectionId, stmtId) UnsupportedFeatureErrorin Dart domain errors for explicit unsupported capability reporting
Changed #
- Statement cancellation contract standardized as explicit unsupported at runtime
(Option B path), with structured native error SQLSTATE
0A000 - Sync and async cancellation paths now aligned with equivalent behavior and consistent unsupported semantics
- Canonical docs aligned for cancellation status and workaround guidance:
README.md,doc/TROUBLESHOOTING.md,example/README.md
Fixed #
- Removed ambiguity between exposed cancellation entrypoints and current runtime capability by returning explicit unsupported contract instead of implicit behavior
1.0.3 - 2026-02-16 #
Added #
- New canonical type mapping documentation:
doc/TYPE_MAPPING.md - New implementation checklists:
doc/notes/TYPE_MAPPING_IMPLEMENTATION_CHECKLIST.mddoc/notes/STATEMENT_CANCELLATION_IMPLEMENTATION_CHECKLIST.mddoc/notes/NULL_HANDLING_RELIABILITY_PERFORMANCE_PLAN.md
- New/updated example coverage docs and demo files for advanced/service/telemetry scenarios
Changed #
- Root and docs indexes now reference canonical type-mapping documentation
- Master gaps plan now tracks open execution checklists for remaining gaps
Fixed #
- Documentation consistency across root README,
doc/README.md, and notes references
1.0.2 - 2026-02-15 #
1.0.0 - 2026-02-15 #
Added #
- Async API request timeout:
AsyncNativeOdbcConnection(requestTimeout: Duration?)— optional timeout per request; default 30s;Duration.zeroornulldisables - AsyncError new codes:
requestTimeout(worker did not respond in time),workerTerminated(disposed or crashed) - Parallel bulk insert (pool-based) end-to-end: Rust FFI
odbc_bulk_insert_parallelnow implemented and exposed in Dart sync/async service/repository stack - Bulk insert comparative benchmark: new ignored Rust E2E benchmark test
e2e_bulk_compare_benchmark_testforArrayBindingvsParallelBulkInsert
Changed #
- Async dispose: Pending requests now complete with
AsyncError(workerTerminated) instead of hanging whendispose()is called - Worker crash handling: When the worker isolate dies, pending requests complete with error instead of hanging
- BinaryProtocolParser: Truncated buffers now throw
FormatException('Buffer too small for payload')instead ofRangeError
Fixed #
- Array binding tail chunk panic: fixed
copy_from_slicelength mismatch when the final bulk-insert chunk is smaller than configured batch size
0.3.1 - 2026-01-29 #
Changed #
- Improved download experience: Native library download now includes retry logic with exponential backoff (up to 3 attempts)
- Better error messages: Download failures now show detailed troubleshooting steps and clearly explain what went wrong
- HTTP 404 handling: When GitHub release doesn't exist, provides clear instructions for production vs development scenarios
- Connection timeout: Added 30-second timeout to HTTP client to prevent hanging on slow connections
- Download feedback: Shows file size after successful download
- CI/pub.dev detection: Skip download in CI environments to avoid analysis timeout, with clear logging
Fixed #
- pub.dev analysis timeout: Hook now detects CI/pub.dev environment and skips external download, allowing pub.dev to analyze the package correctly
0.3.0 - 2026-01-29 #
Added #
- Configurable result buffer size:
ConnectionOptions.maxResultBufferBytes(optional). When set at connect time, caps the size of query result buffers for that connection; when null, the package default (16 MB) is used. Use for large result sets to avoid "Buffer too small" errors. ConstantdefaultMaxResultBufferBytesis exported for reference.
0.2.9 - 2026-01-29 #
Fixed #
- Async API "QueryError: No error": when executing queries with no parameters, the Dart FFI was passing
nullfor the params buffer toodbc_exec_query_params, which caused invalid arguments and led to failures reported as "No error". The native bindings now always pass a valid buffer (e.g.Uint8List(0)) instead ofnull, so both sync and async (worker) paths work correctly for parameterless queries.
0.2.8 - 2026-01-29 #
Added #
scripts/copy_odbc_dll.ps1: copiesodbc_engine.dllfrom package (pub cache) to project root and Flutter runner folders (Debug/Release) for consumers who need the DLL manually
Changed #
- Publish
hook/andscripts/in the package (removed from.pubignore): Native Assets hook runs for consumers so the DLL can be downloaded/cached automatically; scriptcopy_odbc_dll.ps1is available in the package - Minimum SDK constraint raised to
>=3.6.0(required by pub.dev when publishing packages with build hooks)
Fixed #
- Async API (worker isolate): empty result (DDL/DML, SELECT with no rows) is now returned as
Result.ok(QueryResult(columns: [], rows: [], rowCount: 0))instead ofResult.err(QueryError("No error", ...))(fixes "No error" when executing CREATE TABLE, INSERT, ALTER, etc.)
0.2.7 - 2026-01-29 #
Fixed #
- Native DLL cache now keyed by package version (
~/.cache/odbc_fast/<version>/) to avoid loading an older DLL when upgrading the package (fixes symbol lookup error 127 for new symbols e.g.odbc_savepoint_create)
0.2.6 - 2026-01-29 #
0.2.5 - 2026-01-29 #
Added #
- Database type detection in tests:
detectDatabaseType(),skipIfDatabase(),skipUnlessDatabase() - Test helpers for conditional execution by database (SQL Server, PostgreSQL, MySQL, Oracle)
test/helpers/README.mdwith usage and examples
Changed #
- Dart tests run sequentially (
--concurrency=1) to avoid resource contention (ServiceLocator, worker isolates) - Savepoint release test skipped on SQL Server (RELEASE SAVEPOINT not supported)
Fixed #
- Rust FFI E2E:
ffi_test_dsn()loads.envand checksENABLE_E2E_TESTS; invalid stream ID race in tests - Dart integration test timeouts when running in parallel
0.2.4 - 2026-01-27 #
0.2.3 - 2026-01-27 #
Changed #
- CI: run only unit tests that do not require real ODBC connection (domain, protocol, errors)
- CI: exclude stress, integration/e2e, and native-dependent tests from publish pipeline
0.2.1 - 2026-01-27 #
Fixed #
- Fixed Native Assets hook to read package version from correct pubspec.yaml
- Fixed test helper to properly handle empty environment variables
- Fixed GitHub Actions cache paths and key format
Changed #
- Improved CI workflow: now builds Rust library before running tests
- Split unit and integration tests in CI for better organization
- Enhanced GitHub Actions workflows with proper dependency installation
0.2.0 - 2026-01-27 #
Added #
- Savepoints (nested transaction markers)
- Automatic retry with exponential backoff for transient errors
- Connection timeouts (login/connection timeout configuration)
- Connection String Builder (fluent API)
- Backpressure control in streaming queries
Changed #
- Async API with worker isolate for non-blocking operations
- Comprehensive E2E Rust tests with coverage reporting
- Improved documentation and troubleshooting guides
Fixed #
- Various lint issues (very_good_analysis compliance)
- Code formatting and cleanup