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

Method del_change

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

Source from the content-addressed store, hash-verified

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