pub struct ProjectionPushdown;
Expand description
Pushes projections down through other operators.
Implementations§
source§impl ProjectionPushdown
impl ProjectionPushdown
sourcepub fn action(
&self,
relation: &mut MirRelationExpr,
desired_projection: &Vec<usize>,
gets: &mut BTreeMap<Id, BTreeSet<usize>>
) -> Result<(), TransformError>
pub fn action(
&self,
relation: &mut MirRelationExpr,
desired_projection: &Vec<usize>,
gets: &mut BTreeMap<Id, BTreeSet<usize>>
) -> Result<(), TransformError>
Pushes the desired_projection
down through relation
.
This action transforms relation
to a MirRelationExpr
equivalent to
relation.project(desired_projection)
.
desired_projection
is expected to consist of unique columns.
sourcepub fn update_projection_around_get(
&self,
relation: &mut MirRelationExpr,
applied_projections: &BTreeMap<Id, (Vec<usize>, RelationType)>
) -> Result<(), TransformError>
pub fn update_projection_around_get(
&self,
relation: &mut MirRelationExpr,
applied_projections: &BTreeMap<Id, (Vec<usize>, RelationType)>
) -> Result<(), TransformError>
When we push the desired_value_projection
at value
,
the columns returned by Get(get_id)
will change, so we need
to permute Project
s around Get(get_id)
.
Trait Implementations§
source§impl Debug for ProjectionPushdown
impl Debug for ProjectionPushdown
source§impl Transform for ProjectionPushdown
impl Transform for ProjectionPushdown
source§fn transform(
&self,
relation: &mut MirRelationExpr,
_: TransformArgs<'_>
) -> Result<(), TransformError>
fn transform(
&self,
relation: &mut MirRelationExpr,
_: TransformArgs<'_>
) -> Result<(), TransformError>
Transform a relation into a functionally equivalent relation.
source§fn recursion_safe(&self) -> bool
fn recursion_safe(&self) -> bool
Indicates if the transform can be safely applied to expressions containing
LetRec
AST nodes.Auto Trait Implementations§
impl RefUnwindSafe for ProjectionPushdown
impl Send for ProjectionPushdown
impl Sync for ProjectionPushdown
impl Unpin for ProjectionPushdown
impl UnwindSafe for ProjectionPushdown
Blanket Implementations§
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T
in a tonic::Request
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
See
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
See
RustType::into_proto
.