Skip to main content

liboxen/core/db/data_frames/
row_changes_db.rs

1use 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    // Iterate from the start
38    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}