pub enum Expr {
Show 25 variants
Path(Path),
Shape(Box<ShapeExpr>),
BinOp(Box<BinOp>),
UnaryOp(Box<UnaryOp>),
FunctionCall(FunctionCall),
TypeCast(Box<TypeCast>),
IfElse(Box<IfElse>),
Literal(Literal),
Parameter(String),
Tuple(Vec<Expr>),
NamedTuple(Vec<(String, Expr)>),
Array(Vec<Expr>),
Set(Vec<Expr>),
SubQuery(Box<Stmt>),
Union(Box<Expr>, Box<Expr>),
Except(Box<Expr>, Box<Expr>),
Intersect(Box<Expr>, Box<Expr>),
Global(String),
Index {
expr: Box<Expr>,
index: Box<Expr>,
},
Slice {
expr: Box<Expr>,
lower: Option<Box<Expr>>,
upper: Option<Box<Expr>>,
},
FieldAccess {
expr: Box<Expr>,
field: String,
},
PathStepOn {
expr: Box<Expr>,
step: Box<PathStep>,
},
TupleIndex {
expr: Box<Expr>,
index: usize,
},
Detached(Box<Expr>),
TypeIs {
expr: Box<Expr>,
ty: TypeExpr,
},
}Variants§
Path(Path)
Shape(Box<ShapeExpr>)
BinOp(Box<BinOp>)
UnaryOp(Box<UnaryOp>)
FunctionCall(FunctionCall)
TypeCast(Box<TypeCast>)
IfElse(Box<IfElse>)
Literal(Literal)
Parameter(String)
Tuple(Vec<Expr>)
NamedTuple(Vec<(String, Expr)>)
Array(Vec<Expr>)
Set(Vec<Expr>)
A set literal: {1, 2, 'hello'}. Multiple values produce multiple rows.
SubQuery(Box<Stmt>)
A parenthesised statement used as an expression:
(INSERT ...), (UPDATE ...), (DELETE ...), (SELECT ...).
Union(Box<Expr>, Box<Expr>)
Binary set union: expr union expr — compiles to UNION ALL.
Except(Box<Expr>, Box<Expr>)
Binary set difference: expr except expr — rows in the left operand
not present in the right, compiled to EXCEPT.
Intersect(Box<Expr>, Box<Expr>)
Global(String)
A global variable reference: global name or global module::name.
Index
Index access: expr[i] (0-based).
Slice
Slice access: expr[lower:upper] (0-based, either bound may be absent).
FieldAccess
Named tuple field access on a non-path expression: (name := 'a', age := 1).name.
PathStepOn
A path step applied to something that is not itself a path — the
[is Individual] in (select Installation limit 1).provider[is Individual].staff, which is legal. .name on such a base is
already a FieldAccess; this carries the steps that have no
expression form of their own (a type intersection, a link property, a
backlink). The compiler rewrites a chain of these into an ordinary
Path rooted at a binding, so nothing downstream has to know about it.
TupleIndex
Positional tuple element on a non-path expression: (1, 3.14, 'red').2.
Detached(Box<Expr>)
detached expr — evaluate expr independently of the current implicit scope.
TypeIs
expr is TypeName — runtime type check; returns bool.
Trait Implementations§
impl StructuralPartialEq for Expr
Auto Trait Implementations§
impl Freeze for Expr
impl RefUnwindSafe for Expr
impl Send for Expr
impl Sync for Expr
impl Unpin for Expr
impl UnsafeUnpin for Expr
impl UnwindSafe for Expr
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.