loadOdbcLibrary function
Returns the loaded DynamicLibrary instance.
Implementation
DynamicLibrary loadOdbcLibrary() {
final name = _libraryName();
final cwd = Directory.current.path;
final sep = Platform.pathSeparator;
// 1. CWD-relative (e.g. when running from project root)
final fromCwd = _tryLoadFromRoot(cwd, name, sep);
if (fromCwd != null) return fromCwd;
// 2. Package root-relative (e.g. when dart test runs from test/subdir)
final root = _findPackageRoot();
if (root != null) {
final fromRoot = _tryLoadFromRoot(root, name, sep);
if (fromRoot != null) return fromRoot;
}
// 3. Native Assets (production) - package:odbc_fast/
try {
return DynamicLibrary.open('package:odbc_fast/$name');
} on Object catch (_) {
// Native Assets not available, continue to next option
}
// 4. Sistema - PATH/LD_LIBRARY_PATH
try {
return DynamicLibrary.open(name);
} catch (e) {
throw StateError(
'ODBC engine library not found.\n\n'
'Options:\n'
'1. Automatic download: Run "dart pub get" again\n'
' (Binary will be downloaded from GitHub Releases)\n\n'
'2. For development: Build Rust library first\n'
' cd native/odbc_engine && cargo build --release\n\n'
'3. Manual download: Get binary from GitHub Releases\n'
' https://github.com/cesar-carlos/dart_odbc_fast/releases\n\n'
'Error: $e',
);
}
}