Skip to main content

ScalarExpr

Enum ScalarExpr 

Source
pub enum ScalarExpr {
Show 28 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>, order_syntax: FunctionOrderSyntax, filter: Option<Box<Self>>, }, Array(Vec<Self>), Row(Vec<Self>), CompositeRow { items: Vec<Self>, binding: CompositeRowBinding, bound_type: Option<ColumnType>, }, 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, filter: Option<Box<Self>>, modifiers: WindowCallModifiers, }, Case { base: Option<Box<Self>>, when: Vec<(Self, Self)>, else_branch: Option<Box<Self>>, }, Cast { implicit: bool, 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

Fields

§qualifier: String
§column: String
§

Literal(Value)

§

TypedLiteral

An already-coerced runtime datum whose declared type must survive lowering.

Fields

§value: Value
§bound_type: Option<ColumnType>

Resolved identity of an already-bound datum, including domain OIDs and type modifiers.

§parameter_index: Option<usize>

Original SQL parameter slot when specialization replaces a bare parameter.

§

Param(usize)

§

Func

Fields

§name: String
§args: Vec<Self>
§distinct: bool
§order_by: Vec<ScalarOrder>
§order_syntax: FunctionOrderSyntax
§filter: Option<Box<Self>>
§

Array(Vec<Self>)

§

Row(Vec<Self>)

§

CompositeRow

Fields

§items: Vec<Self>
§bound_type: Option<ColumnType>

Resolved result identity for physical inference without catalog callbacks.

§

Binary

Fields

§lhs: Box<Self>
§rhs: Box<Self>
§

UnaryMinus(Box<Self>)

§

Not(Box<Self>)

§

And(Vec<Self>)

§

Or(Vec<Self>)

§

IsNull

Fields

§expr: Box<Self>
§negated: bool
§

Between

Fields

§expr: Box<Self>
§low: Box<Self>
§high: Box<Self>
§

InList

Fields

§expr: Box<Self>
§list: Vec<Self>
§negated: bool
§

WindowCall

A window function call; filter is an aggregate’s FILTER (WHERE ...) condition.

Fields

§name: String
§args: Vec<Self>
§filter: Option<Box<Self>>
§

Case

Fields

§base: Option<Box<Self>>
§when: Vec<(Self, Self)>
§else_branch: Option<Box<Self>>
§

Cast

Fields

§implicit: bool

Analysis introduced this coercion rather than retaining an explicit SQL cast. Stored definitions must distinguish array coercions from explicit constructor conversions.

§expr: Box<Self>
§

ScalarSubquery(SubqueryId)

§

Exists

Fields

§subquery: SubqueryId
§negated: bool
§

InSubquery

Fields

§expr: Box<Self>
§subquery: SubqueryId
§negated: bool

Implementations§

Source§

impl ScalarExpr

Source

pub fn visit(&self, visitor: &mut impl FnMut(&Self))

Visit this expression and every nested scalar expression in pre-order.

Source

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.

Source

pub fn visit_mut(&mut self, visitor: &mut impl FnMut(&mut Self))

Visit this expression and every nested scalar expression mutably in pre-order: a node is visited before its children, so the children of a node the visitor replaces are those of the replacement.

Source

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.

Source

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.

Source

pub fn contains_window(&self) -> bool

Source

pub fn contains_subquery(&self) -> bool

Source

pub fn contains_parameter(&self) -> bool

Source

pub fn contains_aggregate(&self, is_aggregate: &dyn Fn(&str) -> bool) -> bool

Source§

impl ScalarExpr

Source

pub fn qualified_column( qualifier: impl Into<String>, column: impl Into<String>, ) -> Self

Source§

impl ScalarExpr

Source

pub fn clone_with_control( &self, control: &ProductionControl<'_>, ) -> Result<Produced<Self>, CatalogRetentionError>

Copy a scalar tree, admitting every destination allocation before creating it and retaining the complete reservation. Subquery identities still refer to the enclosing plan’s query arena.

Trait Implementations§

Source§

impl Clone for ScalarExpr

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ScalarExpr

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ScalarExpr

Source§

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 ScalarExpr

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for ScalarExpr

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for ScalarExpr

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.