pub enum ScalarExpr {
Show 27 variants
Star,
QualifiedStar(String),
Default,
Column(String),
Position(usize),
InternalColumn(InternalColumnRef),
QualifiedColumn {
qualifier: String,
column: String,
},
Literal(Value),
TypedLiteral {
value: Value,
ty: String,
bound_type: Option<ColumnType>,
parameter_index: Option<usize>,
},
Param(usize),
Func {
name: String,
binding: Option<FunctionBinding>,
args: Vec<Self>,
distinct: bool,
order_by: Vec<ScalarOrder>,
filter: Option<Box<Self>>,
},
Array(Vec<Self>),
Row(Vec<Self>),
Binary {
op: BinaryOp,
lhs: Box<Self>,
rhs: Box<Self>,
},
UnaryMinus(Box<Self>),
Not(Box<Self>),
And(Vec<Self>),
Or(Vec<Self>),
IsNull {
expr: Box<Self>,
negated: bool,
},
Between {
expr: Box<Self>,
low: Box<Self>,
high: Box<Self>,
},
InList {
expr: Box<Self>,
list: Vec<Self>,
negated: bool,
},
WindowCall {
name: String,
args: Vec<Self>,
spec: ScalarWindowSpec,
},
Case {
base: Option<Box<Self>>,
when: Vec<(Self, Self)>,
else_branch: Option<Box<Self>>,
},
Cast {
expr: Box<Self>,
ty: String,
},
ScalarSubquery(SubqueryId),
Exists {
subquery: SubqueryId,
negated: bool,
},
InSubquery {
expr: Box<Self>,
subquery: SubqueryId,
negated: bool,
},
}Variants§
Star
QualifiedStar(String)
Default
Column(String)
Position(usize)
Logical position in an already-bound physical row schema. This variant is introduced only after relational binding so duplicate SQL labels remain independently addressable.
InternalColumn(InternalColumnRef)
Structural executor-only attribute, resolved independently of SQL relation and column names.
QualifiedColumn
Literal(Value)
TypedLiteral
An already-coerced runtime datum whose declared type must survive lowering.
Fields
bound_type: Option<ColumnType>Resolved identity of an already-bound datum, including domain OIDs and type modifiers.
Param(usize)
Func
Array(Vec<Self>)
Row(Vec<Self>)
Binary
UnaryMinus(Box<Self>)
Not(Box<Self>)
And(Vec<Self>)
Or(Vec<Self>)
IsNull
Between
InList
WindowCall
Case
Cast
ScalarSubquery(SubqueryId)
Exists
InSubquery
Implementations§
Source§impl ScalarExpr
impl ScalarExpr
Sourcepub fn visit(&self, visitor: &mut impl FnMut(&Self))
pub fn visit(&self, visitor: &mut impl FnMut(&Self))
Visit this expression and every nested scalar expression in pre-order.
Sourcepub fn try_visit<E>(
&self,
visitor: &mut impl FnMut(&Self) -> Result<bool, E>,
) -> Result<(), E>
pub fn try_visit<E>( &self, visitor: &mut impl FnMut(&Self) -> Result<bool, E>, ) -> Result<(), E>
Visit in pre-order, skipping a subtree when the visitor returns false and stopping immediately on its first error.
Sourcepub fn collect_columns(&self, output: &mut BTreeSet<String>) -> bool
pub fn collect_columns(&self, output: &mut BTreeSet<String>) -> bool
Collect every column needed to evaluate this expression. Returns false when evaluation needs row shape or a relational child that a projected field scan cannot provide.
Sourcepub fn try_visit_columns<'a, E>(
&'a self,
visitor: &mut impl FnMut(&'a str) -> Result<(), E>,
) -> Result<bool, E>
pub fn try_visit_columns<'a, E>( &'a self, visitor: &mut impl FnMut(&'a str) -> Result<(), E>, ) -> Result<bool, E>
Borrow referenced column names in evaluation-tree order, stopping at the first visitor failure or unprojectable expression. Qualified references yield their column component, matching collect_columns; repeated references remain visible to the visitor. No name or result container is allocated by this traversal.
pub fn contains_window(&self) -> bool
pub fn contains_subquery(&self) -> bool
pub fn contains_parameter(&self) -> bool
pub fn contains_aggregate(&self, is_aggregate: &dyn Fn(&str) -> bool) -> bool
Source§impl ScalarExpr
impl ScalarExpr
Trait Implementations§
Source§impl Clone for ScalarExpr
impl Clone for ScalarExpr
Source§impl Debug for ScalarExpr
impl Debug for ScalarExpr
Source§impl<'de> Deserialize<'de> for ScalarExpr
impl<'de> Deserialize<'de> for ScalarExpr
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>,
Source§impl PartialEq for ScalarExpr
impl PartialEq for ScalarExpr
Source§impl Serialize for ScalarExpr
impl Serialize for ScalarExpr
impl StructuralPartialEq for ScalarExpr
Auto Trait Implementations§
impl Freeze for ScalarExpr
impl RefUnwindSafe for ScalarExpr
impl Send for ScalarExpr
impl Sync for ScalarExpr
impl Unpin for ScalarExpr
impl UnsafeUnpin for ScalarExpr
impl UnwindSafe for ScalarExpr
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<T> ErasedDestructor for Twhere
T: 'static,
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> ⓘ
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> ⓘ
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