Skip to main content

DistinctOnIterator

Struct DistinctOnIterator 

Source
pub struct DistinctOnIterator<I: RowIterator> { /* private fields */ }
Expand description

Iterator that implements SELECT DISTINCT ON (expr, ...).

The input is first sorted by the complete effective sort specification the planner synthesized (ON keys, user ORDER BY tail, and an all-column tie-breaker; see docs/sql-distinct-on.md D2-D4). Sorting reuses SortIterator, so spill runs are merged under the same full comparator and determinism survives external sorting. The iterator then emits only the first row of each group whose leading key_count sort keys compare equal; NULL keys compare equal to NULL (D5).

Implementations§

Source§

impl<I: RowIterator> DistinctOnIterator<I>

Source

pub fn new( input: I, order_by: &[SortExpr], key_count: usize, policy: Option<MemoryPolicy>, ) -> Result<Self>

Creates a new DISTINCT ON iterator.

order_by is the complete effective sort specification whose leading key_count entries form the distinctness key.

§Errors

Returns an error if sorting the input fails.

Trait Implementations§

Source§

impl<I: RowIterator> RowIterator for DistinctOnIterator<I>

Source§

fn next_row(&mut self) -> Option<Result<Row>>

Advances the iterator and returns the next row, or None if exhausted. Read more
Source§

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

Returns the schema of rows produced by this iterator.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
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, <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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more