32#include "iceberg/iceberg_export.h"
33#include "iceberg/result.h"
46 enum class Kind : uint8_t {
50 kAssertLastAssignedFieldId,
51 kAssertCurrentSchemaID,
52 kAssertLastAssignedPartitionId,
54 kAssertDefaultSortOrderID,
60 virtual Kind
kind()
const = 0;
77 virtual std::unique_ptr<TableRequirement>
Clone()
const = 0;
81 return lhs.Equals(rhs);
95 Kind
kind()
const override {
return Kind::kAssertDoesNotExist; }
100 return other.kind() == Kind::kAssertDoesNotExist;
103 std::unique_ptr<TableRequirement>
Clone()
const override {
104 return std::make_unique<AssertDoesNotExist>();
116 const std::string&
uuid()
const {
return uuid_; }
118 Kind
kind()
const override {
return Kind::kAssertUUID; }
123 if (other.kind() != Kind::kAssertUUID) {
126 const auto& other_uuid = internal::checked_cast<const AssertUUID&>(other);
127 return uuid_ == other_uuid.uuid_;
130 std::unique_ptr<TableRequirement>
Clone()
const override {
131 return std::make_unique<AssertUUID>(uuid_);
146 : ref_name_(std::move(ref_name)), snapshot_id_(snapshot_id) {}
148 const std::string& ref_name()
const {
return ref_name_; }
150 const std::optional<int64_t>& snapshot_id()
const {
return snapshot_id_; }
152 Kind
kind()
const override {
return Kind::kAssertRefSnapshotID; }
157 if (other.kind() != Kind::kAssertRefSnapshotID) {
160 const auto& other_ref = internal::checked_cast<const AssertRefSnapshotID&>(other);
161 return ref_name_ == other_ref.ref_name_ && snapshot_id_ == other_ref.snapshot_id_;
164 std::unique_ptr<TableRequirement>
Clone()
const override {
165 return std::make_unique<AssertRefSnapshotID>(ref_name_, snapshot_id_);
169 std::string ref_name_;
170 std::optional<int64_t> snapshot_id_;
180 : last_assigned_field_id_(last_assigned_field_id) {}
182 int32_t last_assigned_field_id()
const {
return last_assigned_field_id_; }
184 Kind
kind()
const override {
return Kind::kAssertLastAssignedFieldId; }
189 if (other.kind() != Kind::kAssertLastAssignedFieldId) {
192 const auto& other_field =
193 internal::checked_cast<const AssertLastAssignedFieldId&>(other);
194 return last_assigned_field_id_ == other_field.last_assigned_field_id_;
197 std::unique_ptr<TableRequirement>
Clone()
const override {
198 return std::make_unique<AssertLastAssignedFieldId>(last_assigned_field_id_);
202 int32_t last_assigned_field_id_;
213 int32_t schema_id()
const {
return schema_id_; }
215 Kind
kind()
const override {
return Kind::kAssertCurrentSchemaID; }
220 if (other.kind() != Kind::kAssertCurrentSchemaID) {
223 const auto& other_schema =
224 internal::checked_cast<const AssertCurrentSchemaID&>(other);
225 return schema_id_ == other_schema.schema_id_;
228 std::unique_ptr<TableRequirement>
Clone()
const override {
229 return std::make_unique<AssertCurrentSchemaID>(schema_id_);
243 : last_assigned_partition_id_(last_assigned_partition_id) {}
245 int32_t last_assigned_partition_id()
const {
return last_assigned_partition_id_; }
247 Kind
kind()
const override {
return Kind::kAssertLastAssignedPartitionId; }
252 if (other.kind() != Kind::kAssertLastAssignedPartitionId) {
255 const auto& other_partition =
256 internal::checked_cast<const AssertLastAssignedPartitionId&>(other);
257 return last_assigned_partition_id_ == other_partition.last_assigned_partition_id_;
260 std::unique_ptr<TableRequirement>
Clone()
const override {
261 return std::make_unique<AssertLastAssignedPartitionId>(last_assigned_partition_id_);
265 int32_t last_assigned_partition_id_;
276 int32_t spec_id()
const {
return spec_id_; }
278 Kind
kind()
const override {
return Kind::kAssertDefaultSpecID; }
283 if (other.kind() != Kind::kAssertDefaultSpecID) {
286 const auto& other_spec = internal::checked_cast<const AssertDefaultSpecID&>(other);
287 return spec_id_ == other_spec.spec_id_;
290 std::unique_ptr<TableRequirement>
Clone()
const override {
291 return std::make_unique<AssertDefaultSpecID>(spec_id_);
305 : sort_order_id_(sort_order_id) {}
307 int32_t sort_order_id()
const {
return sort_order_id_; }
309 Kind
kind()
const override {
return Kind::kAssertDefaultSortOrderID; }
314 if (other.kind() != Kind::kAssertDefaultSortOrderID) {
317 const auto& other_sort =
318 internal::checked_cast<const AssertDefaultSortOrderID&>(other);
319 return sort_order_id_ == other_sort.sort_order_id_;
322 std::unique_ptr<TableRequirement>
Clone()
const override {
323 return std::make_unique<AssertDefaultSortOrderID>(sort_order_id_);
327 int32_t sort_order_id_;
Checked cast functions for dynamic_cast and static_cast. Adapted from Apache Arrow https://github....
Base class for update requirement operations.
Definition table_requirement.h:44
virtual std::unique_ptr< TableRequirement > Clone() const =0
Create a deep copy of this requirement.
virtual bool Equals(const TableRequirement &other) const =0
Check equality with another TableRequirement.
friend bool operator==(const TableRequirement &lhs, const TableRequirement &rhs)
Compare two TableRequirement instances for equality.
Definition table_requirement.h:80
virtual Status Validate(const TableMetadata *base) const =0
Validate this requirement against table metadata.
virtual Kind kind() const =0
Return the kind of requirement.
Requirement that the current schema ID matches.
Definition table_requirement.h:209
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:219
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:228
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:215
Requirement that the default sort order ID matches.
Definition table_requirement.h:302
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:322
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:309
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:313
Requirement that the default partition spec ID matches.
Definition table_requirement.h:272
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:278
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:282
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:290
Requirement that the table does not exist.
Definition table_requirement.h:91
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:95
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:103
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:99
Requirement that the last assigned field ID matches.
Definition table_requirement.h:177
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:197
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:184
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:188
Requirement that the last assigned partition ID matches.
Definition table_requirement.h:240
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:247
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:251
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:260
Requirement that a reference (branch or tag) points to a specific snapshot.
Definition table_requirement.h:143
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:164
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:156
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:152
Requirement that the table UUID matches the expected value.
Definition table_requirement.h:112
bool Equals(const TableRequirement &other) const override
Check equality with another TableRequirement.
Definition table_requirement.h:122
Kind kind() const override
Return the kind of requirement.
Definition table_requirement.h:118
std::unique_ptr< TableRequirement > Clone() const override
Create a deep copy of this requirement.
Definition table_requirement.h:130
ICEBERG_EXPORT const std::shared_ptr< UuidType > & uuid()
Return a UuidType instance.