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

Method iter_changes

atomic-core/src/pristine/txn/read.rs:410–446  ·  view source on GitHub ↗
(
        &self,
        view: &ViewState,
        from_seq: u64,
    )

Source from the content-addressed store, hash-verified

408 }
409
410 fn iter_changes(
411 &self,
412 view: &ViewState,
413 from_seq: u64,
414 ) -> PristineResult<Box<dyn Iterator<Item = Result<(u64, NodeId, Merkle), PristineError>> + '_>>
415 {
416 let changes_table = self.txn.open_table(VIEW_CHANGES)?;
417 let tags_table = self.txn.open_table(MERKLE_CHAIN)?;
418
419 let view_id = view.id;
420 let start_key = encode_view_seq(view_id, from_seq);
421 let end_key = encode_view_seq(view_id, u64::MAX);
422
423 // Collect into a Vec to avoid lifetime issues
424 let mut results = Vec::new();
425 for result in changes_table.range::<&[u8; 16]>(&start_key..=&end_key)? {
426 match result {
427 Ok((key, value)) => {
428 let (_, seq) = decode_view_seq(key.value());
429 let change_id = NodeId::new(value.value());
430
431 let tag_key = encode_view_seq(view_id, seq);
432 let merkle = match tags_table.get(&tag_key) {
433 Ok(Some(m)) => Merkle::from_bytes(*m.value()),
434 _ => Merkle::ZERO,
435 };
436
437 results.push(Ok((seq, change_id, merkle)));
438 }
439 Err(e) => {
440 results.push(Err(PristineError::Storage(Box::new(e))));
441 }
442 }
443 }
444
445 Ok(Box::new(results.into_iter()))
446 }
447}
448
449// TreeTxnT Implementation

Callers

nothing calls this directly

Calls 5

encode_view_seqFunction · 0.85
decode_view_seqFunction · 0.85
getMethod · 0.65
pushMethod · 0.45
into_iterMethod · 0.45

Tested by

no test coverage detected