liboxen/core/db/data_frames/
row_changes_db.rs1use rocksdb::DB;
2
3use crate::{error::OxenError, view::data_frames::DataFrameRowChange};
4
5pub fn write_data_frame_row_change(
6 data_frame_row_change: &DataFrameRowChange,
7 db: &DB,
8) -> Result<(), OxenError> {
9 save_data_frame_row_changes(db, data_frame_row_change)
10}
11
12pub fn save_data_frame_row_changes(
13 db: &DB,
14 data_frame_row_change: &DataFrameRowChange,
15) -> Result<(), OxenError> {
16 let key = &data_frame_row_change.row_id;
17 let val_json = serde_json::to_string(data_frame_row_change)?;
18
19 db.put(key, val_json.as_bytes())?;
20
21 log::debug!("save_data_frame_row_changes() saved change: {data_frame_row_change:?}");
22
23 Ok(())
24}
25
26pub fn delete_data_frame_row_changes(db: &DB, row_id: &str) -> Result<(), OxenError> {
27 db.delete(row_id)?;
28
29 log::debug!("delete_data_frame_row_changes() deleted change in: {row_id:?}");
30
31 Ok(())
32}
33
34pub fn get_all_data_frame_row_changes(db: &DB) -> Result<Vec<DataFrameRowChange>, OxenError> {
35 let mut changes = Vec::new();
36
37 let iterator = db.iterator(rocksdb::IteratorMode::Start);
39
40 for item in iterator {
41 match item {
42 Ok((_key, value)) => {
43 let val_str = match std::str::from_utf8(&value) {
44 Ok(v) => v,
45 Err(_) => continue,
46 };
47 match serde_json::from_str::<DataFrameRowChange>(val_str) {
48 Ok(change) => changes.push(change),
49 Err(_) => continue,
50 }
51 }
52 Err(_) => continue,
53 }
54 }
55
56 Ok(changes)
57}
58
59pub fn get_data_frame_row_change(
60 db: &DB,
61 name: &str,
62) -> Result<Option<DataFrameRowChange>, OxenError> {
63 let val = db.get(name)?;
64
65 match val {
66 Some(val) => {
67 let val_str = match std::str::from_utf8(&val) {
68 Ok(v) => v,
69 Err(_) => return Ok(None),
70 };
71 match serde_json::from_str::<DataFrameRowChange>(val_str) {
72 Ok(change) => Ok(Some(change)),
73 Err(_) => Ok(None),
74 }
75 }
76 None => Ok(None),
77 }
78}