Transformations for relation expressions.
This crate contains traits, types, and methods suitable for transforming
MirRelationExpr types in ways that preserve semantics and improve performance.
The core trait is
Transform, and many implementors of this trait can be
boxed and iterated over. Some common transformation patterns are wrapped
Transform implementors themselves.
The crate also contains the beginnings of whole-dataflow optimization, which uses the same analyses but spanning multiple dataflow elements.
Transformations based on pulling information about individual columns from sources.
Common subexpression elimination.
Transformation based on pushing demand information about columns toward sources.
Transformations that fuse together others of their kind.
Install replace certain
Removes unit collections from joins, and joins with fewer than two inputs.
Determines the join implementation for join operators.
Hoist literal values from maps wherever possible.
Push non-null requirements toward sources.
Harvests information about non-nullability of columns from sources.
Pushes predicates down through other operators.
Transform column references in a
Hoist projections through operators.
Replace operators on constants collections with constant collections.
Preliminary work on reduction push-down.
Remove redundant collections of distinct elements from joins.
Transforms predicates of the form "A and B" into two: "A" and "B".
Remove TopK operators with both an offset of zero and no limit.
Re-assign type information and identifiers to each
A sequence of transformations iterated some number of times.
A naive optimizer for relation expressions.
Arguments that get threaded through all transforms.
Errors that can occur during a transformation.
Types capable of transforming relation expressions.