lance-format/lance
Voir sur GitHubAdd `ReadFileError` and `DecodeColumnError` wrappers to provide better context for decoding errors
Open
#5 602 ouverte le 31 déc. 2025
good first issue
Métriques du dépôt
- Stars
- (6 582 stars)
- Métriques de merge PR
- (Merge moyen 6j 1h) (219 PRs mergées en 30 j)
Description
Currently, errors that happen when decoding a column are missing information about:
- What column that is
- What file we are reading
This context is available higher up in the call stack that the main error is generate. We can add additional context by adding wrapper errors.
This approach is described nicely in https://sabrinajewson.org/blog/errors.
Basically, want to do things like:
enum DecodeError {
NumberOutOfRange,
...
}
struct DecodeFieldError {
field_name: String,
field_id: i32,
offset: u64,
source: DecodeError,
}
fn decode(field: Field, data: Bytes) -> Result<_, DecodeFieldError> {
...
}
enum ReadFileErrorKind {
IO(ObjectStoreError),
Decode(DecodeFieldError),
}
struct ReadFileError {
path: Path,
kind: ReadFileErrorKind,
}
fn read_file(path: Path) -> Result<_, ReadFileError> {
let data = read_data(path)?;
for field in data.schema() {
decode(field, data).map_err(|err: DecodeFieldError| {
ReadFileError { path, kind: ReadFileErrorKind::Decode(err) }
});
}
}
And then the error stack would look like:
Error: failed to read file 'data.lance'
Caused by:
0: failed to read field 'age' (id: 10) for row offset 10
1: number out of range