sqlorm_core/
lib.rs

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