@@ -34,6 +34,12 @@ pub struct DocumentDeletionResult {
34
34
pub deleted_documents : u64 ,
35
35
pub remaining_documents : u64 ,
36
36
}
37
+ #[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
38
+ pub struct DetailedDocumentDeletionResult {
39
+ pub deleted_documents : u64 ,
40
+ pub remaining_documents : u64 ,
41
+ pub used_soft_deletion : bool ,
42
+ }
37
43
38
44
impl < ' t , ' u , ' i > DeleteDocuments < ' t , ' u , ' i > {
39
45
pub fn new (
@@ -68,8 +74,16 @@ impl<'t, 'u, 'i> DeleteDocuments<'t, 'u, 'i> {
68
74
self . delete_document ( docid) ;
69
75
Some ( docid)
70
76
}
71
-
72
- pub fn execute ( mut self ) -> Result < DocumentDeletionResult > {
77
+ pub fn execute ( self ) -> Result < DocumentDeletionResult > {
78
+ let DetailedDocumentDeletionResult {
79
+ deleted_documents,
80
+ remaining_documents,
81
+ used_soft_deletion : _,
82
+ } = self . execute_inner ( ) ?;
83
+
84
+ Ok ( DocumentDeletionResult { deleted_documents, remaining_documents } )
85
+ }
86
+ pub ( crate ) fn execute_inner ( mut self ) -> Result < DetailedDocumentDeletionResult > {
73
87
self . index . set_updated_at ( self . wtxn , & OffsetDateTime :: now_utc ( ) ) ?;
74
88
75
89
// We retrieve the current documents ids that are in the database.
@@ -83,7 +97,11 @@ impl<'t, 'u, 'i> DeleteDocuments<'t, 'u, 'i> {
83
97
if !soft_deleted_docids. is_empty ( ) {
84
98
ClearDocuments :: new ( self . wtxn , self . index ) . execute ( ) ?;
85
99
}
86
- return Ok ( DocumentDeletionResult { deleted_documents : 0 , remaining_documents : 0 } ) ;
100
+ return Ok ( DetailedDocumentDeletionResult {
101
+ deleted_documents : 0 ,
102
+ remaining_documents : 0 ,
103
+ used_soft_deletion : false ,
104
+ } ) ;
87
105
}
88
106
89
107
// We remove the documents ids that we want to delete
@@ -95,9 +113,10 @@ impl<'t, 'u, 'i> DeleteDocuments<'t, 'u, 'i> {
95
113
// to delete is exactly the number of documents in the database.
96
114
if current_documents_ids_len == self . to_delete_docids . len ( ) {
97
115
let remaining_documents = ClearDocuments :: new ( self . wtxn , self . index ) . execute ( ) ?;
98
- return Ok ( DocumentDeletionResult {
116
+ return Ok ( DetailedDocumentDeletionResult {
99
117
deleted_documents : current_documents_ids_len,
100
118
remaining_documents,
119
+ used_soft_deletion : false ,
101
120
} ) ;
102
121
}
103
122
@@ -159,9 +178,10 @@ impl<'t, 'u, 'i> DeleteDocuments<'t, 'u, 'i> {
159
178
&& percentage_used_by_soft_deleted_documents < 10
160
179
{
161
180
self . index . put_soft_deleted_documents_ids ( self . wtxn , & soft_deleted_docids) ?;
162
- return Ok ( DocumentDeletionResult {
181
+ return Ok ( DetailedDocumentDeletionResult {
163
182
deleted_documents : self . to_delete_docids . len ( ) ,
164
183
remaining_documents : documents_ids. len ( ) ,
184
+ used_soft_deletion : true ,
165
185
} ) ;
166
186
}
167
187
@@ -488,9 +508,10 @@ impl<'t, 'u, 'i> DeleteDocuments<'t, 'u, 'i> {
488
508
& self . to_delete_docids ,
489
509
) ?;
490
510
491
- Ok ( DocumentDeletionResult {
511
+ Ok ( DetailedDocumentDeletionResult {
492
512
deleted_documents : self . to_delete_docids . len ( ) ,
493
513
remaining_documents : documents_ids. len ( ) ,
514
+ used_soft_deletion : false ,
494
515
} )
495
516
}
496
517
}
0 commit comments