amoeba opened a new issue, #3223:
URL: https://github.com/apache/arrow-adbc/issues/3223
### What feature or improvement would you like to see?
While the best ADBC user experience for most users is to use vendor-specific
packages (i.e., `adbc_driver_sqlite`), with the recent ADBC Manifests standards
work, it seems like more and more users might use the Driver Manager packages
in their language of choice. This presents an immediate problem of connecting
the Driver Manager to a loadable driver.
Prior to the Manifests work, my understanding was that we drivers would rely
on OS-specific shared library loading mechanisms like `LD_LIBRARY_PATH`. Now
with Manifests, Driver Managers should look through the Environment, User, and
System config levels (in that order) first.
Despite such convenient ways of providing drivers, Python (and I expect
other Driver Manager impls) fail pretty cryptically,
```python
>>> import adbc_driver_manager
...
>>> adbc_driver_manager.AdbcDatabase(driver="sqlite")
Traceback (most recent call last):
File "<python-input-1>", line 1, in <module>
adbc_driver_manager.AdbcDatabase(driver="sqlite")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "adbc_driver_manager/_lib.pyx", line 569, in
adbc_driver_manager._lib.AdbcDatabase.__init__
File "adbc_driver_manager/_lib.pyx", line 261, in
adbc_driver_manager._lib.check_error
adbc_driver_manager.InternalError: INTERNAL: [Driver Manager] dlopen()
failed: dlopen(sqlite, 0x0006): tried: 'sqlite' (no such file),
'/System/Volumes/Preboot/Cryptexes/OSsqlite' (no such file),
'/opt/homebrew/lib/sqlite' (no such file),
'/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/sqlite' (no such file),
'/usr/lib/sqlite' (no such file, not in dyld cache), 'sqlite' (no such file)
dlopen() failed: dlopen(libsqlite.dylib, 0x0006): tried: 'libsqlite.dylib'
(no such file), '/System/Volumes/Preboot/Cryptexes/OSlibsqlite.dylib' (no such
file), '/opt/homebrew/lib/libsqlite.dylib' (no such file),
'/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/libsqlite.dylib' (no
such file), '/usr/lib/libsqlite.dylib' (no such file, not in dyld cache),
'libsqlite.dylib' (no such file)
```
Notably, the Manifest paths are not shown so it's not clear if any were
searched and, if so, whether any candidate drivers were rejected due to errors
like an invalid manifest, mismatch of platform, etc.
Could a richer error report be bubble backed up to the user? Something like,
```
Failed to load driver "sqlite".
Strategy: Search for manifest (no extension)
Checked:
? Environment: ADBC_CONFIG_PATH not set, skipped.
x User: Could not find driver manifest
x System: Could not find driver manifest
x OS: Call to dlopen failed...
```
Aside: The reason I'm writing this issue is because I'm currently trying to
test the new manifest support in the driver manager and I'm going to have to
resort to debugging a C++ test to figure out if the issue is mine or if there's
a bug.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]