MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / del_change

Method del_change

atomic-core/src/pristine/txn/write/mod.rs:555–680  ·  view source on GitHub ↗
(
        &mut self,
        view: &mut ViewState,
        change_id: NodeId,
        _change_hash: &Hash,
    )

Source from the content-addressed store, hash-verified

553 }
554
555 fn del_change(
556 &mut self,
557 view: &mut ViewState,
558 change_id: NodeId,
559 _change_hash: &Hash,
560 ) -> PristineResult<Option<u64>> {
561 // Find the sequence number for this change
562 let seq = {
563 let table = self.txn.open_table(REV_VIEW_CHANGES)?;
564 let key = encode_view_seq(view.id, change_id.get());
565 let result = table.get(&key)?;
566 match result {
567 Some(value) => {
568 let v = value.value();
569 drop(value);
570 v
571 }
572 None => return Ok(None), // Change not in this view
573 }
574 };
575
576 // Remove from VIEW_CHANGES
577 {
578 let mut table = self.txn.open_table(VIEW_CHANGES)?;
579 let key = encode_view_seq(view.id, seq);
580 table.remove(&key)?;
581 }
582
583 // Remove from REV_VIEW_CHANGES
584 {
585 let mut table = self.txn.open_table(REV_VIEW_CHANGES)?;
586 let key = encode_view_seq(view.id, change_id.get());
587 table.remove(&key)?;
588 }
589
590 // Remove from MERKLE_CHAIN (the merkle state at this sequence)
591 {
592 let mut table = self.txn.open_table(MERKLE_CHAIN)?;
593 let key = encode_view_seq(view.id, seq);
594 table.remove(&key)?;
595 }
596
597 // Shift all subsequent changes down by 1
598 // We need to update sequences from seq+1 to change_count-1
599 let original_count = view.change_count;
600 for s in (seq + 1)..original_count {
601 // Get the change_id at this sequence
602 let cid = {
603 let table = self.txn.open_table(VIEW_CHANGES)?;
604 let key = encode_view_seq(view.id, s);
605 let result = table.get(&key)?;
606 match result {
607 Some(v) => {
608 let id = NodeId::new(v.value());
609 drop(v);
610 id
611 }
612 None => continue,

Callers 4

test_del_changeFunction · 0.80
unrecordMethod · 0.80

Calls 8

encode_view_seqFunction · 0.85
encode_view_merkleFunction · 0.85
getMethod · 0.65
removeMethod · 0.65
insertMethod · 0.45
get_externalMethod · 0.45
nextMethod · 0.45
as_bytesMethod · 0.45

Tested by 3

test_del_changeFunction · 0.64