taitan_orm/database/mysql/
database.rs

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