sql_middleware/sqlite/worker/
connection.rs1use std::fmt;
2use std::sync::Arc;
3
4use deadpool::managed::ObjectId;
5use deadpool_sqlite::Object;
6use deadpool_sqlite::rusqlite;
7
8use crate::middleware::{ResultSet, SqlMiddlewareDbError};
9use crate::sqlite::prepared::SqlitePreparedStatement;
10
11use super::manager::SqliteWorker;
12
13#[derive(Clone)]
15pub struct SqliteConnection {
16 worker: Arc<SqliteWorker>,
17}
18
19impl SqliteConnection {
20 pub fn new(object: Object) -> Result<Self, SqlMiddlewareDbError> {
25 let worker = SqliteWorker::spawn(object)?;
26 Ok(Self {
27 worker: Arc::new(worker),
28 })
29 }
30
31 pub async fn execute_batch(&self, query: String) -> Result<(), SqlMiddlewareDbError> {
37 self.worker.execute_batch(query).await
38 }
39
40 pub async fn execute_select(
46 &self,
47 query: String,
48 params: Vec<rusqlite::types::Value>,
49 ) -> Result<ResultSet, SqlMiddlewareDbError> {
50 self.worker.execute_select(query, params).await
51 }
52
53 pub async fn execute_dml(
59 &self,
60 query: String,
61 params: Vec<rusqlite::types::Value>,
62 ) -> Result<usize, SqlMiddlewareDbError> {
63 self.worker.execute_dml(query, params).await
64 }
65
66 pub async fn with_connection<F, R>(&self, func: F) -> Result<R, SqlMiddlewareDbError>
72 where
73 F: FnOnce(&mut rusqlite::Connection) -> Result<R, SqlMiddlewareDbError> + Send + 'static,
74 R: Send + 'static,
75 {
76 self.worker.with_connection(func).await
77 }
78
79 pub async fn prepare_statement(
85 &self,
86 query: &str,
87 ) -> Result<SqlitePreparedStatement, SqlMiddlewareDbError> {
88 let query_arc = Arc::new(query.to_owned());
89 self.worker
90 .prepare_statement(Arc::clone(&query_arc))
91 .await?;
92 Ok(SqlitePreparedStatement::new(self.clone(), query_arc))
93 }
94
95 pub(crate) async fn execute_prepared_select(
101 &self,
102 query: Arc<String>,
103 params: Vec<rusqlite::types::Value>,
104 ) -> Result<ResultSet, SqlMiddlewareDbError> {
105 self.worker.execute_prepared_select(query, params).await
106 }
107
108 pub(crate) async fn execute_prepared_dml(
114 &self,
115 query: Arc<String>,
116 params: Vec<rusqlite::types::Value>,
117 ) -> Result<usize, SqlMiddlewareDbError> {
118 self.worker.execute_prepared_dml(query, params).await
119 }
120
121 fn object_id(&self) -> ObjectId {
122 self.worker.object_id()
123 }
124}
125
126impl fmt::Debug for SqliteConnection {
127 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
128 f.debug_struct("SqliteConnection")
129 .field("object_id", &self.object_id())
130 .finish()
131 }
132}