pub trait RowSource: Send {
// Required methods
fn schema(&self) -> &[String];
fn next_row(&mut self) -> ExecResult<Option<ResultRow>>;
// Provided methods
fn physical_schema(&self) -> Option<&RowSchema> { ... }
fn estimated_cardinality(&self) -> Option<u64> { ... }
fn output_ordering(&self) -> &[PhysicalOrder] { ... }
fn next_batch(&mut self, max_rows: usize) -> ExecResult<Vec<ResultRow>> { ... }
fn next_physical_batch(
&mut self,
max_rows: usize,
) -> ExecResult<Vec<PhysicalRow>> { ... }
fn consume_into_aggregate(
&mut self,
_executor: &mut dyn AggregateExecutor,
) -> ExecResult<bool> { ... }
}Expand description
Source of rows feeding a TableScan. Implementors typically own
a snapshot of the underlying table or external relation; the scan
operator holds the source as a boxed trait object so callers can
mix and match implementations across one query.
Required Methods§
Sourcefn schema(&self) -> &[String]
fn schema(&self) -> &[String]
Stable column order for the rows produced by Self::next_row.
Sourcefn next_row(&mut self) -> ExecResult<Option<ResultRow>>
fn next_row(&mut self) -> ExecResult<Option<ResultRow>>
Pull the next row. Returns None when the source is exhausted.
Provided Methods§
Sourcefn physical_schema(&self) -> Option<&RowSchema>
fn physical_schema(&self) -> Option<&RowSchema>
Optional non-identity schema used by positional sources. This carries hidden lookup aliases and slot remaps that cannot be represented by the legacy column-name slice.
Sourcefn estimated_cardinality(&self) -> Option<u64>
fn estimated_cardinality(&self) -> Option<u64>
Estimated total rows available from this source.
Sourcefn output_ordering(&self) -> &[PhysicalOrder]
fn output_ordering(&self) -> &[PhysicalOrder]
Leading row order guaranteed by the source.
Sourcefn next_batch(&mut self, max_rows: usize) -> ExecResult<Vec<ResultRow>>
fn next_batch(&mut self, max_rows: usize) -> ExecResult<Vec<ResultRow>>
Pull up to max_rows without forcing batch-capable sources through a
row-at-a-time lock or backend call. The default preserves compatibility
for iterator-like sources.
Sourcefn next_physical_batch(
&mut self,
max_rows: usize,
) -> ExecResult<Vec<PhysicalRow>>
fn next_physical_batch( &mut self, max_rows: usize, ) -> ExecResult<Vec<PhysicalRow>>
Pull a positional batch directly. Backend-native sources override this to avoid constructing named maps at the scan boundary; compatibility sources are converted exactly once here.
Sourcefn consume_into_aggregate(
&mut self,
_executor: &mut dyn AggregateExecutor,
) -> ExecResult<bool>
fn consume_into_aggregate( &mut self, _executor: &mut dyn AggregateExecutor, ) -> ExecResult<bool>
Feed backend-native projected rows directly to an aggregate. Sources
that cannot preserve their normal filter and virtual-column semantics
return false without advancing their cursor.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".