Skip to main content

gluesql_git_storage/
store_mut.rs

1use {
2    crate::GitStorage,
3    async_trait::async_trait,
4    gluesql_core::{
5        data::{Key, Schema},
6        error::Result,
7        store::{DataRow, StoreMut},
8    },
9};
10
11#[async_trait]
12impl StoreMut for GitStorage {
13    async fn insert_schema(&mut self, schema: &Schema) -> Result<()> {
14        self.get_store_mut().insert_schema(schema).await?;
15
16        self.add_and_commit(&format!(
17            "[GitStorage::insert_schema] {}",
18            schema.table_name
19        ))
20    }
21
22    async fn delete_schema(&mut self, table_name: &str) -> Result<()> {
23        self.get_store_mut().delete_schema(table_name).await?;
24
25        self.add_and_commit("[GitStorage::delete_schema] {table_name}")
26    }
27
28    async fn append_data(&mut self, table_name: &str, rows: Vec<DataRow>) -> Result<()> {
29        let n = rows.len();
30        if n == 0 {
31            return Ok(());
32        }
33
34        self.get_store_mut().append_data(table_name, rows).await?;
35
36        self.add_and_commit(&format!(
37            "[GitStorage::append_data] {table_name} - {n} rows"
38        ))
39    }
40
41    async fn insert_data(&mut self, table_name: &str, rows: Vec<(Key, DataRow)>) -> Result<()> {
42        let n = rows.len();
43        if n == 0 {
44            return Ok(());
45        }
46
47        self.get_store_mut().insert_data(table_name, rows).await?;
48
49        self.add_and_commit(&format!(
50            "[GitStorage::insert_data] {table_name} - {n} rows"
51        ))
52    }
53
54    async fn delete_data(&mut self, table_name: &str, keys: Vec<Key>) -> Result<()> {
55        let n = keys.len();
56        if n == 0 {
57            return Ok(());
58        }
59
60        self.get_store_mut().delete_data(table_name, keys).await?;
61
62        self.add_and_commit(&format!(
63            "[GitStorage::delete_data] {table_name} - {n} rows"
64        ))
65    }
66}