Commit 5bb61ea
committed
fix: properly propagate errors in MetricsConfig validation
The previous error handling in VerifyReferencedColumns treated all
failures the same way. When FindFieldByName() failed, both actual
errors (e.g., internal failures during name resolution) and simple
"field not found" cases would return the same generic validation
error message, losing important error context.
FindFieldByName() returns Result<optional<reference_wrapper>>, which
can represent three states:
1. Error during lookup (Result contains error)
2. Lookup succeeded but field not found (Result contains empty optional)
3. Lookup succeeded and field found (Result contains optional with value)
The original code combined states 1 and 2:
if (!field.has_value() || !field.value().has_value())
Changed to use ICEBERG_ASSIGN_OR_RAISE to separate error propagation
from the "not found" check:
ICEBERG_ASSIGN_OR_RAISE(auto field, schema.FindFieldByName(...));
if (!field.has_value())
The macro unwraps the Result, propagating any errors immediately,
then assigns the optional to field. The subsequent has_value() check
verifies if the optional contains a value, maintaining the same
functionality while properly handling errors. This pattern is already
used elsewhere in the codebase (e.g., table_metadata.cc:80-85).1 parent cf0fd37 commit 5bb61ea
1 file changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | | - | |
| 39 | + | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
0 commit comments