loadOdbcLibrary function

DynamicLibrary loadOdbcLibrary()

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',
    );
  }
}