Skip to content

Commit 840d843

Browse files
committed
Take Sort (SortExpr) in tests' TopKPlanNode
Part of effort to remove `Expr::Sort`.
1 parent 9e9a238 commit 840d843

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

datafusion/core/tests/user_defined/user_defined_plan.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
//!
6060
6161
use std::fmt::Debug;
62+
use std::ops::Deref;
6263
use std::task::{Context, Poll};
6364
use std::{any::Any, collections::BTreeMap, fmt, sync::Arc};
6465

@@ -97,7 +98,8 @@ use datafusion::{
9798
use datafusion_common::config::ConfigOptions;
9899
use datafusion_common::tree_node::{Transformed, TransformedResult, TreeNode};
99100
use datafusion_common::ScalarValue;
100-
use datafusion_expr::Projection;
101+
use datafusion_expr::tree_node::replace_sort_expression;
102+
use datafusion_expr::{Projection, SortExpr};
101103
use datafusion_optimizer::optimizer::ApplyOrder;
102104
use datafusion_optimizer::AnalyzerRule;
103105

@@ -375,7 +377,7 @@ impl OptimizerRule for TopKOptimizerRule {
375377
node: Arc::new(TopKPlanNode {
376378
k: *fetch,
377379
input: input.as_ref().clone(),
378-
expr: expr[0].clone(),
380+
expr: expr[0].unwrap_sort().clone(),
379381
}),
380382
})));
381383
}
@@ -392,7 +394,7 @@ struct TopKPlanNode {
392394
input: LogicalPlan,
393395
/// The sort expression (this example only supports a single sort
394396
/// expr)
395-
expr: Expr,
397+
expr: SortExpr,
396398
}
397399

398400
impl Debug for TopKPlanNode {
@@ -418,7 +420,7 @@ impl UserDefinedLogicalNodeCore for TopKPlanNode {
418420
}
419421

420422
fn expressions(&self) -> Vec<Expr> {
421-
vec![self.expr.clone()]
423+
vec![self.expr.expr.deref().clone()]
422424
}
423425

424426
/// For example: `TopK: k=10`
@@ -436,7 +438,7 @@ impl UserDefinedLogicalNodeCore for TopKPlanNode {
436438
Ok(Self {
437439
k: self.k,
438440
input: inputs.swap_remove(0),
439-
expr: exprs.swap_remove(0),
441+
expr: replace_sort_expression(self.expr.clone(), exprs.swap_remove(0)),
440442
})
441443
}
442444
}

datafusion/expr/src/tree_node.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,3 +386,10 @@ fn transform_vec<F: FnMut(Expr) -> Result<Transformed<Expr>>>(
386386
) -> Result<Transformed<Vec<Expr>>> {
387387
ve.into_iter().map_until_stop_and_collect(f)
388388
}
389+
390+
pub fn replace_sort_expression(sort: Sort, new_expr: Expr) -> Sort {
391+
Sort {
392+
expr: Box::new(new_expr),
393+
..sort
394+
}
395+
}

0 commit comments

Comments
 (0)