Skip to content

Commit 56b0c03

Browse files
committed
fix ci
1 parent a6b776f commit 56b0c03

File tree

3 files changed

+41
-47
lines changed

3 files changed

+41
-47
lines changed

src/iceberg/table_metadata.cc

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
#include <chrono>
2424
#include <cstdint>
2525
#include <format>
26-
#include <ranges>
2726
#include <optional>
27+
#include <ranges>
2828
#include <string>
2929
#include <unordered_map>
3030

@@ -45,6 +45,21 @@
4545

4646
namespace iceberg {
4747

48+
#define BUILDER_RETURN_IF_ERROR(result) \
49+
if (auto&& result_name = result; !result_name) [[unlikely]] { \
50+
impl_->errors.emplace_back(std::move(result_name.error())); \
51+
return *this; \
52+
}
53+
54+
#define BUILDER_ASSIGN_OR_RETURN_IMPL(result_name, lhs, rexpr) \
55+
auto&& result_name = (rexpr); \
56+
BUILDER_RETURN_IF_ERROR(result_name) \
57+
lhs = std::move(result_name.value());
58+
59+
#define BUILDER_ASSIGN_OR_RETURN(lhs, rexpr) \
60+
BUILDER_ASSIGN_OR_RETURN_IMPL(ICEBERG_ASSIGN_OR_RAISE_NAME(result_, __COUNTER__), lhs, \
61+
rexpr)
62+
4863
namespace {
4964
const TimePointMs kInvalidLastUpdatedMs = TimePointMs::min();
5065
}
@@ -322,7 +337,7 @@ struct TableMetadataBuilder::Impl {
322337
}
323338
}
324339

