Skip to content

Commit 4ceacb8

Browse files
committed
Add another test
1 parent b3fcdcf commit 4ceacb8

File tree

2 files changed

+42
-11
lines changed

2 files changed

+42
-11
lines changed

pyiceberg/table/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,10 +499,10 @@ def delete(self, delete_filter: Union[str, BooleanExpression], snapshot_properti
499499
if delete_snapshot.rewrites_needed is True:
500500
bound_delete_filter = bind(self._table.schema(), delete_filter, case_sensitive=True)
501501
preserve_row_filter = expression_to_pyarrow(Not(bound_delete_filter))
502-
commit_uuid = uuid.uuid4()
503502

504503
files = self._scan(row_filter=delete_filter).plan_files()
505504

505+
commit_uuid = uuid.uuid4()
506506
counter = itertools.count(0)
507507

508508
replaced_files: List[Tuple[DataFile, List[DataFile]]] = []
@@ -3119,6 +3119,8 @@ def _copy_with_new_status(entry: ManifestEntry, status: ManifestEntryStatus) ->
31193119
for existing_entry in existing_entries:
31203120
writer.add_entry(existing_entry)
31213121
existing_manifests.append(writer.to_manifest_file())
3122+
# else:
3123+
# deleted_manifests.append()
31223124
else:
31233125
existing_manifests.append(manifest_file)
31243126
else:

tests/integration/test_deletes.py

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
from pyiceberg.catalog.rest import RestCatalog
2525
from pyiceberg.exceptions import NoSuchTableError
26-
from pyiceberg.expressions import EqualTo
26+
from pyiceberg.expressions import AlwaysTrue, EqualTo
27+
from pyiceberg.manifest import ManifestEntryStatus
2728
from pyiceberg.schema import Schema
2829
from pyiceberg.table.snapshots import Operation, Summary
2930
from pyiceberg.types import IntegerType, NestedField
@@ -265,9 +266,7 @@ def test_delete_no_match(session_catalog: RestCatalog) -> None:
265266
arrow_schema = pa.schema([pa.field("ints", pa.int32())])
266267
arrow_tbl = pa.Table.from_pylist(
267268
[
268-
{
269-
'ints': 1,
270-
},
269+
{'ints': 1},
271270
{'ints': 3},
272271
],
273272
schema=arrow_schema,
@@ -297,9 +296,7 @@ def test_delete_overwrite(session_catalog: RestCatalog) -> None:
297296
arrow_schema = pa.schema([pa.field("ints", pa.int32())])
298297
arrow_tbl = pa.Table.from_pylist(
299298
[
300-
{
301-
'ints': 1,
302-
},
299+
{'ints': 1},
303300
{'ints': 2},
304301
],
305302
schema=arrow_schema,
@@ -321,9 +318,7 @@ def test_delete_overwrite(session_catalog: RestCatalog) -> None:
321318

322319
arrow_tbl_overwrite = pa.Table.from_pylist(
323320
[
324-
{
325-
'ints': 3,
326-
},
321+
{'ints': 3},
327322
{'ints': 4},
328323
],
329324
schema=arrow_schema,
@@ -337,3 +332,37 @@ def test_delete_overwrite(session_catalog: RestCatalog) -> None:
337332
]
338333

339334
assert tbl.scan().to_arrow()['ints'].to_pylist() == [3, 4, 1]
335+
336+
337+
@pytest.mark.integration
338+
def test_delete_truncate(session_catalog: RestCatalog) -> None:
339+
arrow_schema = pa.schema([pa.field("ints", pa.int32())])
340+
arrow_tbl = pa.Table.from_pylist(
341+
[
342+
{'ints': 1},
343+
],
344+
schema=arrow_schema,
345+
)
346+
347+
iceberg_schema = Schema(NestedField(1, "ints", IntegerType()))
348+
349+
tbl_identifier = "default.test_delete_overwrite"
350+
351+
try:
352+
session_catalog.drop_table(tbl_identifier)
353+
except NoSuchTableError:
354+
pass
355+
356+
tbl = session_catalog.create_table(tbl_identifier, iceberg_schema)
357+
tbl.append(arrow_tbl)
358+
359+
# Effectively a truncate
360+
tbl.delete(delete_filter=AlwaysTrue())
361+
362+
manifests = tbl.current_snapshot().manifests(tbl.io)
363+
assert len(manifests) == 1
364+
365+
entries = manifests[0].fetch_manifest_entry(tbl.io, discard_deleted=False)
366+
assert len(entries) == 1
367+
368+
assert entries[0].status == ManifestEntryStatus.DELETED

0 commit comments

Comments
 (0)