loadOdbcLibrary function
Loads the ODBC engine library from the default location.
Uses a priority-based loading strategy:
- Native Assets (automatic download from GitHub Releases)
- Development local - native/target/release/ (workspace) or native/odbc_engine/target/release/ (local)
- System library paths - PATH/LD_LIBRARY_PATH
Returns the loaded DynamicLibrary instance.
Implementation
DynamicLibrary loadOdbcLibrary() {
final name = _libraryName();
// 1. Native Assets (production) - baixado automaticamente da GitHub Release
// O hook/build.dart baixa e registra o asset, que é carregado aqui
try {
return DynamicLibrary.open('package:odbc_fast/$name');
} on Object catch (_) {
// Native Assets não disponível, continua para próxima opção
}
// 2. Desenvolvimento local - native/target/release/ (workspace target)
final cwd = Directory.current.path;
final devPathWorkspace = '$cwd${Platform.pathSeparator}native'
'${Platform.pathSeparator}target${Platform.pathSeparator}release'
'${Platform.pathSeparator}$name';
if (File(devPathWorkspace).existsSync()) {
return DynamicLibrary.open(devPathWorkspace);
}
// 2b. Fallback: native/odbc_engine/target/release/ (local target)
final devPathLocal = '$cwd${Platform.pathSeparator}native'
'${Platform.pathSeparator}odbc_engine${Platform.pathSeparator}target'
'${Platform.pathSeparator}release${Platform.pathSeparator}$name';
if (File(devPathLocal).existsSync()) {
return DynamicLibrary.open(devPathLocal);
}
// 3. 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',
);
}
}