lishuxu opened a new pull request, #741:
URL: https://github.com/apache/iceberg-cpp/pull/741
Summary:
Add a production OverwriteFiles builder that brings iceberg-cpp to semantic
parity with Java's BaseOverwriteFiles. It supports explicit file replacement
(DeleteFile + AddFile) and range-based replacement (OverwriteByRowFilter +
AddFile) with the same family of pre-commit concurrency validations. The
builder is a thin subclass of MergingSnapshotUpdate and reuses the existing
commit kernel (Apply/summary/retry/cleanup) unchanged.
Changes:
- New OverwriteFiles class (src/iceberg/update/overwrite_files.{h,cc}) and
Table::NewOverwrite() / Transaction::NewOverwrite() entry points.
- Builder surface: AddFile, DeleteFile, bulk DeleteFiles,
OverwriteByRowFilter, ValidateFromSnapshot, ConflictDetectionFilter,
ValidateNoConflictingData, ValidateNoConflictingDeletes,
ValidateAddedFilesMatchOverwriteFilter, WithCaseSensitivity.
- Validate(): conflict-filter resolution, concurrent add/delete conflict
checks, and strict added-file range validation (projection +
StrictMetricsEvaluator).
- Tests (overwrite_files_test.cc, 45 cases) and CMake/meson wiring.
Behavior alignment with Java:
- operation() returns append/delete/overwrite from builder content.
- Conflict-filter resolution mirrors BaseOverwriteFiles (explicit -> row
filter -> AlwaysTrue); replaced-file delete checks honor
ConflictDetectionFilter.
- Strict added-file validation uses a single DataSpec(), rejecting
multi-spec and empty added-file sets.
- Deviations: public WithCaseSensitivity (vs caseSensitive) to avoid a
protected-name clash; ValidateFromSnapshot rejects negative ids early.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]