58 using PartitionSpecsById = std::unordered_map<int32_t, std::shared_ptr<PartitionSpec>>;
60 static Result<std::unique_ptr<ManifestFilterManager>> Make(
62 std::function<Status(
const std::string&)> delete_file = {});
74 Status DeleteByRowFilter(std::shared_ptr<Expression> expr);
77 void CaseSensitive(
bool case_sensitive);
84 Status DeleteFile(std::string_view path);
92 Status DeleteFile(std::shared_ptr<DataFile> file);
102 const std::vector<std::shared_ptr<DataFile>>& DeletedFiles()
const;
110 Result<SnapshotSummaryBuilder> BuildSummary(
111 const std::vector<ManifestFile>& manifests,
112 const PartitionSpecsById& specs_by_id)
const;
124 void FailMissingDeletePaths();
128 void FailAnyDelete();
136 bool ContainsDeletes()
const;
148 Status DropDeleteFilesOlderThan(int64_t sequence_number);
158 void RemoveDanglingDeletesFor(
const DataFileSet& deleted_files);
169 Result<std::vector<ManifestFile>> FilterManifests(
170 const TableMetadata& metadata,
const std::shared_ptr<Snapshot>& base_snapshot,
177 Result<std::vector<ManifestFile>> FilterManifests(
178 const std::shared_ptr<Schema>& schema,
const TableMetadata& metadata,
179 const std::shared_ptr<Snapshot>& base_snapshot,
192 Result<std::vector<ManifestFile>> FilterManifests(
193 const std::shared_ptr<Schema>& schema,
const PartitionSpecsById& specs_by_id,
194 const std::vector<const ManifestFile*>& manifests,
199 Status CleanUncommitted(
const std::unordered_set<std::string>& committed);
203 std::function<Status(
const std::string&)> delete_file);
206 Result<bool> CanContainExpressionDeletes(
const ManifestFile& manifest,
207 const std::shared_ptr<Schema>& schema,
208 const PartitionSpecsById& specs_by_id);
215 Result<bool> CanContainDroppedPartitions(
const ManifestFile& manifest)
const;
218 Result<bool> CanContainDroppedFiles(
const ManifestFile& manifest)
const;
221 Result<bool> CanContainDeletedFiles(
const ManifestFile& manifest,
222 const std::shared_ptr<Schema>& schema,
223 const PartitionSpecsById& specs_by_id,
224 bool trust_manifest_references);
226 bool CanTrustManifestReferences(
227 const std::vector<const ManifestFile*>& manifests)
const;
229 struct FilteredManifestDeletes {
230 std::vector<std::shared_ptr<DataFile>> files;
231 int32_t duplicate_deletes_count = 0;
234 Result<ManifestFile> FilterManifest(
const std::shared_ptr<Schema>& schema,
235 const PartitionSpecsById& specs_by_id,
236 const ManifestFile& manifest,
237 bool trust_manifest_references,
238 const ManifestWriterFactory& writer_factory);
240 Result<bool> ManifestHasDeletedFiles(
const std::vector<ManifestEntry>& entries,
241 const std::shared_ptr<Schema>& schema,
242 const PartitionSpecsById& specs_by_id,
243 int32_t manifest_spec_id);
245 Result<ManifestFile> FilterManifestWithDeletedFiles(
246 const std::vector<ManifestEntry>& entries, int32_t manifest_spec_id,
247 const std::shared_ptr<Schema>& schema,
const PartitionSpecsById& specs_by_id,
248 const ManifestWriterFactory& writer_factory);
250 Status ValidateRequiredDeletes()
const;
252 Status InvalidateFilteredCache();
253 void ResetDeletedFiles();
256 Result<ManifestEvaluator*> GetManifestEvaluator(
const std::shared_ptr<Schema>& schema,
257 const PartitionSpecsById& specs_by_id,
261 Result<ResidualEvaluator*> GetResidualEvaluator(
const std::shared_ptr<Schema>& schema,
262 const PartitionSpecsById& specs_by_id,
266 Result<bool> ShouldDelete(
const ManifestEntry& entry,
267 const std::shared_ptr<Schema>& schema,
268 const PartitionSpecsById& specs_by_id,
269 int32_t manifest_spec_id);
271 const ManifestContent manifest_content_;
272 std::shared_ptr<FileIO> file_io_;
273 std::function<Status(
const std::string&)> delete_file_;
275 std::shared_ptr<Expression> delete_expr_;
276 std::unordered_set<std::string> delete_paths_;
278 DeleteFileSet delete_files_to_delete_;
280 DataFileSet data_files_to_delete_;
282 DataFileSet data_files_;
284 DeleteFileSet delete_files_;
285 std::unordered_map<ManifestFile, FilteredManifestDeletes>
286 filtered_manifest_to_deleted_files_;
288 std::vector<std::shared_ptr<DataFile>> deleted_files_;
290 DataFileSet deleted_data_file_set_;
292 DeleteFileSet deleted_delete_file_set_;
293 PartitionSet drop_partitions_;
294 bool fail_missing_delete_paths_{
false};
295 bool fail_any_delete_{
false};
296 bool case_sensitive_{
true};
297 int32_t duplicate_deletes_count_{0};
298 int32_t replaced_manifests_count_{0};
301 int64_t min_sequence_number_{0};
303 std::unordered_set<std::string> removed_data_file_paths_;
305 std::unordered_map<ManifestFile, ManifestFile> filtered_manifests_;
307 std::unordered_map<int32_t, std::unique_ptr<ManifestEvaluator>>
308 manifest_evaluator_cache_;
309 std::unordered_map<int32_t, std::unique_ptr<ResidualEvaluator>>
310 residual_evaluator_cache_;