taitan_orm/database/postgres/
database.rs

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