openDuckDB method
Opens the DynamicLibrary from which duckdb.dart
is going to
DynamicLibrary.lookup duckdb's methods that will be used. This method is
meant to be called by duckdb.dart
only.
Implementation
DynamicLibrary openDuckDB() {
/// If the process already provides has the symbol, we can use it directly.
/// This is useful when we have loaded the library and are now on an isolate.
final process = DynamicLibrary.process();
if (process.providesSymbol('duckdb_open')) {
return process;
}
if (isTestEnvironment()) {
final prefix = '${Directory.current.path}/../duckdb';
if (_overriddenPlatforms[OperatingSystem.windows] == null) {
_overriddenPlatforms[OperatingSystem.windows] =
() => DynamicLibrary.open(
'$prefix/windows/Libraries/release/duckdb.dll',
);
}
if (_overriddenPlatforms[OperatingSystem.macOS] == null) {
_overriddenPlatforms[OperatingSystem.macOS] = () => DynamicLibrary.open(
'$prefix/macos/Libraries/release/libduckdb.dylib',
);
}
if (_overriddenPlatforms[OperatingSystem.linux] == null) {
_overriddenPlatforms[OperatingSystem.linux] = () => DynamicLibrary.open(
'$prefix/linux/Libraries/release/libduckdb.so',
);
}
}
try {
final forAll = _overriddenForAll;
if (forAll != null) {
return forAll();
}
final forPlatform = _overriddenPlatforms[os];
if (forPlatform != null) {
return forPlatform();
}
} catch (error) {
// ignore
}
return _defaultOpen();
}