distinct support in sea-orm (#902)
* distinct support * remove feature flag * fix argument
This commit is contained in:
parent
597f515c07
commit
ba5a83d3a8
@ -8,6 +8,8 @@ use sea_query::{
|
|||||||
};
|
};
|
||||||
pub use sea_query::{Condition, ConditionalStatement, DynIden, JoinType, Order, OrderedStatement};
|
pub use sea_query::{Condition, ConditionalStatement, DynIden, JoinType, Order, OrderedStatement};
|
||||||
|
|
||||||
|
use sea_query::IntoColumnRef;
|
||||||
|
|
||||||
// LINT: when the column does not appear in tables selected from
|
// LINT: when the column does not appear in tables selected from
|
||||||
// LINT: when there is a group by clause, but some columns don't have aggregate functions
|
// LINT: when there is a group by clause, but some columns don't have aggregate functions
|
||||||
// LINT: when the join table or column does not exists
|
// LINT: when the join table or column does not exists
|
||||||
@ -172,6 +174,61 @@ pub trait QuerySelect: Sized {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add a DISTINCT expression
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend};
|
||||||
|
/// struct Input {
|
||||||
|
/// name: Option<String>,
|
||||||
|
/// }
|
||||||
|
/// let input = Input {
|
||||||
|
/// name: Some("cheese".to_owned()),
|
||||||
|
/// };
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(
|
||||||
|
/// Condition::all().add_option(input.name.map(|n| cake::Column::Name.contains(&n)))
|
||||||
|
/// )
|
||||||
|
/// .distinct()
|
||||||
|
/// .build(DbBackend::MySql)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT DISTINCT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE '%cheese%'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
fn distinct(mut self) -> Self {
|
||||||
|
self.query().distinct();
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Add a DISTINCT ON expression
|
||||||
|
/// NOTE: this function is only supported by `sqlx-postgres`
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend};
|
||||||
|
/// struct Input {
|
||||||
|
/// name: Option<String>,
|
||||||
|
/// }
|
||||||
|
/// let input = Input {
|
||||||
|
/// name: Some("cheese".to_owned()),
|
||||||
|
/// };
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(
|
||||||
|
/// Condition::all().add_option(input.name.map(|n| cake::Column::Name.contains(&n)))
|
||||||
|
/// )
|
||||||
|
/// .distinct_on([cake::Column::Name])
|
||||||
|
/// .build(DbBackend::Postgres)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT DISTINCT ON (\"name\") \"cake\".\"id\", \"cake\".\"name\" FROM \"cake\" WHERE \"cake\".\"name\" LIKE '%cheese%'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
fn distinct_on<T, I>(mut self, cols: I) -> Self
|
||||||
|
where
|
||||||
|
T: IntoColumnRef,
|
||||||
|
I: IntoIterator<Item = T>,
|
||||||
|
{
|
||||||
|
self.query().distinct_on(cols);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
fn join_join(mut self, join: JoinType, rel: RelationDef, via: Option<RelationDef>) -> Self {
|
fn join_join(mut self, join: JoinType, rel: RelationDef, via: Option<RelationDef>) -> Self {
|
||||||
if let Some(via) = via {
|
if let Some(via) = via {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user