add into_model()
for Statement
This commit is contained in:
parent
38a4d3a810
commit
9107c9010a
@ -1,4 +1,4 @@
|
||||
use crate::DbBackend;
|
||||
use crate::{DbBackend, FromQueryResult, SelectModel, SelectorRaw};
|
||||
use sea_query::{inject_parameters, MysqlQueryBuilder, PostgresQueryBuilder, SqliteQueryBuilder};
|
||||
pub use sea_query::{Value, Values};
|
||||
use std::fmt;
|
||||
@ -43,6 +43,75 @@ impl Statement {
|
||||
db_backend,
|
||||
}
|
||||
}
|
||||
|
||||
/// ```
|
||||
/// # #[cfg(feature = "mock")]
|
||||
/// # use sea_orm::{error::*, tests_cfg::*, MockDatabase, Transaction, DbBackend};
|
||||
/// #
|
||||
/// # let db = MockDatabase::new(DbBackend::Postgres)
|
||||
/// # .append_query_results(vec![vec![
|
||||
/// # maplit::btreemap! {
|
||||
/// # "name" => Into::<Value>::into("Chocolate Forest"),
|
||||
/// # "num_of_cakes" => Into::<Value>::into(1),
|
||||
/// # },
|
||||
/// # maplit::btreemap! {
|
||||
/// # "name" => Into::<Value>::into("New York Cheese"),
|
||||
/// # "num_of_cakes" => Into::<Value>::into(1),
|
||||
/// # },
|
||||
/// # ]])
|
||||
/// # .into_connection();
|
||||
/// #
|
||||
/// use sea_orm::{entity::*, query::*, tests_cfg::cake, FromQueryResult};
|
||||
///
|
||||
/// #[derive(Debug, PartialEq, FromQueryResult)]
|
||||
/// struct SelectResult {
|
||||
/// name: String,
|
||||
/// num_of_cakes: i32,
|
||||
/// }
|
||||
///
|
||||
/// # let _: Result<(), DbErr> = smol::block_on(async {
|
||||
/// #
|
||||
/// let res: Vec<SelectResult> = Statement::from_sql_and_values(
|
||||
/// DbBackend::Postgres,
|
||||
/// r#"SELECT "cake"."name", count("cake"."id") AS "num_of_cakes" FROM "cake""#,
|
||||
/// vec![],
|
||||
/// )
|
||||
/// .into_model::<SelectResult>()
|
||||
/// .all(&db)
|
||||
/// .await?;
|
||||
///
|
||||
/// assert_eq!(
|
||||
/// res,
|
||||
/// vec![
|
||||
/// SelectResult {
|
||||
/// name: "Chocolate Forest".to_owned(),
|
||||
/// num_of_cakes: 1,
|
||||
/// },
|
||||
/// SelectResult {
|
||||
/// name: "New York Cheese".to_owned(),
|
||||
/// num_of_cakes: 1,
|
||||
/// },
|
||||
/// ]
|
||||
/// );
|
||||
/// #
|
||||
/// # Ok(())
|
||||
/// # });
|
||||
///
|
||||
/// assert_eq!(
|
||||
/// db.into_transaction_log(),
|
||||
/// vec![Transaction::from_sql_and_values(
|
||||
/// DbBackend::Postgres,
|
||||
/// r#"SELECT "cake"."name", count("cake"."id") AS "num_of_cakes" FROM "cake""#,
|
||||
/// vec![]
|
||||
/// ),]
|
||||
/// );
|
||||
/// ```
|
||||
pub fn into_model<M>(self) -> SelectorRaw<SelectModel<M>>
|
||||
where
|
||||
M: FromQueryResult,
|
||||
{
|
||||
SelectorRaw::<SelectModel<M>>::from_statement(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Statement {
|
||||
|
@ -263,6 +263,20 @@ impl<S> SelectorRaw<S>
|
||||
where
|
||||
S: SelectorTrait,
|
||||
{
|
||||
// Create `SelectorRaw` from Statment. Executing this `SelectorRaw` will
|
||||
// return a type `M` which implement `FromQueryResult`.
|
||||
//
|
||||
// Helper function used by `Statment.into_model()`
|
||||
pub(crate) fn from_statement<M>(stmt: Statement) -> SelectorRaw<SelectModel<M>>
|
||||
where
|
||||
M: FromQueryResult,
|
||||
{
|
||||
SelectorRaw {
|
||||
stmt,
|
||||
selector: SelectModel { model: PhantomData },
|
||||
}
|
||||
}
|
||||
|
||||
/// ```
|
||||
/// # #[cfg(feature = "mock")]
|
||||
/// # use sea_orm::{error::*, tests_cfg::*, MockDatabase, Transaction, DbBackend};
|
||||
|
Loading…
x
Reference in New Issue
Block a user