pub enum ResolvedExpr {
Show 18 variants
Variable(VarId),
Literal(LiteralValue),
Property {
expr: Box<ResolvedExpr>,
property: String,
},
Binary {
lhs: Box<ResolvedExpr>,
op: BinaryOp,
rhs: Box<ResolvedExpr>,
},
Unary {
op: UnaryOp,
expr: Box<ResolvedExpr>,
},
Function {
function: FunctionId,
distinct: bool,
args: Vec<ResolvedExpr>,
},
List(Vec<ResolvedExpr>),
Map(Vec<(String, ResolvedExpr)>),
Case {
input: Option<Box<ResolvedExpr>>,
alternatives: Vec<(ResolvedExpr, ResolvedExpr)>,
else_expr: Option<Box<ResolvedExpr>>,
},
Parameter(String),
ListPredicate {
kind: ListPredicateKind,
variable: VarId,
list: Box<ResolvedExpr>,
predicate: Box<ResolvedExpr>,
},
ListComprehension {
variable: VarId,
list: Box<ResolvedExpr>,
filter: Option<Box<ResolvedExpr>>,
map_expr: Option<Box<ResolvedExpr>>,
},
Reduce {
accumulator: VarId,
init: Box<ResolvedExpr>,
variable: VarId,
list: Box<ResolvedExpr>,
expr: Box<ResolvedExpr>,
},
MapProjection {
base: Box<ResolvedExpr>,
selectors: Vec<ResolvedMapSelector>,
},
Index {
expr: Box<ResolvedExpr>,
index: Box<ResolvedExpr>,
},
Slice {
expr: Box<ResolvedExpr>,
from: Option<Box<ResolvedExpr>>,
to: Option<Box<ResolvedExpr>>,
},
ExistsSubquery {
pattern: ResolvedPattern,
where_: Option<Box<ResolvedExpr>>,
reads: Vec<VarId>,
},
PatternComprehension {
pattern: ResolvedPattern,
where_: Option<Box<ResolvedExpr>>,
map_expr: Box<ResolvedExpr>,
reads: Vec<VarId>,
},
}Variants§
Variable(VarId)
Literal(LiteralValue)
Property
Binary
Unary
Function
List(Vec<ResolvedExpr>)
Map(Vec<(String, ResolvedExpr)>)
Case
Fields
§
input: Option<Box<ResolvedExpr>>§
alternatives: Vec<(ResolvedExpr, ResolvedExpr)>§
else_expr: Option<Box<ResolvedExpr>>Parameter(String)
ListPredicate
ListComprehension
Fields
§
list: Box<ResolvedExpr>§
filter: Option<Box<ResolvedExpr>>§
map_expr: Option<Box<ResolvedExpr>>Reduce
MapProjection
Index
Slice
ExistsSubquery
Fields
§
pattern: ResolvedPattern§
where_: Option<Box<ResolvedExpr>>§
reads: Vec<VarId>Every variable the pattern and WHERE use (see
ResolvedExpr::collect_vars), sorted: the outer bindings the
subquery can read, computed once so evaluation need not walk it.
PatternComprehension
Fields
§
pattern: ResolvedPattern§
where_: Option<Box<ResolvedExpr>>§
map_expr: Box<ResolvedExpr>§
reads: Vec<VarId>Every variable the pattern, WHERE and projection use, as for
ResolvedExpr::ExistsSubquery.
Implementations§
Source§impl ResolvedExpr
impl ResolvedExpr
Sourcepub fn collect_vars(&self, out: &mut BTreeSet<VarId>)
pub fn collect_vars(&self, out: &mut BTreeSet<VarId>)
Every variable the expression reads. Patterns inside it (EXISTS,
pattern comprehensions) contribute the outer variables they name and
their own fresh ones: an over-approximation, which is safe for every
caller (it only ever keeps a predicate in place, or a binding in a
row).
Trait Implementations§
Source§impl Clone for ResolvedExpr
impl Clone for ResolvedExpr
Auto Trait Implementations§
impl Freeze for ResolvedExpr
impl RefUnwindSafe for ResolvedExpr
impl Send for ResolvedExpr
impl Sync for ResolvedExpr
impl Unpin for ResolvedExpr
impl UnsafeUnpin for ResolvedExpr
impl UnwindSafe for ResolvedExpr
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