use selene_core::DbString;
use crate::{
GqlType, NullsPolicy, OrderDirection, SourceSpan, ValueExpr,
analyze::{AnalyzedType, BindingId, ExprId},
};
use super::OrderAccess;
#[derive(Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum LimitAmount {
Literal(u64),
Parameter {
name: DbString,
declared_type: Option<GqlType>,
span: SourceSpan,
},
}
#[derive(Clone, Debug, PartialEq)]
pub struct FilterPredicate {
pub expr: ValueExpr,
pub expr_id: ExprId,
pub ty: AnalyzedType,
pub binding_refs: Vec<BindingId>,
pub kind: FilterPredicateKind,
pub index_consumed: bool,
pub span: SourceSpan,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum FilterPredicateKind {
Expression,
PropertyEquals {
binding: Option<BindingId>,
key: DbString,
},
}
#[derive(Clone, Debug, PartialEq)]
pub struct ProjectExpr {
pub expr: ValueExpr,
pub expr_id: ExprId,
pub ty: AnalyzedType,
pub declared_type: Option<GqlType>,
pub alias: Option<DbString>,
pub binding_refs: Vec<BindingId>,
pub span: SourceSpan,
}
#[derive(Clone, Debug, PartialEq)]
pub struct OrderKey {
pub expr: ValueExpr,
pub expr_id: ExprId,
pub ty: AnalyzedType,
pub direction: OrderDirection,
pub nulls: Option<NullsPolicy>,
pub binding_refs: Vec<BindingId>,
pub access: Option<OrderAccess>,
pub span: SourceSpan,
}
#[derive(Clone, Debug, PartialEq)]
pub struct Aggregate {
pub aggregate_id: ExprId,
pub output_name: DbString,
pub function: DbString,
pub args: Vec<AggregateArg>,
pub star: bool,
pub distinct: bool,
pub ty: AnalyzedType,
pub span: SourceSpan,
}
#[derive(Clone, Debug, PartialEq)]
pub struct AggregateArg {
pub expr: ValueExpr,
pub expr_id: ExprId,
pub ty: AnalyzedType,
}