Skip to main content

systemprompt_database/models/
transaction.rs

1use crate::models::{JsonRow, QuerySelector, ToDbValue};
2use anyhow::Result;
3use async_trait::async_trait;
4
5#[async_trait]
6pub trait DatabaseTransaction: Send {
7    async fn execute(
8        &mut self,
9        query: &dyn QuerySelector,
10        params: &[&dyn ToDbValue],
11    ) -> Result<u64>;
12
13    async fn fetch_all(
14        &mut self,
15        query: &dyn QuerySelector,
16        params: &[&dyn ToDbValue],
17    ) -> Result<Vec<JsonRow>>;
18
19    async fn fetch_one(
20        &mut self,
21        query: &dyn QuerySelector,
22        params: &[&dyn ToDbValue],
23    ) -> Result<JsonRow>;
24
25    async fn fetch_optional(
26        &mut self,
27        query: &dyn QuerySelector,
28        params: &[&dyn ToDbValue],
29    ) -> Result<Option<JsonRow>>;
30
31    async fn commit(self: Box<Self>) -> Result<()>;
32
33    async fn rollback(self: Box<Self>) -> Result<()>;
34}