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;
75 std::string ToString()
const override;
77 int32_t last_assigned_field_id()
const {
return last_assigned_field_id_; }
80 return lhs.Equals(rhs);
88 Status Validate(
const Schema& schema,
bool allow_missing_fields)
const;
92 static Status ValidatePartitionName(
const Schema& schema,
const PartitionSpec& spec);
99 Result<std::vector<PartitionFieldRef>> GetFieldsBySourceId(int32_t source_id)
const;
110 static Result<std::unique_ptr<PartitionSpec>> Make(
111 const Schema& schema, int32_t spec_id, std::vector<PartitionField> fields,
112 bool allow_missing_fields,
113 std::optional<int32_t> last_assigned_field_id = std::nullopt);
122 static Result<std::unique_ptr<PartitionSpec>> Make(
123 int32_t spec_id, std::vector<PartitionField> fields,
124 std::optional<int32_t> last_assigned_field_id = std::nullopt);
126 static bool HasSequentialFieldIds(
const PartitionSpec& spec);
135 PartitionSpec(int32_t spec_id, std::vector<PartitionField> fields,
136 std::optional<int32_t> last_assigned_field_id = std::nullopt);
142 static Status ValidateRedundantPartitions(
const PartitionSpec& spec);
144 using SourceIdToFieldsMap = std::unordered_map<int32_t, std::vector<PartitionFieldRef>>;
145 static Result<SourceIdToFieldsMap> InitSourceIdToFieldsMap(
const PartitionSpec&);
147 const int32_t spec_id_;
148 std::vector<PartitionField> fields_;
149 int32_t last_assigned_field_id_;
150 Lazy<InitSourceIdToFieldsMap> source_id_to_fields_;