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