325-
int32_t reuseOrCreateNewSortOrderId(const SortOrder& new_order) {
340+
int32_t ReuseOrCreateNewSortOrderId(const SortOrder& new_order) {
326341
if (new_order.is_unsorted()) {
327342
return SortOrder::kUnsortedOrderId;
328343
}
@@ -457,7 +472,7 @@ TableMetadataBuilder& TableMetadataBuilder::SetDefaultSortOrder(int32_t order_id
457472

458473
TableMetadataBuilder& TableMetadataBuilder::AddSortOrder(
459474
std::shared_ptr<SortOrder> order) {
460-
int32_t new_order_id = impl_->reuseOrCreateNewSortOrderId(*order);
475+
int32_t new_order_id = impl_->ReuseOrCreateNewSortOrderId(*order);
461476

462477
if (impl_->sort_orders_by_id.find(new_order_id) != impl_->sort_orders_by_id.end()) {
463478
// update last_added_order_id if the order was added in this set of changes (since it
@@ -475,42 +490,20 @@ TableMetadataBuilder& TableMetadataBuilder::AddSortOrder(
475490
return *this;
476491
}
477492

478-
// Get current schema for validation
479-
auto schema_result = impl_->metadata.Schema();
480-
if (!schema_result) {
481-
impl_->errors.emplace_back(
482-
ErrorKind::kInvalidArgument,
483-
std::format("Cannot find current schema: {}", schema_result.error().message));
484-
return *this;
485-
}
486-
487-
auto schema = schema_result.value();
488-
489-
// Validate the sort order against the schema
490-
auto validate_status = order->Validate(*schema);
491-
if (!validate_status) {
492-
impl_->errors.emplace_back(
493-
ErrorKind::kInvalidArgument,
494-
std::format("Sort order validation failed: {}", validate_status.error().message));
495-
return *this;
496-
}
493+
// Get current schema and validate the sort order against it
494+
BUILDER_ASSIGN_OR_RETURN(auto schema, impl_->metadata.Schema());
495+
BUILDER_RETURN_IF_ERROR(order->Validate(*schema));
497496

498497
std::shared_ptr<SortOrder> new_order;
499498
if (order->is_unsorted()) {
500499
new_order = SortOrder::Unsorted();
501500
} else {
502-
// TODO(Li Feiyang): rebuild the sort order using new column ids (freshSortOrder)
503-
// For now, create a new sort order with the provided fields
504-
auto sort_order_result = SortOrder::Make(
505-
*schema, new_order_id,
506-
std::vector<SortField>(order->fields().begin(), order->fields().end()));
507-
if (!sort_order_result) {
508-
impl_->errors.emplace_back(ErrorKind::kInvalidArgument,
509-
std::format("Failed to create sort order: {}",
510-
sort_order_result.error().message));
511-
return *this;
512-
}
513-
new_order = std::move(sort_order_result.value());
501+
// Unlike freshSortOrder from Java impl, we don't use field name from old bound
502+
// schema to rebuild the sort order.
503+
BUILDER_ASSIGN_OR_RETURN(
504+
new_order,
505+
SortOrder::Make(new_order_id, std::vector<SortField>(order->fields().begin(),
506+
order->fields().end())));
514507
}
515508

516509
impl_->metadata.sort_orders.push_back(new_order);

src/iceberg/test/table_metadata_builder_test.cc

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,7 @@ TEST(TableMetadataBuilderTest, AddSortOrderInvalid) {
203203
SortOrder::Make(1, std::vector<SortField>{invalid_field}));
204204
builder->AddSortOrder(std::move(order1));
205205
ASSERT_THAT(builder->Build(), IsError(ErrorKind::kCommitFailed));
206-
ASSERT_THAT(builder->Build(),
207-
HasErrorMessage("Cannot find source column for sort field"));
206+
ASSERT_THAT(builder->Build(), HasErrorMessage("Cannot find source column"));
208207

209208
// 2. Invalid transform (Day transform on string type)
210209
builder = TableMetadataBuilder::BuildFrom(base.get());
@@ -224,35 +223,38 @@ TEST(TableMetadataBuilderTest, AddSortOrderInvalid) {
224223
SortOrder::Make(*schema, 1, std::vector<SortField>{field}));
225224
builder->AddSortOrder(std::move(order3));
226225
ASSERT_THAT(builder->Build(), IsError(ErrorKind::kCommitFailed));
227-
ASSERT_THAT(builder->Build(), HasErrorMessage("Cannot find current schema"));
226+
ASSERT_THAT(builder->Build(), HasErrorMessage("Schema with ID"));
228227
}
229228

230-
// Test applying TableUpdate to builder
231-
TEST(TableMetadataBuilderTest, ApplyUpdate) {
232-
// Use base metadata with schema for all update tests
229+
// Test applying AssignUUID update to builder
230+
TEST(TableMetadataBuilderTest, ApplyAssignUUIDUpdate) {
233231
auto base = CreateBaseMetadata();
234232
auto builder = TableMetadataBuilder::BuildFrom(base.get());
235233

236234
// Apply AssignUUID update
237235
table::AssignUUID uuid_update("apply-uuid");
238236
uuid_update.ApplyTo(*builder);
239237

238+
ICEBERG_UNWRAP_OR_FAIL(auto metadata, builder->Build());
239+
EXPECT_EQ(metadata->table_uuid, "apply-uuid");
240+
}
241+
242+
// Test applying AddSortOrder update to builder
243+
TEST(TableMetadataBuilderTest, ApplyAddSortOrderUpdate) {
244+
auto base = CreateBaseMetadata();
245+
auto builder = TableMetadataBuilder::BuildFrom(base.get());
246+
240247
// Apply AddSortOrder update
241248
auto schema = CreateTestSchema();
242249
SortField sort_field(1, Transform::Identity(), SortDirection::kAscending,
243250
NullOrder::kFirst);
244251
ICEBERG_UNWRAP_OR_FAIL(auto sort_order_unique,
245252
SortOrder::Make(*schema, 1, std::vector<SortField>{sort_field}));
246253
auto sort_order = std::shared_ptr<SortOrder>(std::move(sort_order_unique));
247-
248254
table::AddSortOrder sort_order_update(sort_order);
249255
sort_order_update.ApplyTo(*builder);
250256

251-
// TODO(Li Feiyang): Apply more build methods once they are implemented
252-
253-
// Verify all updates were applied
254257
ICEBERG_UNWRAP_OR_FAIL(auto metadata, builder->Build());
255-
EXPECT_EQ(metadata->table_uuid, "apply-uuid");
256258
ASSERT_EQ(metadata->sort_orders.size(), 2);
257259
EXPECT_EQ(metadata->sort_orders[1]->order_id(), 1);
258260
}

src/iceberg/test/table_update_test.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,8 @@ TEST(TableUpdateTest, AddSortOrderGenerateRequirements) {
105105
auto schema = CreateTestSchema();
106106
SortField sort_field(1, Transform::Identity(), SortDirection::kAscending,
107107
NullOrder::kFirst);
108-
ICEBERG_UNWRAP_OR_FAIL(auto sort_order_unique,
108+
ICEBERG_UNWRAP_OR_FAIL(std::shared_ptr<SortOrder> sort_order,
109109
SortOrder::Make(*schema, 1, std::vector<SortField>{sort_field}));
110-
auto sort_order = std::shared_ptr<SortOrder>(std::move(sort_order_unique));
111110
table::AddSortOrder update(sort_order);
112111

113112
// New table - no requirements

0 commit comments

Comments
 (0)