Skip to content

Commit 60bf322

Browse files
committed
fix ci
1 parent 463d693 commit 60bf322

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
}
@@ -325,7 +340,7 @@ struct TableMetadataBuilder::Impl {
325340
}
326341
}
327342

328-
int32_t reuseOrCreateNewSortOrderId(const SortOrder& new_order) {
343+
int32_t ReuseOrCreateNewSortOrderId(const SortOrder& new_order) {
329344
if (new_order.is_unsorted()) {
330345
return SortOrder::kUnsortedOrderId;
331346
}
@@ -461,7 +476,7 @@ TableMetadataBuilder& TableMetadataBuilder::SetDefaultSortOrder(int32_t order_id
461476

462477
TableMetadataBuilder& TableMetadataBuilder::AddSortOrder(
463478
std::shared_ptr<SortOrder> order) {
464-
int32_t new_order_id = impl_->reuseOrCreateNewSortOrderId(*order);
479+
int32_t new_order_id = impl_->ReuseOrCreateNewSortOrderId(*order);
465480

466481
if (impl_->sort_orders_by_id.find(new_order_id) != impl_->sort_orders_by_id.end()) {
467482
// update last_added_order_id if the order was added in this set of changes (since it
@@ -479,42 +494,20 @@ TableMetadataBuilder& TableMetadataBuilder::AddSortOrder(
479494
return *this;
480495
}
481496

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

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

520513
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
@@ -104,9 +104,8 @@ TEST(TableUpdateTest, AddSortOrderGenerateRequirements) {
104104
auto schema = CreateTestSchema();
105105
SortField sort_field(1, Transform::Identity(), SortDirection::kAscending,
106106
NullOrder::kFirst);
107-
ICEBERG_UNWRAP_OR_FAIL(auto sort_order_unique,
107+
ICEBERG_UNWRAP_OR_FAIL(std::shared_ptr<SortOrder> sort_order,
108108
SortOrder::Make(*schema, 1, std::vector<SortField>{sort_field}));
109-
auto sort_order = std::shared_ptr<SortOrder>(std::move(sort_order_unique));
110109
table::AddSortOrder update(sort_order);
111110

112111
// New table - no requirements

0 commit comments

Comments
 (0)