pub struct SingleDistinctToGroupBy {}Expand description
single distinct to group by optimizer rule
Before:
SELECT a, count(DISTINCT b), sum(c)
FROM t
GROUP BY a
After:
SELECT a, count(alias1), sum(alias2)
FROM (
SELECT a, b as alias1, sum(c) as alias2
FROM t
GROUP BY a, b
)
GROUP BY aImplementations§
Trait Implementations§
Source§impl Debug for SingleDistinctToGroupBy
impl Debug for SingleDistinctToGroupBy
Source§impl Default for SingleDistinctToGroupBy
impl Default for SingleDistinctToGroupBy
Source§fn default() -> SingleDistinctToGroupBy
fn default() -> SingleDistinctToGroupBy
Returns the “default value” for a type. Read more
Source§impl OptimizerRule for SingleDistinctToGroupBy
impl OptimizerRule for SingleDistinctToGroupBy
Source§fn apply_order(&self) -> Option<ApplyOrder>
fn apply_order(&self) -> Option<ApplyOrder>
How should the rule be applied by the optimizer? See comments on
ApplyOrder for details. Read moreSource§fn supports_rewrite(&self) -> bool
fn supports_rewrite(&self) -> bool
👎Deprecated since 47.0.0: This method is no longer used
Does this rule support rewriting owned plans (rather than by reference)?
Source§fn rewrite(
&self,
plan: LogicalPlan,
_config: &dyn OptimizerConfig,
) -> Result<Transformed<LogicalPlan>, DataFusionError>
fn rewrite( &self, plan: LogicalPlan, _config: &dyn OptimizerConfig, ) -> Result<Transformed<LogicalPlan>, DataFusionError>
Try to rewrite
plan to an optimized form, returning Transformed::yes
if the plan was rewritten and Transformed::no if it was not.Auto Trait Implementations§
impl Freeze for SingleDistinctToGroupBy
impl RefUnwindSafe for SingleDistinctToGroupBy
impl Send for SingleDistinctToGroupBy
impl Sync for SingleDistinctToGroupBy
impl Unpin for SingleDistinctToGroupBy
impl UnwindSafe for SingleDistinctToGroupBy
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> 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