#[non_exhaustive]pub enum HavingClause {
Aggregate {
aggregate: String,
operator: WhereOperator,
value: Value,
},
And(Vec<HavingClause>),
Or(Vec<HavingClause>),
Not(Box<HavingClause>),
}Expand description
HAVING clause abstract syntax tree.
HAVING filters aggregated results after GROUP BY, while WHERE filters rows before aggregation.
§Example
use fraiseql_db::{HavingClause, WhereOperator};
use serde_json::json;
// Simple condition: COUNT(*) > 10
let having_clause = HavingClause::Aggregate {
aggregate: "count".to_string(),
operator: WhereOperator::Gt,
value: json!(10),
};
// Complex condition: (COUNT(*) > 10) AND (SUM(revenue) >= 1000)
let having_clause = HavingClause::And(vec![
HavingClause::Aggregate {
aggregate: "count".to_string(),
operator: WhereOperator::Gt,
value: json!(10),
},
HavingClause::Aggregate {
aggregate: "revenue_sum".to_string(),
operator: WhereOperator::Gte,
value: json!(1000),
},
]);Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Aggregate
Aggregate field condition (e.g., count_gt, revenue_sum_gte).
Fields
§
operator: WhereOperatorComparison operator.
And(Vec<HavingClause>)
Logical AND of multiple conditions.
Or(Vec<HavingClause>)
Logical OR of multiple conditions.
Not(Box<HavingClause>)
Logical NOT of a condition.
Implementations§
Trait Implementations§
Source§impl Clone for HavingClause
impl Clone for HavingClause
Source§fn clone(&self) -> HavingClause
fn clone(&self) -> HavingClause
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for HavingClause
impl Debug for HavingClause
Source§impl<'de> Deserialize<'de> for HavingClause
impl<'de> Deserialize<'de> for HavingClause
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl PartialEq for HavingClause
impl PartialEq for HavingClause
Source§impl Serialize for HavingClause
impl Serialize for HavingClause
impl StructuralPartialEq for HavingClause
Auto Trait Implementations§
impl Freeze for HavingClause
impl RefUnwindSafe for HavingClause
impl Send for HavingClause
impl Sync for HavingClause
impl Unpin for HavingClause
impl UnsafeUnpin for HavingClause
impl UnwindSafe for HavingClause
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more