Compare commits

...
Author SHA1 Message Date
WH-2099 5362195253 fix(api): scope segment batch deletes 2026-07-06 12:47:02 +08:00
2 changed files with 18 additions and 2 deletions
+8 -1
View File
@@ -3872,7 +3872,14 @@ class SegmentService:
session.add(document)
# Delete database records
session.execute(delete(DocumentSegment).where(DocumentSegment.id.in_(segment_ids)))
session.execute(
delete(DocumentSegment).where(
DocumentSegment.id.in_(segment_db_ids),
DocumentSegment.dataset_id == dataset.id,
DocumentSegment.document_id == document.id,
DocumentSegment.tenant_id == current_user.current_tenant_id,
)
)
session.commit()
@classmethod
@@ -823,7 +823,9 @@ class TestSegmentServiceMutations:
# scalars() for child_node_ids
mock_db.session.scalars.return_value.all.return_value = ["child-1"]
SegmentService.delete_segments(["segment-1", "segment-2"], document, dataset, mock_db.session)
SegmentService.delete_segments(
["segment-1", "segment-2", "foreign-segment"], document, dataset, mock_db.session
)
assert document.word_count == 0
mock_db.session.add.assert_called_once_with(document)
@@ -834,6 +836,13 @@ class TestSegmentServiceMutations:
["segment-1", "segment-2"],
["child-1"],
)
delete_stmt = mock_db.session.execute.call_args_list[1].args[0]
delete_sql = str(delete_stmt.compile(compile_kwargs={"literal_binds": True}))
assert "document_segments.id IN ('segment-1', 'segment-2')" in delete_sql
assert "document_segments.dataset_id = 'dataset-1'" in delete_sql
assert "document_segments.document_id = 'doc-1'" in delete_sql
assert "document_segments.tenant_id = 'tenant-1'" in delete_sql
assert "foreign-segment" not in delete_sql
mock_db.session.commit.assert_called_once()
def test_update_segments_status_enables_only_segments_without_indexing_cache(self):