Skip to content

Commit d3f7caa

Browse files
committed
1
1 parent f33754d commit d3f7caa

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/iceberg/table_requirements.cc

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919

2020
#include "iceberg/table_requirements.h"
2121

22+
#include <memory>
23+
2224
#include "iceberg/table_metadata.h"
25+
#include "iceberg/table_requirement.h"
2326
#include "iceberg/table_update.h"
2427

2528
namespace iceberg {
@@ -34,19 +37,34 @@ Result<std::vector<std::unique_ptr<TableRequirement>>> TableUpdateContext::Build
3437

3538
Result<std::vector<std::unique_ptr<TableRequirement>>> TableRequirements::ForCreateTable(
3639
const std::vector<std::unique_ptr<TableUpdate>>& table_updates) {
37-
return NotImplemented("TableRequirements::ForCreateTable not implemented");
40+
TableUpdateContext context(nullptr, false);
41+
context.AddRequirement(std::make_unique<table::AssertDoesNotExist>());
42+
for (const auto& update : table_updates) {
43+
ICEBERG_RETURN_UNEXPECTED(update->GenerateRequirements(context));
44+
}
45+
return context.Build();
3846
}
3947

4048
Result<std::vector<std::unique_ptr<TableRequirement>>> TableRequirements::ForReplaceTable(
4149
const TableMetadata& base,
4250
const std::vector<std::unique_ptr<TableUpdate>>& table_updates) {
43-
return NotImplemented("TableRequirements::ForReplaceTable not implemented");
51+
TableUpdateContext context(&base, true);
52+
context.AddRequirement(std::make_unique<table::AssertUUID>(base.table_uuid));
53+
for (const auto& update : table_updates) {
54+
ICEBERG_RETURN_UNEXPECTED(update->GenerateRequirements(context));
55+
}
56+
return context.Build();
4457
}
4558

4659
Result<std::vector<std::unique_ptr<TableRequirement>>> TableRequirements::ForUpdateTable(
4760
const TableMetadata& base,
4861
const std::vector<std::unique_ptr<TableUpdate>>& table_updates) {
49-
return NotImplemented("TableRequirements::ForUpdateTable not implemented");
62+
TableUpdateContext context(&base, false);
63+
context.AddRequirement(std::make_unique<table::AssertUUID>(base.table_uuid));
64+
for (const auto& update : table_updates) {
65+
ICEBERG_RETURN_UNEXPECTED(update->GenerateRequirements(context));
66+
}
67+
return context.Build();
5068
}
5169

5270
} // namespace iceberg

0 commit comments

Comments
 (0)