pub struct SplitProjection {
pub source: ProjectionExprs,
pub file_indices: Vec<usize>,
/* private fields */
}Expand description
At a high level the goal of SplitProjection is to take a ProjectionExprs meant to be applied to the table schema and split that into:
-
The projection indices into the file schema (file_indices)
-
The projection indices into the partition values (partition_value_indices), which pre-compute both the index into the table schema and the index into the partition values array
-
A remapped projection that can be applied after the file projection is applied This remapped projection has the following properties:
- Column indices referring to file columns are remapped to [0..file_indices.len())
- Column indices referring to partition columns are remapped to [file_indices.len()..)
This allows the ProjectionOpener to easily identify which columns in the remapped projection refer to partition columns and substitute them with literals from the partition values.
Fields§
§source: ProjectionExprsThe original projection this SplitProjection was derived from
file_indices: Vec<usize>Column indices to read from file (public for file sources)
Implementations§
Source§impl SplitProjection
impl SplitProjection
pub fn unprojected(table_schema: &TableSchema) -> Self
Sourcepub fn new(logical_file_schema: &Schema, projection: &ProjectionExprs) -> Self
pub fn new(logical_file_schema: &Schema, projection: &ProjectionExprs) -> Self
Creates a new SplitProjection by splitting a projection into
simple file column indices and a remainder projection that is applied after reading the file.
In other words: we get a Vec<usize> projection that is meant to be applied on top of file_schema
and a remainder projection that is applied to the result of that first projection.
Here file_schema is expected to be the logical schema of the file, that is the
table schema minus any partition columns.
Partition columns are always expected to be at the end of the table schema.
Note that file_schema is not the physical schema of the file.
Trait Implementations§
Source§impl Clone for SplitProjection
impl Clone for SplitProjection
Source§fn clone(&self) -> SplitProjection
fn clone(&self) -> SplitProjection
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SplitProjection
impl !RefUnwindSafe for SplitProjection
impl Send for SplitProjection
impl Sync for SplitProjection
impl Unpin for SplitProjection
impl !UnwindSafe for SplitProjection
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,
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