taitan_orm/database/postgres/
transaction.rs

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