start/db/commands/
insert.rs1use bson::Bson;
2use log::trace;
3
4use crate::{db::{catalog::{collection::RawDocument, session::Session}, operation_context::OperationContext, ops, service_context::ServiceContext}, HandleResult};
5
6pub fn insert(
7 session: &Session,
8 collection: &str,
9 document: Bson
10) -> HandleResult<()> {
11 trace!("__________________Insert____________________");
12 let mut op_ctx = OperationContext::new(session)?;
13
14 let catalog =
15 op_ctx.catalog().borrow_mut()
16 .collection();
17
18 let content = bson::to_vec(&document)?;
19
20 let mut meta = catalog.borrow_mut().acquire_collection_or_create(collection, &mut op_ctx);
21
22 ops::insert::insert(&mut op_ctx, &mut meta, &content);
23
24 if session.transaction().borrow().is_none() {
25 op_ctx.rc_unit().borrow_mut().commit();
26 }
27 trace!("___________________________________________");
28
29 Ok(())
30}