taitan_orm/database/mysql/
database.rs1use 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}