Skip to main content

ColumnSelection

Struct ColumnSelection 

Source
pub struct ColumnSelection<'a> { /* private fields */ }
Expand description

Select already-computed columns without evaluating expressions again.

This is intentionally distinct from crate::Project: SQL ORDER BY may reference both source columns and SELECT aliases, so the expression projection first appends aliases, Sort consumes that augmented row, and ColumnSelection removes the non-output source columns afterwards. Volatile projection expressions are therefore evaluated exactly once.

Implementations§

Source§

impl<'a> ColumnSelection<'a>

Source

pub fn new(child: Box<dyn PhysicalOperator + 'a>, columns: Vec<String>) -> Self

Source

pub fn with_mapping( child: Box<dyn PhysicalOperator + 'a>, columns: Vec<(String, String)>, ) -> Self

Source

pub fn with_positions( child: Box<dyn PhysicalOperator + 'a>, columns: Vec<(String, usize)>, ) -> Self

Select and rename logical input positions without resolving them by name. SQL result shaping uses this when repeated public labels must remain distinct even though their qualified input names differ.

Source

pub fn with_identities( child: Box<dyn PhysicalOperator + 'a>, columns: Vec<(String, ColumnIdentity, usize)>, ) -> Self

Select logical input positions and assign explicit structured SQL identities without encoding qualifiers into output labels.

Source

pub fn compacting_with_positions( child: Box<dyn PhysicalOperator + 'a>, columns: Vec<(String, usize)>, ) -> Self

Select logical input positions and compact them to one canonical positional layout. Use this only at an explicit state boundary, such as recursive working-table materialization, where independently planned inputs must share an identical physical schema.

Source

pub fn rebinding_lock_origins(self, qualifier: impl Into<String>) -> Self

Attribute inner lock origins to this source qualifier so FOR UPDATE OF a view, CTE, or subquery does not lock sibling join inputs.

Source

pub fn discarding_lock_origins(self) -> Self

Remove row-lock identities at a relational row-identity barrier.

Trait Implementations§

Source§

impl PhysicalOperator for ColumnSelection<'_>

Source§

fn row_schema(&self) -> &RowSchema

Complete logical-to-physical row layout emitted by this operator. Every Batch returned by Self::next must carry this exact schema; operators must reject a child that violates that invariant.
Source§

fn estimated_cardinality(&self) -> Option<u64>

Planner/runtime cardinality estimate for choosing physical strategies. None means the operator cannot provide a useful estimate. The value is advisory rather than a correctness bound.
Source§

fn output_ordering(&self) -> &[PhysicalOrder]

Leading output ordering known to be preserved by this operator.
Source§

fn open(&mut self) -> ExecResult<()>

Source§

fn next(&mut self) -> ExecResult<Option<Batch>>

Source§

fn close(&mut self) -> ExecResult<()>

Source§

fn schema(&self) -> &[String]

Schema column names in logical output order.
Source§

fn consume_into_aggregate( &mut self, _executor: &mut dyn AggregateExecutor, ) -> ExecResult<bool>

Let a leaf consume its native projected rows directly into an aggregate executor. Returning false promises that no input was consumed, so the caller can fall back to ordinary Batch pulls.

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for ColumnSelection<'a>

§

impl<'a> !Sync for ColumnSelection<'a>

§

impl<'a> !UnwindSafe for ColumnSelection<'a>

§

impl<'a> Freeze for ColumnSelection<'a>

§

impl<'a> Send for ColumnSelection<'a>

§

impl<'a> Unpin for ColumnSelection<'a>

§

impl<'a> UnsafeUnpin for ColumnSelection<'a>

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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.