colinmarc opened a new issue, #1226:
URL: https://github.com/apache/datafusion-python/issues/1226
I'm working on a setup where we use a python `CatalogProvider` with
`register_catalog_provider`:
```python
class MyCatalog:
...
ctx.register_catalog_provider('datafusion', MyCatalog())
ctx.sql(...)
```
This results in a call stack that goes python -> rust -> python and back. As
a result, if an error is raised by `MyCatalog`, it gets badly mangled before
being reraised (for example by `ctx.sql`):
```
DataFusion error: Execution("PyErr { type: <class
'internal.CatalogClientError'>, value: CatalogClientError('Table
\".nonexistant_table\" not found...')"
```
There's no way to recover anything useful from this exception without
string-parsing.
To fix this, we'd probably need to add `DataFusionError::Ffi(Box<dyn
Error>)` upstream, then construct it here:
https://github.com/apache/datafusion-python/blob/f0bbad7543717c5f08ba2acb92d42c9d30fd2355/src/errors.rs#L96
Then, we could check for it here, and, if it matches, potentially return the
original `PyErr` unchanged:
https://github.com/apache/datafusion-python/blob/f0bbad7543717c5f08ba2acb92d42c9d30fd2355/src/errors.rs
I haven't tested this approach, but if it sounds reasonable I could give it
a shot.
--
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]