Skip to content

feat: add row delta update#721

Open
manuzhang wants to merge 3 commits into
apache:mainfrom
manuzhang:codex/row-delta
Open

feat: add row delta update#721
manuzhang wants to merge 3 commits into
apache:mainfrom
manuzhang:codex/row-delta

Conversation

@manuzhang

Copy link
Copy Markdown
Member

Implements the RowDelta update builder, table and transaction factory methods, and focused tests for row-level add/delete flows.

manuzhang and others added 2 commits June 10, 2026 15:25
Implements the RowDelta update builder, table and transaction factory methods, and focused tests for row-level add/delete flows.

Co-authored-by: Codex <codex@openai.com>
Keeps mixed row removals out of delete snapshots and validates staged deletion vectors against concurrent DV additions.

Co-authored-by: Codex <codex@openai.com>
Comment thread src/iceberg/update/row_delta.cc Outdated
Comment thread src/iceberg/update/merging_snapshot_update.h
Comment thread src/iceberg/test/row_delta_test.cc
Comment thread src/iceberg/update/row_delta.cc
Classify row deltas that add only delete files as delete operations, even when they also remove data files.

Let ValidateDeletedFiles skip missing-file checks for empty tables, and use the default added-DV validation path.

Co-authored-by: Codex <codex@openai.com>
@manuzhang manuzhang requested a review from WZhuo June 17, 2026 07:57

Status RowDelta::ValidateNoConflictingFileAndPositionDeletes() const {
std::vector<std::string> conflicting_files;
for (const auto& file : removed_data_files_) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: conflicting_files could use std::vector<std::string_view> instead of std::vector<std::string> to avoid unnecessary string copies.

This is safe because:

  • file->file_path is a std::string member of DataFile
  • removed_data_files_ holds shared_ptr<DataFile>, so the backing strings live through the function
  • conflicting_files is a local only consumed by FormatRange before returning — the string_views never escape the scope

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants