taitan_orm/database/postgres/
transaction.rs1
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}