shangxinli opened a new issue, #775:
URL: https://github.com/apache/iceberg-cpp/issues/775

   ## Overview
   
   This issue tracks the implementation of `ReplacePartitions` in C++, assigned 
in #637.
   
   `ReplacePartitions` performs dynamic partition overwrite: each file added to 
the operation marks its entire partition for deletion, and on commit, existing 
files in those partitions are atomically replaced. The resulting snapshot uses 
`operation="overwrite"` and summary property `"replace-partitions"="true"`.
   
   ## Implementation Plan
   
   ### PR 1 — Core implementation
   
   New files:
   - `src/iceberg/update/replace_partitions.h`
   - `src/iceberg/update/replace_partitions.cc`
   
   Modified files:
   - `src/iceberg/snapshot.h` — add `kReplacePartitions` constant to 
`SnapshotSummaryFields`
   - `src/iceberg/type_fwd.h` — add `class ReplacePartitions;`
   - `src/iceberg/CMakeLists.txt` — register new source
   
   ### PR 2 — Table/Transaction API surface + tests
   
   Modified files:
   - `src/iceberg/table.h` / `table.cc` — add `NewReplacePartitions()`
   - `src/iceberg/transaction.h` / `transaction.cc` — add 
`NewReplacePartitions()`
   
   New files:
   - `src/iceberg/test/replace_partitions_test.cc`
   - `src/iceberg/test/CMakeLists.txt` — register test
   
   ## Design
   
   `ReplacePartitions` extends `SnapshotUpdate` (same pattern as `FastAppend`) 
and uses `ManifestFilterManager` to mark existing partition files as DELETED:
   
   - `AddFile(file)`: calls `filter_manager_.DropPartition(spec_id, 
partition)`, accumulates new file in `new_data_files_by_spec_`
   - `ValidateAppendOnly()`: calls `filter_manager_.FailAnyDelete()`
   - `Apply()`: for unpartitioned tables calls 
`filter_manager_.DeleteByRowFilter(AlwaysTrue)`; calls `FilterManifests()` on 
existing snapshot, then prepends new manifests
   - `operation()`: returns `DataOperation::kOverwrite`
   - `Summary()`: sets `"replace-partitions"="true"`
   
   Relates to: #637


-- 
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]

Reply via email to