Remove all index entries for a deleted primary key. `field_values` are the field values from the deleted entry.
(&mut self, primary_key: &[u8], field_values: &[(&str, &[u8])])
| 412 | /// |
| 413 | /// `field_values` are the field values from the deleted entry. |
| 414 | pub fn on_delete(&mut self, primary_key: &[u8], field_values: &[(&str, &[u8])]) { |
| 415 | for idx in &mut self.indexes { |
| 416 | for &(field, value) in field_values { |
| 417 | if field == idx.field { |
| 418 | idx.remove(value, primary_key); |
| 419 | self.total_index_writes += 1; |
| 420 | } |
| 421 | } |
| 422 | } |
| 423 | |
| 424 | // Maintain composite indexes on delete. |
| 425 | for ci in &mut self.composite_indexes { |
| 426 | let vals: Vec<&[u8]> = ci |
| 427 | .fields |
| 428 | .iter() |
| 429 | .filter_map(|f| { |
| 430 | field_values |
| 431 | .iter() |
| 432 | .find(|(name, _)| *name == f.as_str()) |
| 433 | .map(|(_, v)| *v) |
| 434 | }) |
| 435 | .collect(); |
| 436 | if vals.len() == ci.fields.len() { |
| 437 | ci.remove(&vals, primary_key); |
| 438 | self.total_index_writes += 1; |
| 439 | } |
| 440 | } |
| 441 | } |
| 442 | |
| 443 | /// Write amplification ratio: total_index_writes / total_puts. |
| 444 | /// |