Skip to content

Commit 7248259

Browse files
Reduce size of Expr struct (#16207)
* First pass at incorporating boxed WindowFunction * Second pass * Adjust tests * cargo fmt * fmt * Add test * clippy * clippy * fmt * Adjust comments
1 parent 5a86142 commit 7248259

File tree

25 files changed

+359
-285
lines changed

25 files changed

+359
-285
lines changed

datafusion-examples/examples/advanced_udwf.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ impl WindowUDFImpl for SimplifySmoothItUdf {
191191
/// default implementation will not be called (left as `todo!()`)
192192
fn simplify(&self) -> Option<WindowFunctionSimplification> {
193193
let simplify = |window_function: WindowFunction, _: &dyn SimplifyInfo| {
194-
Ok(Expr::WindowFunction(WindowFunction {
194+
Ok(Expr::from(WindowFunction {
195195
fun: WindowFunctionDefinition::AggregateUDF(avg_udaf()),
196196
params: WindowFunctionParams {
197197
args: window_function.params.args,

datafusion/core/src/physical_planner.rs

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -574,27 +574,25 @@ impl DefaultPhysicalPlanner {
574574
let input_exec = children.one()?;
575575

576576
let get_sort_keys = |expr: &Expr| match expr {
577-
Expr::WindowFunction(WindowFunction {
578-
params:
579-
WindowFunctionParams {
580-
ref partition_by,
581-
ref order_by,
582-
..
583-
},
584-
..
585-
}) => generate_sort_key(partition_by, order_by),
577+
Expr::WindowFunction(window_fun) => {
578+
let WindowFunctionParams {
579+
ref partition_by,
580+
ref order_by,
581+
..
582+
} = &window_fun.as_ref().params;
583+
generate_sort_key(partition_by, order_by)
584+
}
586585
Expr::Alias(Alias { expr, .. }) => {
587586
// Convert &Box<T> to &T
588587
match &**expr {
589-
Expr::WindowFunction(WindowFunction {
590-
params:
591-
WindowFunctionParams {
592-
ref partition_by,
593-
ref order_by,
594-
..
595-
},
596-
..
597-
}) => generate_sort_key(partition_by, order_by),
588+
Expr::WindowFunction(window_fun) => {
589+
let WindowFunctionParams {
590+
ref partition_by,
591+
ref order_by,
592+
..
593+
} = &window_fun.as_ref().params;
594+
generate_sort_key(partition_by, order_by)
595+
}
598596
_ => unreachable!(),
599597
}
600598
}
@@ -1506,17 +1504,18 @@ pub fn create_window_expr_with_name(
15061504
let name = name.into();
15071505
let physical_schema: &Schema = &logical_schema.into();
15081506
match e {
1509-
Expr::WindowFunction(WindowFunction {
1510-
fun,
1511-
params:
1512-
WindowFunctionParams {
1513-
args,
1514-
partition_by,
1515-
order_by,
1516-
window_frame,
1517-
null_treatment,
1518-
},
1519-
}) => {
1507+
Expr::WindowFunction(window_fun) => {
1508+
let WindowFunction {
1509+
fun,
1510+
params:
1511+
WindowFunctionParams {
1512+
args,
1513+
partition_by,
1514+
order_by,
1515+
window_frame,
1516+
null_treatment,
1517+
},
1518+
} = window_fun.as_ref();
15201519
let physical_args =
15211520
create_physical_exprs(args, logical_schema, execution_props)?;
15221521
let partition_by =

datafusion/core/tests/dataframe/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ async fn window_using_aggregates() -> Result<()> {
907907
vec![col("c3")],
908908
);
909909

910-
Expr::WindowFunction(w)
910+
Expr::from(w)
911911
.null_treatment(NullTreatment::IgnoreNulls)
912912
.order_by(vec![col("c2").sort(true, true), col("c3").sort(true, true)])
913913
.window_frame(WindowFrame::new_bounds(

datafusion/core/tests/user_defined/user_defined_aggregates.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,22 +1106,22 @@ async fn test_metadata_based_aggregate_as_window() -> Result<()> {
11061106
)));
11071107

11081108
let df = df.select(vec![
1109-
Expr::WindowFunction(WindowFunction::new(
1109+
Expr::from(WindowFunction::new(
11101110
WindowFunctionDefinition::AggregateUDF(Arc::clone(&no_output_meta_udf)),
11111111
vec![col("no_metadata")],
11121112
))
11131113
.alias("meta_no_in_no_out"),
1114-
Expr::WindowFunction(WindowFunction::new(
1114+
Expr::from(WindowFunction::new(
11151115
WindowFunctionDefinition::AggregateUDF(no_output_meta_udf),
11161116
vec![col("with_metadata")],
11171117
))
11181118
.alias("meta_with_in_no_out"),
1119-
Expr::WindowFunction(WindowFunction::new(
1119+
Expr::from(WindowFunction::new(
11201120
WindowFunctionDefinition::AggregateUDF(Arc::clone(&with_output_meta_udf)),
11211121
vec![col("no_metadata")],
11221122
))
11231123
.alias("meta_no_in_with_out"),
1124-
Expr::WindowFunction(WindowFunction::new(
1124+
Expr::from(WindowFunction::new(
11251125
WindowFunctionDefinition::AggregateUDF(with_output_meta_udf),
11261126
vec![col("with_metadata")],
11271127
))

datafusion/datasource/src/file_scan_config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2391,7 +2391,7 @@ mod tests {
23912391
// Setup sort expression
23922392
let exec_props = ExecutionProps::new();
23932393
let df_schema = DFSchema::try_from_qualified_schema("test", schema.as_ref())?;
2394-
let sort_expr = vec![col("value").sort(true, false)];
2394+
let sort_expr = [col("value").sort(true, false)];
23952395

23962396
let physical_sort_exprs: Vec<_> = sort_expr
23972397
.iter()

0 commit comments

Comments
 (0)