sqlorm_core/
lib.rs

1#![cfg(any(feature = "postgres", feature = "sqlite"))]
2
3mod consts;
4pub mod qb;
5mod selectable;
6pub use consts::*;
7use sqlx::Acquire;
8mod sb;
9
10pub use crate::qb::TableInfo;
11use crate::selectable::Selectable;
12pub use async_trait::async_trait;
13pub use qb::Column;
14pub use qb::Condition;
15pub use qb::*;
16mod traits;
17
18#[cfg(any(feature = "postgres", feature = "sqlite"))]
19pub use driver::{Connection, Driver, Pool, Row};
20
21pub use sb::SB;
22use sqlx::FromRow;
23pub use traits::FromAliasedRow;
24pub use traits::GenericExecutor;
25pub use traits::StatementExecutor;
26pub use traits::Table;
27
28#[async_trait]
29impl<T> GenericExecutor<T> for QB<T>
30where
31    T: for<'r> FromRow<'r, Row> + Send + Unpin + std::fmt::Debug,
32{
33    async fn fetch_one_as<'a, A: Send + Acquire<'a, Database = Driver>>(
34        mut self,
35        acquirer: A,
36    ) -> sqlx::Result<T> {
37        let mut conn = acquirer.acquire().await?;
38        self.eager.clear();
39        self.batch.clear();
40        let row = self.build_query().build().fetch_one(&mut *conn).await?;
41        T::from_row(&row)
42    }
43
44    async fn fetch_all_as<'a, A: Send + Acquire<'a, Database = Driver>>(
45        mut self,
46        acquirer: A,
47    ) -> sqlx::Result<Vec<T>> {
48        let mut conn = acquirer.acquire().await?;
49        let rows = self.build_query().build().fetch_all(&mut *conn).await?;
50        rows.iter().map(T::from_row).collect()
51    }
52}
53
54pub mod driver {
55    #[cfg(all(feature = "postgres", feature = "sqlite"))]
56    compile_error!(
57        "only one database driver can be set – please enable either 'postgres' or 'sqlite' feature, not both"
58    );
59
60    #[cfg(feature = "postgres")]
61    /// Sqlorm Database Driver
62    pub type Driver = sqlx::Postgres;
63
64    #[cfg(feature = "postgres")]
65    /// Sqlorm Database Pool
66    pub type Pool = sqlx::PgPool;
67
68    #[cfg(feature = "postgres")]
69    /// Sqlorm Database Connection
70    pub type Connection = sqlx::PgConnection;
71
72    #[cfg(feature = "postgres")]
73    /// Sqlorm Database Row
74    pub type Row = sqlx::postgres::PgRow;
75
76    #[cfg(feature = "sqlite")]
77    /// Sqlorm Database Driver
78    pub type Driver = sqlx::Sqlite;
79
80    #[cfg(feature = "sqlite")]
81    /// Sqlorm Database Pool
82    pub type Pool = sqlx::SqlitePool;
83
84    #[cfg(feature = "sqlite")]
85    /// Sqlorm Database Connection
86    pub type Connection = sqlx::SqliteConnection;
87
88    #[cfg(feature = "sqlite")]
89    /// Sqlorm Database Row
90    pub type Row = sqlx::sqlite::SqliteRow;
91}
92
93#[doc(hidden)]
94pub use sqlx;