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