MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / delete_indexes_for_document

Method delete_indexes_for_document

nodedb/src/engine/sparse/btree_index.rs:18–63  ·  view source on GitHub ↗

Delete all secondary index entries for a document. Scans the INDEXES table for entries ending with `:{document_id}` and removes them. Called during document deletion cascade.

(
        &self,
        tenant_id: u64,
        collection: &str,
        document_id: &str,
    )

Source from the content-addressed store, hash-verified

16 /// Scans the INDEXES table for entries ending with `:{document_id}` and
17 /// removes them. Called during document deletion cascade.
18 pub fn delete_indexes_for_document(
19 &self,
20 tenant_id: u64,
21 collection: &str,
22 document_id: &str,
23 ) -> crate::Result<()> {
24 let prefix = format!("{tenant_id}:{collection}:");
25 let end = format!("{tenant_id}:{collection}:\u{ffff}");
26 let suffix = format!(":{document_id}");
27
28 let write_txn = self
29 .db
30 .begin_write()
31 .map_err(|e| redb_err("write txn", e))?;
32 {
33 let mut table = write_txn
34 .open_table(INDEXES)
35 .map_err(|e| redb_err("open indexes", e))?;
36
37 let keys_to_remove: Vec<String> = table
38 .range(prefix.as_str()..end.as_str())
39 .map_err(|e| redb_err("index range", e))?
40 .filter_map(|r| {
41 r.ok().and_then(|(k, _)| {
42 let key = k.value().to_string();
43 if key.ends_with(&suffix) {
44 Some(key)
45 } else {
46 None
47 }
48 })
49 })
50 .collect();
51
52 for key in &keys_to_remove {
53 table
54 .remove(key.as_str())
55 .map_err(|e| redb_err("remove index", e))?;
56 }
57 }
58 write_txn
59 .commit()
60 .map_err(|e| redb_err("commit index cascade", e))?;
61
62 Ok(())
63 }
64
65 /// Delete all secondary index entries for a specific field in a collection.
66 pub fn delete_index_entries_for_field(

Callers 5

execute_bulk_deleteMethod · 0.80
execute_truncateMethod · 0.80
execute_point_deleteMethod · 0.80
tx_point_deleteMethod · 0.80
deleteMethod · 0.80

Calls 9

begin_writeMethod · 0.80
collectMethod · 0.80
to_stringMethod · 0.80
redb_errFunction · 0.70
rangeMethod · 0.45
as_strMethod · 0.45
okMethod · 0.45
removeMethod · 0.45
commitMethod · 0.45

Tested by

no test coverage detected