Skip to main content

systemprompt_database/models/
transaction.rs

1//! Dyn-safe transaction trait used by the dynamic-SQL surface.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use crate::error::DatabaseResult;
7use crate::models::{JsonRow, QuerySelector, ToDbValue};
8use async_trait::async_trait;
9
10#[async_trait]
11pub trait DatabaseTransaction: Send {
12    async fn execute(
13        &mut self,
14        query: &dyn QuerySelector,
15        params: &[&dyn ToDbValue],
16    ) -> DatabaseResult<u64>;
17
18    async fn fetch_all(
19        &mut self,
20        query: &dyn QuerySelector,
21        params: &[&dyn ToDbValue],
22    ) -> DatabaseResult<Vec<JsonRow>>;
23
24    async fn fetch_one(
25        &mut self,
26        query: &dyn QuerySelector,
27        params: &[&dyn ToDbValue],
28    ) -> DatabaseResult<JsonRow>;
29
30    async fn fetch_optional(
31        &mut self,
32        query: &dyn QuerySelector,
33        params: &[&dyn ToDbValue],
34    ) -> DatabaseResult<Option<JsonRow>>;
35
36    async fn commit(self: Box<Self>) -> DatabaseResult<()>;
37
38    async fn rollback(self: Box<Self>) -> DatabaseResult<()>;
39}