Skip to content

Commit 6af2034

Browse files
committed
update
1 parent 3b15ddf commit 6af2034

File tree

3 files changed

+25
-65
lines changed

3 files changed

+25
-65
lines changed

src/iceberg/table_requirements.h

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,35 @@ class ICEBERG_EXPORT TableUpdateContext {
6868
/// \brief Build and return the list of requirements
6969
Result<std::vector<std::unique_ptr<TableRequirement>>> Build();
7070

71+
// Getters for deduplication flags
72+
bool added_last_assigned_field_id() const { return added_last_assigned_field_id_; }
73+
bool added_current_schema_id() const { return added_current_schema_id_; }
74+
bool added_last_assigned_partition_id() const {
75+
return added_last_assigned_partition_id_;
76+
}
77+
bool added_default_spec_id() const { return added_default_spec_id_; }
78+
bool added_default_sort_order_id() const { return added_default_sort_order_id_; }
79+
80+
// Setters for deduplication flags
81+
void set_added_last_assigned_field_id(bool value) {
82+
added_last_assigned_field_id_ = value;
83+
}
84+
void set_added_current_schema_id(bool value) { added_current_schema_id_ = value; }
85+
void set_added_last_assigned_partition_id(bool value) {
86+
added_last_assigned_partition_id_ = value;
87+
}
88+
void set_added_default_spec_id(bool value) { added_default_spec_id_ = value; }
89+
void set_added_default_sort_order_id(bool value) {
90+
added_default_sort_order_id_ = value;
91+
}
92+
7193
private:
7294
const TableMetadata* base_;
7395
const bool is_replace_;
7496

7597
std::vector<std::unique_ptr<TableRequirement>> requirements_;
7698

77-
// Deduplication flags to avoid adding duplicate requirements
78-
// These track whether specific requirement types have already been added
99+
// flags to avoid adding duplicate requirements
79100
bool added_last_assigned_field_id_ = false;
80101
bool added_current_schema_id_ = false;
81102
bool added_last_assigned_partition_id_ = false;

src/iceberg/table_update.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ void UpgradeFormatVersion::ApplyTo(TableMetadataBuilder& builder) const {
4444
}
4545

4646
Status UpgradeFormatVersion::GenerateRequirements(TableUpdateContext& context) const {
47-
// AssignUUID does not generate additional requirements.
48-
return {};
47+
return NotImplemented("UpgradeFormatVersion::GenerateRequirements not implemented");
4948
}
5049

5150
// AddSchema

src/iceberg/test/table_requirements_test.cc

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ std::unique_ptr<TableMetadata> CreateBaseMetadata(
5757

5858
} // namespace
5959

60-
// Test: Empty updates for CreateTable
6160
TEST(TableRequirementsTest, EmptyUpdatesForCreateTable) {
6261
std::vector<std::unique_ptr<TableUpdate>> updates;
6362

@@ -73,7 +72,6 @@ TEST(TableRequirementsTest, EmptyUpdatesForCreateTable) {
7372
EXPECT_NE(assert_does_not_exist, nullptr);
7473
}
7574

76-
// Test: Empty updates for UpdateTable
7775
TEST(TableRequirementsTest, EmptyUpdatesForUpdateTable) {
7876
auto metadata = CreateBaseMetadata();
7977
std::vector<std::unique_ptr<TableUpdate>> updates;
@@ -90,7 +88,6 @@ TEST(TableRequirementsTest, EmptyUpdatesForUpdateTable) {
9088
EXPECT_EQ(assert_uuid->uuid(), metadata->table_uuid);
9189
}
9290

93-
// Test: Empty updates for ReplaceTable
9491
TEST(TableRequirementsTest, EmptyUpdatesForReplaceTable) {
9592
auto metadata = CreateBaseMetadata();
9693
std::vector<std::unique_ptr<TableUpdate>> updates;
@@ -107,7 +104,6 @@ TEST(TableRequirementsTest, EmptyUpdatesForReplaceTable) {
107104
EXPECT_EQ(assert_uuid->uuid(), metadata->table_uuid);
108105
}
109106

110-
// Test: Table already exists (CreateTable requirement validation)
111107
TEST(TableRequirementsTest, TableAlreadyExists) {
112108
std::vector<std::unique_ptr<TableUpdate>> updates;
113109

@@ -124,7 +120,6 @@ TEST(TableRequirementsTest, TableAlreadyExists) {
124120
EXPECT_THAT(status, HasErrorMessage("table already exists"));
125121
}
126122

127-
// Test: Table does not exist (CreateTable requirement validation)
128123
TEST(TableRequirementsTest, TableDoesNotExist) {
129124
std::vector<std::unique_ptr<TableUpdate>> updates;
130125

@@ -139,7 +134,7 @@ TEST(TableRequirementsTest, TableDoesNotExist) {
139134
EXPECT_THAT(status, IsOk());
140135
}
141136

142-
// Test: AssignUUID for UpdateTable
137+
// Test for AssignUUID update
143138
TEST(TableRequirementsTest, AssignUUID) {
144139
auto metadata = CreateBaseMetadata("original-uuid");
145140
std::vector<std::unique_ptr<TableUpdate>> updates;
@@ -161,12 +156,10 @@ TEST(TableRequirementsTest, AssignUUID) {
161156
ASSERT_NE(assert_uuid, nullptr);
162157
EXPECT_EQ(assert_uuid->uuid(), "original-uuid");
163158

164-
// Validate against base metadata (should succeed)
165159
auto status = requirements[0]->Validate(metadata.get());
166160
EXPECT_THAT(status, IsOk());
167161
}
168162

169-
// Test: AssignUUID validation failure
170163
TEST(TableRequirementsTest, AssignUUIDFailure) {
171164
auto metadata = CreateBaseMetadata("original-uuid");
172165
std::vector<std::unique_ptr<TableUpdate>> updates;
@@ -188,7 +181,6 @@ TEST(TableRequirementsTest, AssignUUIDFailure) {
188181
EXPECT_THAT(status, HasErrorMessage("UUID does not match"));
189182
}
190183

191-
// Test: AssignUUID for ReplaceTable
192184
TEST(TableRequirementsTest, AssignUUIDForReplaceTable) {
193185
auto metadata = CreateBaseMetadata("original-uuid");
194186
std::vector<std::unique_ptr<TableUpdate>> updates;
@@ -215,56 +207,4 @@ TEST(TableRequirementsTest, AssignUUIDForReplaceTable) {
215207
EXPECT_THAT(status, IsOk());
216208
}
217209

218-
// Test: Multiple requirements validation
219-
TEST(TableRequirementsTest, ValidateAllRequirements) {
220-
auto metadata = CreateBaseMetadata("test-uuid");
221-
std::vector<std::unique_ptr<TableUpdate>> updates;
222-
updates.push_back(std::make_unique<table::AssignUUID>(metadata->table_uuid));
223-
224-
auto result = TableRequirements::ForUpdateTable(*metadata, updates);
225-
ASSERT_THAT(result, IsOk());
226-
227-
auto& requirements = result.value();
228-
229-
// All requirements should validate successfully
230-
for (const auto& req : requirements) {
231-
auto status = req->Validate(metadata.get());
232-
EXPECT_THAT(status, IsOk());
233-
}
234-
}
235-
236-
// Test: UUID comparison is case-insensitive
237-
TEST(TableRequirementsTest, AssignUUIDCaseInsensitive) {
238-
auto metadata = CreateBaseMetadata("TEST-UUID-1234");
239-
std::vector<std::unique_ptr<TableUpdate>> updates;
240-
updates.push_back(std::make_unique<table::AssignUUID>("test-uuid-1234"));
241-
242-
auto result = TableRequirements::ForUpdateTable(*metadata, updates);
243-
ASSERT_THAT(result, IsOk());
244-
245-
auto& requirements = result.value();
246-
ASSERT_EQ(requirements.size(), 1);
247-
248-
// Validate against base metadata (should succeed due to case-insensitive comparison)
249-
auto status = requirements[0]->Validate(metadata.get());
250-
EXPECT_THAT(status, IsOk());
251-
}
252-
253-
// Test: ForCreateTable with AssignUUID does not generate requirements
254-
TEST(TableRequirementsTest, CreateTableWithAssignUUID) {
255-
std::vector<std::unique_ptr<TableUpdate>> updates;
256-
updates.push_back(std::make_unique<table::AssignUUID>("new-table-uuid"));
257-
258-
auto result = TableRequirements::ForCreateTable(updates);
259-
ASSERT_THAT(result, IsOk());
260-
261-
auto& requirements = result.value();
262-
// Should have only AssertDoesNotExist, no UUID requirement for new tables
263-
ASSERT_EQ(requirements.size(), 1);
264-
265-
auto* assert_does_not_exist =
266-
dynamic_cast<table::AssertDoesNotExist*>(requirements[0].get());
267-
EXPECT_NE(assert_does_not_exist, nullptr);
268-
}
269-
270210
} // namespace iceberg

0 commit comments

Comments
 (0)