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

Method del_change

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

Source from the content-addressed store, hash-verified

1027 }
1028
1029 fn del_change(
1030 &mut self,
1031 view: &mut ViewState,
1032 change_id: NodeId,
1033 _change_hash: &Hash,
1034 ) -> PristineResult<Option<u64>> {
1035 // Find the sequence number for this change
1036 let seq = {
1037 let table = self.txn.open_table(REV_VIEW_CHANGES)?;
1038 let key = encode_view_seq(view.id, change_id.get());
1039 let result = table.get(&key)?;
1040 match result {
1041 Some(value) => {
1042 let v = value.value();
1043 drop(value);
1044 v
1045 }
1046 None => return Ok(None), // Change not in this view
1047 }
1048 };
1049
1050 // Remove from VIEW_CHANGES
1051 {
1052 let mut table = self.txn.open_table(VIEW_CHANGES)?;
1053 let key = encode_view_seq(view.id, seq);
1054 table.remove(&key)?;
1055 }
1056
1057 // Remove from REV_VIEW_CHANGES
1058 {
1059 let mut table = self.txn.open_table(REV_VIEW_CHANGES)?;
1060 let key = encode_view_seq(view.id, change_id.get());
1061 table.remove(&key)?;
1062 }
1063
1064 // Remove from MERKLE_CHAIN (the merkle state at this sequence)
1065 {
1066 let mut table = self.txn.open_table(MERKLE_CHAIN)?;
1067 let key = encode_view_seq(view.id, seq);
1068 table.remove(&key)?;
1069 }
1070
1071 // Shift all subsequent changes down by 1
1072 // We need to update sequences from seq+1 to change_count-1
1073 let original_count = view.change_count;
1074 for s in (seq + 1)..original_count {
1075 // Get the change_id at this sequence
1076 let cid = {
1077 let table = self.txn.open_table(VIEW_CHANGES)?;
1078 let key = encode_view_seq(view.id, s);
1079 let result = table.get(&key)?;
1080 match result {
1081 Some(v) => {
1082 let id = NodeId::new(v.value());
1083 drop(v);
1084 id
1085 }
1086 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