49 static constexpr int32_t kInitialSpecId = 0;
52 static constexpr int32_t kLegacyPartitionDataIdStart = 1000;
53 static constexpr int32_t kInvalidPartitionFieldId = -1;
56 static const std::shared_ptr<PartitionSpec>& Unpartitioned();
59 int32_t spec_id()
const;
62 std::span<const PartitionField> fields()
const;
65 Result<std::unique_ptr<StructType>> PartitionType(
const Schema& schema)
const;
68 Result<std::unique_ptr<StructType>> RawPartitionType(
const Schema& schema)
const;
78 std::string ToString()
const override;
80 int32_t last_assigned_field_id()
const {
return last_assigned_field_id_; }
83 return lhs.Equals(rhs);
91 Status Validate(
const Schema& schema,
bool allow_missing_fields)
const;
95 static Status ValidatePartitionName(
const Schema& schema,
const PartitionSpec& spec);
102 Result<std::vector<PartitionFieldRef>> GetFieldsBySourceId(int32_t source_id)
const;
113 static Result<std::unique_ptr<PartitionSpec>> Make(
114 const Schema& schema, int32_t spec_id, std::vector<PartitionField> fields,
115 bool allow_missing_fields,
116 std::optional<int32_t> last_assigned_field_id = std::nullopt);
125 static Result<std::unique_ptr<PartitionSpec>> Make(
126 int32_t spec_id, std::vector<PartitionField> fields,
127 std::optional<int32_t> last_assigned_field_id = std::nullopt);
129 static bool HasSequentialFieldIds(
const PartitionSpec& spec);
138 PartitionSpec(int32_t spec_id, std::vector<PartitionField> fields,
139 std::optional<int32_t> last_assigned_field_id = std::nullopt);
145 static Status ValidateRedundantPartitions(
const PartitionSpec& spec);
147 using SourceIdToFieldsMap = std::unordered_map<int32_t, std::vector<PartitionFieldRef>>;
148 static Result<SourceIdToFieldsMap> InitSourceIdToFieldsMap(
const PartitionSpec&);
150 const int32_t spec_id_;
151 std::vector<PartitionField> fields_;
152 int32_t last_assigned_field_id_;
153 Lazy<InitSourceIdToFieldsMap> source_id_to_fields_;