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/// Held as `Box<dyn DatabaseTransaction>` by the dynamic-SQL surface, so the
11/// trait uses `#[async_trait]` to stay object-safe.
12#[async_trait]
13pub trait DatabaseTransaction: Send {
14    async fn execute(
15        &mut self,
16        query: &dyn QuerySelector,
17        params: &[&dyn ToDbValue],
18    ) -> DatabaseResult<u64>;
19
20    async fn fetch_all(
21        &mut self,
22        query: &dyn QuerySelector,
23        params: &[&dyn ToDbValue],
24    ) -> DatabaseResult<Vec<JsonRow>>;
25
26    async fn fetch_one(
27        &mut self,
28        query: &dyn QuerySelector,
29        params: &[&dyn ToDbValue],
30    ) -> DatabaseResult<JsonRow>;
31
32    async fn fetch_optional(
33        &mut self,
34        query: &dyn QuerySelector,
35        params: &[&dyn ToDbValue],
36    ) -> DatabaseResult<Option<JsonRow>>;
37
38    async fn commit(self: Box<Self>) -> DatabaseResult<()>;
39
40    async fn rollback(self: Box<Self>) -> DatabaseResult<()>;
41}