start 0.4.4

StartDB – Embedded NoSQL Database in Rust
Documentation
use log::trace;

use crate::{db::{catalog::collection::RawDocument, collection::Collection, operation_context::OperationContext, query::filtering::{self, Filter}}, HandleResult};

pub fn delete(
    op_ctx: &mut OperationContext,
    col: Collection,
    filter: Option<Filter>,
) -> HandleResult<()> {
    let mut next_offset = col.next_document as usize;
    let rc_unit = op_ctx.rc_unit();
    
    while next_offset != 0 {
        let raw_doc = RawDocument::parse(&rc_unit.borrow(), next_offset);

        if raw_doc.flag_deleted {
            next_offset = raw_doc.next_document as usize;
            continue;
        }
        trace!("RawDoc: {:?}", raw_doc);

        let doc = bson::from_slice(&raw_doc.content)?;
        if let Some(filter) = &filter {
            if filtering::matches_filter(&doc, filter) {
                col.delete_document(op_ctx, next_offset);
            }
        } else {
            col.delete_document(op_ctx, next_offset);
        };
        next_offset = raw_doc.next_document as usize;
    }

    Ok(())
}