Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions core/src/main/java/org/apache/iceberg/BaseRowDelta.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ protected BaseRowDelta self() {

@Override
protected String operation() {
if (addsDataFiles() && !addsDeleteFiles() && !deletesDataFiles()) {
Comment thread
mxm marked this conversation as resolved.
return DataOperations.APPEND;
}

if (addsDeleteFiles() && !addsDataFiles()) {
return DataOperations.DELETE;
}
Expand Down
24 changes: 24 additions & 0 deletions core/src/test/java/org/apache/iceberg/TestRowDelta.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,25 @@ public void addOnlyDeleteFilesProducesDeleteOperation() {
assertThat(snap.deleteManifests(table.io())).hasSize(1);
}

@TestTemplate
public void addOnlyDataFilesProducesAppendOperation() {
SnapshotUpdate<?> rowDelta = table.newRowDelta().addRows(FILE_A).addRows(FILE_B);

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.

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.

Good point!

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.

+1 on adding this test case

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added. Please see dcd7e73.


commit(table, rowDelta, branch);
Snapshot snap = latestSnapshot(table, branch);
assertThat(snap.sequenceNumber()).isEqualTo(1);
assertThat(snap.operation()).isEqualTo(DataOperations.APPEND);
assertThat(snap.dataManifests(table.io())).hasSize(1);

validateManifest(
snap.dataManifests(table.io()).get(0),
dataSeqs(1L, 1L),
fileSeqs(1L, 1L),
ids(snap.snapshotId(), snap.snapshotId()),
files(FILE_A, FILE_B),
statuses(Status.ADDED, Status.ADDED));
}

@TestTemplate
public void testAddRemoveRows() {
SnapshotUpdate<?> rowDelta =
Expand Down Expand Up @@ -599,6 +618,7 @@ public void testOverwriteWithRemoveRows() {

long deltaSnapshotId = latestSnapshot(table, branch).snapshotId();
assertThat(latestSnapshot(table, branch).sequenceNumber()).isEqualTo(1);
assertThat(latestSnapshot(table, branch).operation()).isEqualTo(DataOperations.OVERWRITE);
assertThat(table.ops().current().lastSequenceNumber()).isEqualTo(1);

// overwriting by a filter will also remove delete files that match because all matching data
Expand Down Expand Up @@ -642,6 +662,7 @@ public void testReplacePartitionsWithRemoveRows() {

long deltaSnapshotId = latestSnapshot(table, branch).snapshotId();
assertThat(latestSnapshot(table, branch).sequenceNumber()).isEqualTo(1);
assertThat(latestSnapshot(table, branch).operation()).isEqualTo(DataOperations.OVERWRITE);
assertThat(table.ops().current().lastSequenceNumber()).isEqualTo(1);

// overwriting the partition will also remove delete files that match because all matching data
Expand Down Expand Up @@ -688,6 +709,7 @@ public void testDeleteByExpressionWithRemoveRows() {
branch);

assertThat(latestSnapshot(table, branch).sequenceNumber()).isEqualTo(1);
assertThat(latestSnapshot(table, branch).operation()).isEqualTo(DataOperations.OVERWRITE);
assertThat(table.ops().current().lastSequenceNumber()).isEqualTo(1);

// deleting with a filter will also remove delete files that match because all matching data
Expand Down Expand Up @@ -726,6 +748,7 @@ public void testDeleteDataFileWithRemoveRows() {

long deltaSnapshotId = latestSnapshot(table, branch).snapshotId();
assertThat(latestSnapshot(table, branch).sequenceNumber()).isEqualTo(1);
assertThat(latestSnapshot(table, branch).operation()).isEqualTo(DataOperations.OVERWRITE);
assertThat(table.ops().current().lastSequenceNumber()).isEqualTo(1);

// deleting a specific data file will not affect a delete file in v2 or less
Expand Down Expand Up @@ -786,6 +809,7 @@ public void testFastAppendDoesNotRemoveStaleDeleteFiles() {

long deltaSnapshotId = latestSnapshot(table, branch).snapshotId();
assertThat(latestSnapshot(table, branch).sequenceNumber()).isEqualTo(1);
assertThat(latestSnapshot(table, branch).operation()).isEqualTo(DataOperations.OVERWRITE);
assertThat(table.ops().current().lastSequenceNumber()).isEqualTo(1);

// deleting a specific data file will not affect a delete file
Expand Down