| 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, |