taitan_orm/database/sqlite/
database.rs

1use super::transaction::SqliteTransaction;
2use crate::brave_new_executor_impl;
3use taitan_orm_trait::result::CountResult;
4use crate::executors::SqlExecutor;
5use crate::executors::SqlGenericExecutor;
6use sqlx::SqlitePool;
7use sqlx::Sqlite;
8use taitan_orm_trait::result::Result;
9
10#[derive(Debug, Clone)]
11pub struct SqliteDatabase {
12    pub(crate) sqlite_pool: SqlitePool,
13}
14
15impl SqliteDatabase {
16    pub async fn transaction<'a>(&'a self) -> Result<SqliteTransaction<'a>> {
17        let trx = self.get_pool()?.begin().await?;
18        let transaction = SqliteTransaction::new(trx);
19        Ok(transaction)
20    }
21
22    pub fn get_pool(&self) -> Result<&SqlitePool> {
23        Ok(&self.sqlite_pool)
24    }
25}
26
27
28impl SqlGenericExecutor for SqliteDatabase {
29    type DB = Sqlite;
30    type CountType = CountResult;
31
32    fn get_affected_rows(query_result: &<Self::DB as sqlx::Database>::QueryResult) -> u64 {
33        query_result.rows_affected()
34    }
35}
36
37
38impl SqlExecutor<Sqlite> for SqliteDatabase {
39    brave_new_executor_impl!(sqlx::Sqlite);
40}