pub struct CascadesOptimizer<T: RelNodeTyp, M: Memo<T> = NaiveMemo<T>> {
pub ctx: OptimizerContext,
pub prop: OptimizerProperties,
/* private fields */
}Fields§
§ctx: OptimizerContext§prop: OptimizerPropertiesImplementations§
Source§impl<T: RelNodeTyp> CascadesOptimizer<T, NaiveMemo<T>>
impl<T: RelNodeTyp> CascadesOptimizer<T, NaiveMemo<T>>
pub fn new( rules: Vec<Arc<RuleWrapper<T, Self>>>, cost: Box<dyn CostModel<T, NaiveMemo<T>>>, property_builders: Vec<Box<dyn PropertyBuilderAny<T>>>, ) -> Self
pub fn new_with_prop( rules: Vec<Arc<RuleWrapper<T, Self>>>, cost: Box<dyn CostModel<T, NaiveMemo<T>>>, property_builders: Vec<Box<dyn PropertyBuilderAny<T>>>, prop: OptimizerProperties, ) -> Self
Sourcepub fn step_clear(&mut self)
pub fn step_clear(&mut self)
Clear the memo table and all optimizer states.
Sourcepub fn step_clear_winner(&mut self)
pub fn step_clear_winner(&mut self)
Clear the winner so that the optimizer can continue to explore the group.
Source§impl<T: RelNodeTyp, M: Memo<T>> CascadesOptimizer<T, M>
impl<T: RelNodeTyp, M: Memo<T>> CascadesOptimizer<T, M>
pub fn panic_on_explore_limit(&mut self, enabled: bool)
pub fn cost(&self) -> Arc<dyn CostModel<T, M>>
pub fn rules(&self) -> Arc<[Arc<RuleWrapper<T, Self>>]>
pub fn disable_rule(&mut self, rule_id: usize)
pub fn enable_rule(&mut self, rule_id: usize)
pub fn is_rule_disabled(&self, rule_id: usize) -> bool
pub fn dump(&self)
Sourcepub fn step_optimize_rel(&mut self, root_rel: RelNodeRef<T>) -> Result<GroupId>
pub fn step_optimize_rel(&mut self, root_rel: RelNodeRef<T>) -> Result<GroupId>
Optimize a RelNode.
Sourcepub fn step_get_optimize_rel(
&self,
group_id: GroupId,
meta: &mut Option<RelNodeMetaMap>,
) -> Result<RelNodeRef<T>>
pub fn step_get_optimize_rel( &self, group_id: GroupId, meta: &mut Option<RelNodeMetaMap>, ) -> Result<RelNodeRef<T>>
Gets the group binding.
pub fn resolve_group_id(&self, root_rel: RelNodeRef<T>) -> GroupId
pub fn add_new_expr(&mut self, rel_node: RelNodeRef<T>) -> (GroupId, ExprId)
pub fn add_expr_to_group( &mut self, rel_node: RelNodeRef<T>, group_id: GroupId, ) -> Option<ExprId>
Sourcepub fn get_property_by_group<P: PropertyBuilder<T>>(
&self,
group_id: GroupId,
idx: usize,
) -> P::Prop
pub fn get_property_by_group<P: PropertyBuilder<T>>( &self, group_id: GroupId, idx: usize, ) -> P::Prop
Get the properties of a Cascades group P is the type of the property you expect idx is the idx of the property you want. The order of properties is defined by the property_builders parameter in CascadesOptimizer::new()
pub fn get_predicate_binding(&self, group_id: GroupId) -> Option<RelNodeRef<T>>
pub fn memo(&self) -> &M
Trait Implementations§
Source§impl<T: RelNodeTyp, M: Memo<T>> Optimizer<T> for CascadesOptimizer<T, M>
impl<T: RelNodeTyp, M: Memo<T>> Optimizer<T> for CascadesOptimizer<T, M>
fn optimize(&mut self, root_rel: RelNodeRef<T>) -> Result<RelNodeRef<T>>
fn get_property<P: PropertyBuilder<T>>( &self, root_rel: RelNodeRef<T>, idx: usize, ) -> P::Prop
Auto Trait Implementations§
impl<T, M> Freeze for CascadesOptimizer<T, M>where
M: Freeze,
impl<T, M = NaiveMemo<T>> !RefUnwindSafe for CascadesOptimizer<T, M>
impl<T, M> Send for CascadesOptimizer<T, M>
impl<T, M> Sync for CascadesOptimizer<T, M>
impl<T, M> Unpin for CascadesOptimizer<T, M>where
M: Unpin,
impl<T, M = NaiveMemo<T>> !UnwindSafe for CascadesOptimizer<T, M>
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
Mutably borrows from an owned value. Read more
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> 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>
Converts
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>
Converts
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