pub struct ReplaceDistinctWithAggregate {}Expand description
Optimizer that replaces logical [Distinct] with a logical [Aggregate]
SELECT DISTINCT a, b FROM tabInto
SELECT a, b FROM tab GROUP BY a, bOn the other hand, for a DISTINCT ON query the replacement is
a bit more involved and effectively converts
SELECT DISTINCT ON (a) b FROM tab ORDER BY a DESC, cinto
SELECT b FROM (
SELECT a, FIRST_VALUE(b ORDER BY a DESC, c) AS b
FROM tab
GROUP BY a
)
ORDER BY a DESCImplementations§
Trait Implementations§
Source§impl Debug for ReplaceDistinctWithAggregate
impl Debug for ReplaceDistinctWithAggregate
Source§impl Default for ReplaceDistinctWithAggregate
impl Default for ReplaceDistinctWithAggregate
Source§fn default() -> ReplaceDistinctWithAggregate
fn default() -> ReplaceDistinctWithAggregate
Returns the “default value” for a type. Read more
Source§impl OptimizerRule for ReplaceDistinctWithAggregate
impl OptimizerRule for ReplaceDistinctWithAggregate
Source§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>>
fn rewrite( &self, plan: LogicalPlan, config: &dyn OptimizerConfig, ) -> Result<Transformed<LogicalPlan>>
Try to rewrite
plan to an optimized form, returning Transformed::yes
if the plan was rewritten and Transformed::no if it was not.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 moreAuto Trait Implementations§
impl Freeze for ReplaceDistinctWithAggregate
impl RefUnwindSafe for ReplaceDistinctWithAggregate
impl Send for ReplaceDistinctWithAggregate
impl Sync for ReplaceDistinctWithAggregate
impl Unpin for ReplaceDistinctWithAggregate
impl UnwindSafe for ReplaceDistinctWithAggregate
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