systemprompt_database/services/
provider.rs1use crate::error::DatabaseResult;
10use crate::models::{
11 DatabaseInfo, DatabaseTransaction, JsonRow, QueryResult, QuerySelector, ToDbValue,
12};
13use async_trait::async_trait;
14use std::sync::Arc;
15
16#[async_trait]
17pub trait DatabaseProvider: Send + Sync + std::fmt::Debug {
18 fn get_postgres_pool(&self) -> Arc<sqlx::PgPool>;
19
20 async fn execute(
21 &self,
22 query: &dyn QuerySelector,
23 params: &[&dyn ToDbValue],
24 ) -> DatabaseResult<u64>;
25
26 async fn execute_raw(&self, sql: &str) -> DatabaseResult<()>;
27
28 async fn fetch_all(
29 &self,
30 query: &dyn QuerySelector,
31 params: &[&dyn ToDbValue],
32 ) -> DatabaseResult<Vec<JsonRow>>;
33
34 async fn fetch_one(
35 &self,
36 query: &dyn QuerySelector,
37 params: &[&dyn ToDbValue],
38 ) -> DatabaseResult<JsonRow>;
39
40 async fn fetch_optional(
41 &self,
42 query: &dyn QuerySelector,
43 params: &[&dyn ToDbValue],
44 ) -> DatabaseResult<Option<JsonRow>>;
45
46
47 async fn begin_transaction(&self) -> DatabaseResult<Box<dyn DatabaseTransaction>>;
48
49 async fn get_database_info(&self) -> DatabaseResult<DatabaseInfo>;
50
51 async fn test_connection(&self) -> DatabaseResult<()>;
52
53 async fn execute_batch(&self, sql: &str) -> DatabaseResult<()>;
54
55 async fn query_raw(&self, query: &dyn QuerySelector) -> DatabaseResult<QueryResult>;
56
57 async fn query_raw_with(
58 &self,
59 query: &dyn QuerySelector,
60 params: &[&dyn ToDbValue],
61 ) -> DatabaseResult<QueryResult>;
62}