This is an automated email from the ASF dual-hosted git repository.
jayzhan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 1094651cd0 chore: Move `OptimizeAggregateOrder` from core to optimizer
crate (#13284)
1094651cd0 is described below
commit 1094651cd01426a13580ad67ba2db59a9831245d
Author: Jonathan Chen <[email protected]>
AuthorDate: Thu Nov 7 01:23:49 2024 -0500
chore: Move `OptimizeAggregateOrder` from core to optimizer crate (#13284)
* move OptimizeAggregateOrder
* clippy fix
---
datafusion/core/src/physical_optimizer/mod.rs | 1 -
datafusion/physical-optimizer/src/lib.rs | 1 +
.../src}/update_aggr_exprs.rs | 26 +++++++++++++++++++---
3 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/datafusion/core/src/physical_optimizer/mod.rs
b/datafusion/core/src/physical_optimizer/mod.rs
index efdd3148d0..fe799a2305 100644
--- a/datafusion/core/src/physical_optimizer/mod.rs
+++ b/datafusion/core/src/physical_optimizer/mod.rs
@@ -32,7 +32,6 @@ pub mod replace_with_order_preserving_variants;
pub mod sanity_checker;
#[cfg(test)]
pub mod test_utils;
-pub mod update_aggr_exprs;
mod sort_pushdown;
mod utils;
diff --git a/datafusion/physical-optimizer/src/lib.rs
b/datafusion/physical-optimizer/src/lib.rs
index 439f1dc873..6ae55df92d 100644
--- a/datafusion/physical-optimizer/src/lib.rs
+++ b/datafusion/physical-optimizer/src/lib.rs
@@ -24,5 +24,6 @@ pub mod limited_distinct_aggregation;
mod optimizer;
pub mod output_requirements;
pub mod topk_aggregation;
+pub mod update_aggr_exprs;
pub use optimizer::PhysicalOptimizerRule;
diff --git a/datafusion/core/src/physical_optimizer/update_aggr_exprs.rs
b/datafusion/physical-optimizer/src/update_aggr_exprs.rs
similarity index 88%
rename from datafusion/core/src/physical_optimizer/update_aggr_exprs.rs
rename to datafusion/physical-optimizer/src/update_aggr_exprs.rs
index d563d0c56d..6228ed10ec 100644
--- a/datafusion/core/src/physical_optimizer/update_aggr_exprs.rs
+++ b/datafusion/physical-optimizer/src/update_aggr_exprs.rs
@@ -27,14 +27,15 @@ use
datafusion_physical_expr::aggregate::AggregateFunctionExpr;
use datafusion_physical_expr::{
reverse_order_bys, EquivalenceProperties, PhysicalSortRequirement,
};
-use datafusion_physical_expr_common::sort_expr::{LexOrdering, LexRequirement};
-use datafusion_physical_optimizer::PhysicalOptimizerRule;
+use datafusion_physical_expr::{LexOrdering, LexRequirement};
use datafusion_physical_plan::aggregates::concat_slices;
use datafusion_physical_plan::windows::get_ordered_partition_by_indices;
use datafusion_physical_plan::{
aggregates::AggregateExec, ExecutionPlan, ExecutionPlanProperties,
};
+use crate::PhysicalOptimizerRule;
+
/// This optimizer rule checks ordering requirements of aggregate expressions.
///
/// There are 3 kinds of aggregators in terms of ordering requirements:
@@ -60,6 +61,20 @@ impl OptimizeAggregateOrder {
}
impl PhysicalOptimizerRule for OptimizeAggregateOrder {
+ /// Applies the `OptimizeAggregateOrder` rule to the provided execution
plan.
+ ///
+ /// This function traverses the execution plan tree, identifies
`AggregateExec` nodes,
+ /// and optimizes their aggregate expressions based on existing input
orderings.
+ /// If optimizations are applied, it returns a modified execution plan.
+ ///
+ /// # Arguments
+ ///
+ /// * `plan` - The root of the execution plan to optimize.
+ /// * `_config` - Configuration options (currently unused).
+ ///
+ /// # Returns
+ ///
+ /// A `Result` containing the potentially optimized execution plan or an
error.
fn optimize(
&self,
plan: Arc<dyn ExecutionPlan>,
@@ -85,7 +100,12 @@ impl PhysicalOptimizerRule for OptimizeAggregateOrder {
let requirement = indices
.iter()
.map(|&idx| {
-
PhysicalSortRequirement::new(groupby_exprs[idx].clone(), None)
+ PhysicalSortRequirement::new(
+ Arc::<dyn
datafusion_physical_plan::PhysicalExpr>::clone(
+ &groupby_exprs[idx],
+ ),
+ None,
+ )
})
.collect::<Vec<_>>();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]