@@ -310,14 +310,14 @@ class CreateMappingVisitor {
310310 private:
311311 Status AddMappedField (std::vector<MappedField>& fields, const std::string& name,
312312 const SchemaField& field) const {
313- auto visit_result =
314- VisitType (*field. type (), [ this ]( const auto & type) { return this -> Visit (type); });
315- ICEBERG_RETURN_UNEXPECTED (visit_result );
313+ ICEBERG_ASSIGN_OR_RAISE (
314+ auto visit_result,
315+ VisitType (*field. type (), [ this ]( const auto & type) { return this -> Visit (type); }) );
316316
317317 fields.emplace_back (MappedField{
318318 .names = {name},
319319 .field_id = field.field_id (),
320- .nested_mapping = std::move (visit_result. value () ),
320+ .nested_mapping = std::move (visit_result),
321321 });
322322 return {};
323323 }
@@ -332,22 +332,21 @@ class UpdateMappingVisitor {
332332 : updates_(updates), adds_(adds) {}
333333
334334 Result<std::unique_ptr<MappedFields>> VisitMapping (const NameMapping& mapping) {
335- auto fields_result = VisitFields (mapping.AsMappedFields ());
336- ICEBERG_RETURN_UNEXPECTED (fields_result);
337- return AddNewFields (std::move (*fields_result),
338- -1 /* parent ID for top-level fields */ );
335+ ICEBERG_ASSIGN_OR_RAISE (auto fields_result, VisitFields (mapping.AsMappedFields ()));
336+ return AddNewFields (std::move (fields_result), kRootId );
339337 }
340338
341339 private:
340+ static constexpr int32_t kRootId = -1 ;
341+
342342 Result<std::unique_ptr<MappedFields>> VisitFields (const MappedFields& fields) {
343343 // Recursively visit all fields
344344 std::vector<MappedField> field_results;
345345 field_results.reserve (fields.Size ());
346346
347347 for (const auto & field : fields.fields ()) {
348- auto field_result = VisitField (field);
349- ICEBERG_RETURN_UNEXPECTED (field_result);
350- field_results.push_back (std::move (*field_result));
348+ ICEBERG_ASSIGN_OR_RAISE (auto field_result, VisitField (field));
349+ field_results.push_back (std::move (field_result));
351350 }
352351
353352 // Build update assignments map for removing reassigned names
@@ -382,17 +381,13 @@ class UpdateMappingVisitor {
382381
383382 std::unique_ptr<MappedFields> nested_mapping = nullptr ;
384383 if (field.nested_mapping != nullptr ) {
385- auto nested_result = VisitFields (*field.nested_mapping );
386- ICEBERG_RETURN_UNEXPECTED (nested_result);
387- nested_mapping = std::move (*nested_result);
384+ ICEBERG_ASSIGN_OR_RAISE (nested_mapping, VisitFields (*field.nested_mapping ));
388385 }
389386
390387 // Add a new mapping for any new nested fields
391388 if (field.field_id .has_value ()) {
392- auto nested_result =
393- AddNewFields (std::move (nested_mapping), field.field_id .value ());
394- ICEBERG_RETURN_UNEXPECTED (nested_result);
395- nested_mapping = std::move (*nested_result);
389+ ICEBERG_ASSIGN_OR_RAISE (nested_mapping, AddNewFields (std::move (nested_mapping),
390+ field.field_id .value ()));
396391 }
397392
398393 return MappedField{
@@ -420,15 +415,16 @@ class UpdateMappingVisitor {
420415 std::vector<MappedField> new_fields;
421416 CreateMappingVisitor create_visitor;
422417 for (const auto * field_to_add : fields_to_add) {
423- auto nested_result = VisitType (
424- *field_to_add->type (),
425- [&create_visitor](const auto & type) { return create_visitor.Visit (type); });
426- ICEBERG_RETURN_UNEXPECTED (nested_result);
418+ ICEBERG_ASSIGN_OR_RAISE (
419+ auto nested_result,
420+ VisitType (*field_to_add->type (), [&create_visitor](const auto & type) {
421+ return create_visitor.Visit (type);
422+ }));
427423
428424 new_fields.emplace_back (MappedField{
429425 .names = {std::string (field_to_add->name ())},
430426 .field_id = field_to_add->field_id (),
431- .nested_mapping = std::move (* nested_result),
427+ .nested_mapping = std::move (nested_result),
432428 });
433429 }
434430
@@ -480,22 +476,22 @@ class UpdateMappingVisitor {
480476
481477Result<std::unique_ptr<NameMapping>> CreateMapping (const Schema& schema) {
482478 CreateMappingVisitor visitor;
483- auto result = VisitType (
484- schema, [&visitor](const auto & type) -> Result<std::unique_ptr<MappedFields>> {
485- return visitor.Visit (type);
486- });
487- ICEBERG_RETURN_UNEXPECTED (result);
488- return NameMapping::Make (std::move (*result));
479+ ICEBERG_ASSIGN_OR_RAISE (
480+ auto result,
481+ VisitType (schema,
482+ [&visitor](const auto & type) -> Result<std::unique_ptr<MappedFields>> {
483+ return visitor.Visit (type);
484+ }));
485+ return NameMapping::Make (std::move (result));
489486}
490487
491488Result<std::unique_ptr<NameMapping>> UpdateMapping (
492489 const NameMapping& mapping,
493490 const std::unordered_map<int32_t , std::shared_ptr<SchemaField>>& updates,
494491 const std::multimap<int32_t , int32_t >& adds) {
495492 UpdateMappingVisitor visitor (updates, adds);
496- auto result = visitor.VisitMapping (mapping);
497- ICEBERG_RETURN_UNEXPECTED (result);
498- return NameMapping::Make (std::move (*result));
493+ ICEBERG_ASSIGN_OR_RAISE (auto result, visitor.VisitMapping (mapping));
494+ return NameMapping::Make (std::move (result));
499495}
500496
501497} // namespace iceberg
0 commit comments