from_raw_sql example

This commit is contained in:
Chris Tsang 2021-07-17 23:56:32 +08:00
parent 2dc8401c53
commit 25432e68d0
3 changed files with 57 additions and 4 deletions

View File

@ -1,6 +1,6 @@
use crate::DbBackend; use crate::DbBackend;
use sea_query::{ use sea_query::{
inject_parameters, MysqlQueryBuilder, PostgresQueryBuilder, SqliteQueryBuilder, Values, inject_parameters, MysqlQueryBuilder, PostgresQueryBuilder, SqliteQueryBuilder, Value, Values
}; };
use std::fmt; use std::fmt;
@ -24,7 +24,17 @@ impl Statement {
} }
} }
pub fn from_string_values_tuple( pub fn from_sql_and_values<I>(db_backend: DbBackend, sql: &str, values: I) -> Self
where
I: IntoIterator<Item = Value>,
{
Self::from_string_values_tuple(
db_backend,
(sql.to_owned(), Values(values.into_iter().collect())),
)
}
pub(crate) fn from_string_values_tuple(
db_backend: DbBackend, db_backend: DbBackend,
stmt: (String, Values), stmt: (String, Values),
) -> Statement { ) -> Statement {

View File

@ -76,7 +76,50 @@ impl<E> Select<E>
where where
E: EntityTrait, E: EntityTrait,
{ {
pub fn from_raw_sql(stmt: Statement) -> SelectorRaw<SelectModel<E::Model>> { /// ```
/// # #[cfg(feature = "mock")]
/// # use sea_orm::{error::*, tests_cfg::*, MockDatabase, Transaction, DbBackend};
/// #
/// # let db = MockDatabase::new(DbBackend::Postgres)
/// # .append_query_results(vec![
/// # vec![
/// # cake::Model {
/// # id: 1,
/// # name: "New York Cheese".to_owned(),
/// # },
/// # ],
/// # ])
/// # .into_connection();
/// #
/// use sea_orm::{entity::*, query::*, tests_cfg::cake};
///
/// # let _: Result<(), DbErr> = async_std::task::block_on(async {
/// #
/// assert_eq!(
/// cake::Entity::find().from_raw_sql(
/// Statement::from_sql_and_values(
/// DbBackend::Postgres, r#"SELECT "cake"."id", "cake"."name" FROM "cake""#, vec![]
/// )
/// ).one(&db).await?,
/// Some(cake::Model {
/// id: 1,
/// name: "New York Cheese".to_owned(),
/// })
/// );
/// #
/// # Ok(())
/// # });
///
/// assert_eq!(
/// db.into_transaction_log(),
/// vec![
/// Transaction::from_sql_and_values(
/// DbBackend::Postgres, r#"SELECT "cake"."id", "cake"."name" FROM "cake""#, vec![]
/// ),
/// ]);
/// ```
#[allow(clippy::wrong_self_convention)]
pub fn from_raw_sql(self, stmt: Statement) -> SelectorRaw<SelectModel<E::Model>> {
SelectorRaw { SelectorRaw {
stmt, stmt,
selector: SelectModel { model: PhantomData }, selector: SelectModel { model: PhantomData },

View File

@ -20,4 +20,4 @@ pub use select::*;
pub use traits::*; pub use traits::*;
pub use update::*; pub use update::*;
pub use crate::executor::{InsertResult, UpdateResult}; pub use crate::{Statement, InsertResult, UpdateResult};