Skip to content

Commit 08d3bac

Browse files
committed
fix: review comments
1 parent 1b5710a commit 08d3bac

File tree

5 files changed

+31
-38
lines changed

5 files changed

+31
-38
lines changed

src/iceberg/json_serde.cc

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,22 +1270,15 @@ Result<std::unique_ptr<NameMapping>> NameMappingFromJson(const nlohmann::json& j
12701270
return NameMapping::Make(std::move(mapped_fields));
12711271
}
12721272

1273-
std::optional<std::string> UpdateMappingFromJsonString(
1274-
std::string_view mapping_json, const std::map<int32_t, SchemaField>& updates,
1273+
Result<std::string> UpdateMappingFromJsonString(
1274+
std::string_view mapping_json,
1275+
const std::unordered_map<int32_t, std::shared_ptr<SchemaField>>& updates,
12751276
const std::multimap<int32_t, int32_t>& adds) {
1276-
auto json_result = FromJsonString(std::string(mapping_json));
1277-
if (!json_result) return std::nullopt;
1278-
1279-
auto current_mapping = NameMappingFromJson(*json_result);
1280-
if (!current_mapping) return std::nullopt;
1281-
1282-
auto updated_mapping = UpdateMapping(**current_mapping, updates, adds);
1283-
if (!updated_mapping) return std::nullopt;
1284-
1285-
auto json_str = ToJsonString(ToJson(**updated_mapping));
1286-
if (!json_str) return std::nullopt;
1287-
1288-
return std::move(*json_str);
1277+
ICEBERG_ASSIGN_OR_RAISE(auto json, FromJsonString(std::string(mapping_json)));
1278+
ICEBERG_ASSIGN_OR_RAISE(auto current_mapping, NameMappingFromJson(json));
1279+
ICEBERG_ASSIGN_OR_RAISE(auto updated_mapping,
1280+
UpdateMapping(*current_mapping, updates, adds));
1281+
return ToJsonString(ToJson(*updated_mapping));
12891282
}
12901283

12911284
nlohmann::json ToJson(const TableIdentifier& identifier) {

src/iceberg/json_serde_internal.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <optional>
2525
#include <string>
2626
#include <string_view>
27+
#include <unordered_map>
2728

2829
#include <nlohmann/json_fwd.hpp>
2930

@@ -354,9 +355,10 @@ ICEBERG_EXPORT Result<std::unique_ptr<NameMapping>> NameMappingFromJson(
354355
/// \brief Update a name mapping from its JSON string and return updated JSON.
355356
///
356357
/// Parses the JSON, calls UpdateMapping, and serializes the result.
357-
/// Returns nullopt if any step fails.
358-
ICEBERG_EXPORT std::optional<std::string> UpdateMappingFromJsonString(
359-
std::string_view mapping_json, const std::map<int32_t, SchemaField>& updates,
358+
/// Returns an error if parsing, mapping update, or serialization fails.
359+
ICEBERG_EXPORT Result<std::string> UpdateMappingFromJsonString(
360+
std::string_view mapping_json,
361+
const std::unordered_map<int32_t, std::shared_ptr<SchemaField>>& updates,
360362
const std::multimap<int32_t, int32_t>& adds);
361363

362364
/// \brief Serializes a `TableIdentifier` object to JSON.

src/iceberg/name_mapping.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,9 @@ class CreateMappingVisitor {
326326
// Visitor class for updating name mappings with schema changes
327327
class UpdateMappingVisitor {
328328
public:
329-
UpdateMappingVisitor(const std::map<int32_t, SchemaField>& updates,
330-
const std::multimap<int32_t, int32_t>& adds)
329+
UpdateMappingVisitor(
330+
const std::unordered_map<int32_t, std::shared_ptr<SchemaField>>& updates,
331+
const std::multimap<int32_t, int32_t>& adds)
331332
: updates_(updates), adds_(adds) {}
332333

333334
Result<std::unique_ptr<MappedFields>> VisitMapping(const NameMapping& mapping) {
@@ -351,15 +352,15 @@ class UpdateMappingVisitor {
351352

352353
// Build update assignments map for removing reassigned names
353354
std::unordered_map<std::string, int32_t> update_assignments;
354-
std::ranges::for_each(field_results, [&](const auto& field) {
355+
for (const auto& field : field_results) {
355356
if (field.field_id.has_value()) {
356357
auto update_it = updates_.find(field.field_id.value());
357358
if (update_it != updates_.end()) {
358-
update_assignments.emplace(std::string(update_it->second.name()),
359+
update_assignments.emplace(std::string(update_it->second->name()),
359360
field.field_id.value());
360361
}
361362
}
362-
});
363+
}
363364

364365
// Remove reassigned names from all fields
365366
for (auto& field : field_results) {
@@ -375,7 +376,7 @@ class UpdateMappingVisitor {
375376
if (field.field_id.has_value()) {
376377
auto update_it = updates_.find(field.field_id.value());
377378
if (update_it != updates_.end()) {
378-
field_names.insert(std::string(update_it->second.name()));
379+
field_names.insert(std::string(update_it->second->name()));
379380
}
380381
}
381382

@@ -408,7 +409,7 @@ class UpdateMappingVisitor {
408409
for (auto it = range.first; it != range.second; ++it) {
409410
auto update_it = updates_.find(it->second);
410411
if (update_it != updates_.end()) {
411-
fields_to_add.push_back(&update_it->second);
412+
fields_to_add.push_back(update_it->second.get());
412413
}
413414
}
414415

@@ -471,7 +472,7 @@ class UpdateMappingVisitor {
471472
};
472473
}
473474

474-
const std::map<int32_t, SchemaField>& updates_;
475+
const std::unordered_map<int32_t, std::shared_ptr<SchemaField>>& updates_;
475476
const std::multimap<int32_t, int32_t>& adds_;
476477
};
477478

@@ -488,7 +489,8 @@ Result<std::unique_ptr<NameMapping>> CreateMapping(const Schema& schema) {
488489
}
489490

490491
Result<std::unique_ptr<NameMapping>> UpdateMapping(
491-
const NameMapping& mapping, const std::map<int32_t, SchemaField>& updates,
492+
const NameMapping& mapping,
493+
const std::unordered_map<int32_t, std::shared_ptr<SchemaField>>& updates,
492494
const std::multimap<int32_t, int32_t>& adds) {
493495
UpdateMappingVisitor visitor(updates, adds);
494496
auto result = visitor.VisitMapping(mapping);

src/iceberg/name_mapping.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ ICEBERG_EXPORT Result<std::unique_ptr<NameMapping>> CreateMapping(const Schema&
151151
/// \return an updated mapping with names added to renamed fields and the mapping extended
152152
/// for new fields
153153
ICEBERG_EXPORT Result<std::unique_ptr<NameMapping>> UpdateMapping(
154-
const NameMapping& mapping, const std::map<int32_t, SchemaField>& updates,
154+
const NameMapping& mapping,
155+
const std::unordered_map<int32_t, std::shared_ptr<SchemaField>>& updates,
155156
const std::multimap<int32_t, int32_t>& adds);
156157

157158
} // namespace iceberg

src/iceberg/update/update_schema.cc

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -601,22 +601,17 @@ Result<UpdateSchema::ApplyResult> UpdateSchema::Apply() {
601601

602602
auto mapping_it = properties.find(std::string(TableProperties::kDefaultNameMapping));
603603
if (mapping_it != properties.end() && !mapping_it->second.empty()) {
604-
std::map<int32_t, SchemaField> updates;
605-
for (const auto& [id, field_ptr] : updates_) {
606-
updates.emplace(id, *field_ptr);
607-
}
608604
std::multimap<int32_t, int32_t> adds;
609605
for (const auto& [parent_id, child_ids] : parent_to_added_ids_) {
610606
std::ranges::for_each(child_ids, [&adds, parent_id](int32_t child_id) {
611607
adds.emplace(parent_id, child_id);
612608
});
613609
}
614-
auto updated_mapping_json =
615-
UpdateMappingFromJsonString(mapping_it->second, updates, adds);
616-
if (updated_mapping_json) {
617-
updated_props[std::string(TableProperties::kDefaultNameMapping)] =
618-
std::move(*updated_mapping_json);
619-
}
610+
ICEBERG_ASSIGN_OR_RAISE(
611+
auto updated_mapping_json,
612+
UpdateMappingFromJsonString(mapping_it->second, updates_, adds));
613+
updated_props[std::string(TableProperties::kDefaultNameMapping)] =
614+
std::move(updated_mapping_json);
620615
}
621616

622617
return ApplyResult{.schema = std::move(new_schema),

0 commit comments

Comments
 (0)