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
2528namespace iceberg {
@@ -34,19 +37,34 @@ Result<std::vector<std::unique_ptr<TableRequirement>>> TableUpdateContext::Build
3437
3538Result<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
4048Result<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
4659Result<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