Skip to content

Commit dd04929

Browse files
authored
Move TopKAggregation rule into physical-optimizer crate (#12334)
* Move TopKAggregation rule into physical-optimizer crate * cargo update for cli * Update cli msrv * Fix clippy lints
1 parent a444528 commit dd04929

File tree

5 files changed

+44
-29
lines changed

5 files changed

+44
-29
lines changed

datafusion-cli/Cargo.lock

Lines changed: 32 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datafusion/core/src/physical_optimizer/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ pub mod replace_with_order_preserving_variants;
3232
pub mod sanity_checker;
3333
#[cfg(test)]
3434
pub mod test_utils;
35-
pub mod topk_aggregation;
3635
pub mod update_aggr_exprs;
3736

3837
mod sort_pushdown;

datafusion/physical-optimizer/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ rust-version = { workspace = true }
3232
workspace = true
3333

3434
[dependencies]
35+
arrow-schema = { workspace = true }
3536
datafusion-common = { workspace = true, default-features = true }
3637
datafusion-execution = { workspace = true }
3738
datafusion-physical-expr = { workspace = true }

datafusion/physical-optimizer/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ pub mod limit_pushdown;
2323
pub mod limited_distinct_aggregation;
2424
mod optimizer;
2525
pub mod output_requirements;
26+
pub mod topk_aggregation;
2627

2728
pub use optimizer::PhysicalOptimizerRule;

datafusion/core/src/physical_optimizer/topk_aggregation.rs renamed to datafusion/physical-optimizer/src/topk_aggregation.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
2020
use std::sync::Arc;
2121

22-
use crate::physical_plan::aggregates::AggregateExec;
23-
use crate::physical_plan::coalesce_batches::CoalesceBatchesExec;
24-
use crate::physical_plan::filter::FilterExec;
25-
use crate::physical_plan::repartition::RepartitionExec;
26-
use crate::physical_plan::sorts::sort::SortExec;
27-
use crate::physical_plan::ExecutionPlan;
22+
use datafusion_physical_plan::aggregates::AggregateExec;
23+
use datafusion_physical_plan::coalesce_batches::CoalesceBatchesExec;
24+
use datafusion_physical_plan::filter::FilterExec;
25+
use datafusion_physical_plan::repartition::RepartitionExec;
26+
use datafusion_physical_plan::sorts::sort::SortExec;
27+
use datafusion_physical_plan::ExecutionPlan;
2828

2929
use arrow_schema::DataType;
3030
use datafusion_common::config::ConfigOptions;
@@ -33,7 +33,7 @@ use datafusion_common::Result;
3333
use datafusion_physical_expr::expressions::Column;
3434
use datafusion_physical_expr::PhysicalSortExpr;
3535

36-
use datafusion_physical_optimizer::PhysicalOptimizerRule;
36+
use crate::PhysicalOptimizerRule;
3737
use itertools::Itertools;
3838

3939
/// An optimizer rule that passes a `limit` hint to aggregations if the whole result is not needed
@@ -76,7 +76,7 @@ impl TopKAggregation {
7676
aggr.group_expr().clone(),
7777
aggr.aggr_expr().to_vec(),
7878
aggr.filter_expr().to_vec(),
79-
aggr.input().clone(),
79+
Arc::clone(aggr.input()),
8080
aggr.input_schema(),
8181
)
8282
.expect("Unable to copy Aggregate!")
@@ -114,13 +114,13 @@ impl TopKAggregation {
114114
}
115115
} else {
116116
// or we continue down whitelisted nodes of other types
117-
if !is_cardinality_preserving(plan.clone()) {
117+
if !is_cardinality_preserving(Arc::clone(&plan)) {
118118
cardinality_preserved = false;
119119
}
120120
}
121121
Ok(Transformed::no(plan))
122122
};
123-
let child = child.clone().transform_down(closure).data().ok()?;
123+
let child = Arc::clone(child).transform_down(closure).data().ok()?;
124124
let sort = SortExec::new(sort.expr().to_vec(), child)
125125
.with_fetch(sort.fetch())
126126
.with_preserve_partitioning(sort.preserve_partitioning());

0 commit comments

Comments
 (0)