Skip to content

Commit d23c52f

Browse files
irenjjalamb
andauthored
Simplify the printing of all plans containing expr in tree mode (#15249)
* Simplify the printing of all plans containing `expr` in `tree` mode * Update datafusion/physical-expr-common/src/sort_expr.rs Co-authored-by: Andrew Lamb <[email protected]> * fix --------- Co-authored-by: Andrew Lamb <[email protected]>
1 parent a27a928 commit d23c52f

File tree

9 files changed

+113
-93
lines changed

9 files changed

+113
-93
lines changed

datafusion/datasource-parquet/src/source.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use datafusion_common::config::TableParquetOptions;
3434
use datafusion_common::Statistics;
3535
use datafusion_datasource::file::FileSource;
3636
use datafusion_datasource::file_scan_config::FileScanConfig;
37+
use datafusion_physical_expr_common::physical_expr::fmt_sql;
3738
use datafusion_physical_expr_common::physical_expr::PhysicalExpr;
3839
use datafusion_physical_optimizer::pruning::PruningPredicate;
3940
use datafusion_physical_plan::metrics::{ExecutionPlanMetricsSet, MetricBuilder};
@@ -580,7 +581,7 @@ impl FileSource for ParquetSource {
580581
}
581582
DisplayFormatType::TreeRender => {
582583
if let Some(predicate) = self.predicate() {
583-
writeln!(f, "predicate={predicate}")?;
584+
writeln!(f, "predicate={}", fmt_sql(predicate.as_ref()))?;
584585
}
585586
Ok(())
586587
}

datafusion/physical-expr-common/src/sort_expr.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
//! Sort expressions
1919
20-
use crate::physical_expr::PhysicalExpr;
20+
use crate::physical_expr::{fmt_sql, PhysicalExpr};
2121
use std::fmt;
2222
use std::fmt::{Display, Formatter};
2323
use std::hash::{Hash, Hasher};
@@ -117,6 +117,16 @@ impl PhysicalSortExpr {
117117
self.options.nulls_first = false;
118118
self
119119
}
120+
121+
/// Like [`PhysicalExpr::fmt_sql`] prints a [`PhysicalSortExpr`] in a SQL-like format.
122+
pub fn fmt_sql(&self, f: &mut Formatter) -> fmt::Result {
123+
write!(
124+
f,
125+
"{} {}",
126+
fmt_sql(self.expr.as_ref()),
127+
to_str(&self.options)
128+
)
129+
}
120130
}
121131

122132
/// Access the PhysicalSortExpr as a PhysicalExpr

datafusion/physical-plan/src/aggregates/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,7 @@ impl DisplayAs for AggregateExec {
830830
})
831831
.collect()
832832
};
833+
// TODO: Implement `fmt_sql` for `AggregateFunctionExpr`.
833834
let a: Vec<String> = self
834835
.aggr_expr
835836
.iter()

datafusion/physical-plan/src/filter.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ use datafusion_physical_expr::{
5454
ExprBoundaries, PhysicalExpr,
5555
};
5656

57+
use datafusion_physical_expr_common::physical_expr::fmt_sql;
5758
use futures::stream::{Stream, StreamExt};
5859
use log::trace;
5960

@@ -330,7 +331,7 @@ impl DisplayAs for FilterExec {
330331
write!(f, "FilterExec: {}{}", self.predicate, display_projections)
331332
}
332333
DisplayFormatType::TreeRender => {
333-
write!(f, "predicate={}", self.predicate)
334+
write!(f, "predicate={}", fmt_sql(self.predicate.as_ref()))
334335
}
335336
}
336337
}

datafusion/physical-plan/src/joins/hash_join.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ use datafusion_physical_expr::PhysicalExprRef;
8282
use datafusion_physical_expr_common::datum::compare_op_for_nested;
8383

8484
use ahash::RandomState;
85+
use datafusion_physical_expr_common::physical_expr::fmt_sql;
8586
use futures::{ready, Stream, StreamExt, TryStreamExt};
8687
use parking_lot::Mutex;
8788

@@ -672,7 +673,9 @@ impl DisplayAs for HashJoinExec {
672673
let on = self
673674
.on
674675
.iter()
675-
.map(|(c1, c2)| format!("({} = {})", c1, c2))
676+
.map(|(c1, c2)| {
677+
format!("({} = {})", fmt_sql(c1.as_ref()), fmt_sql(c2.as_ref()))
678+
})
676679
.collect::<Vec<String>>()
677680
.join(", ");
678681

datafusion/physical-plan/src/joins/sort_merge_join.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ use datafusion_execution::runtime_env::RuntimeEnv;
7070
use datafusion_execution::TaskContext;
7171
use datafusion_physical_expr::equivalence::join_equivalence_properties;
7272
use datafusion_physical_expr::PhysicalExprRef;
73+
use datafusion_physical_expr_common::physical_expr::fmt_sql;
7374
use datafusion_physical_expr_common::sort_expr::{LexOrdering, LexRequirement};
7475

7576
use futures::{Stream, StreamExt};
@@ -373,7 +374,9 @@ impl DisplayAs for SortMergeJoinExec {
373374
let on = self
374375
.on
375376
.iter()
376-
.map(|(c1, c2)| format!("({} = {})", c1, c2))
377+
.map(|(c1, c2)| {
378+
format!("({} = {})", fmt_sql(c1.as_ref()), fmt_sql(c2.as_ref()))
379+
})
377380
.collect::<Vec<String>>()
378381
.join(", ");
379382

datafusion/physical-plan/src/joins/symmetric_hash_join.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ use datafusion_expr::interval_arithmetic::Interval;
7474
use datafusion_physical_expr::equivalence::join_equivalence_properties;
7575
use datafusion_physical_expr::intervals::cp_solver::ExprIntervalGraph;
7676
use datafusion_physical_expr::PhysicalExprRef;
77+
use datafusion_physical_expr_common::physical_expr::fmt_sql;
7778
use datafusion_physical_expr_common::sort_expr::{LexOrdering, LexRequirement};
7879

7980
use ahash::RandomState;
@@ -384,7 +385,9 @@ impl DisplayAs for SymmetricHashJoinExec {
384385
let on = self
385386
.on
386387
.iter()
387-
.map(|(c1, c2)| format!("({} = {})", c1, c2))
388+
.map(|(c1, c2)| {
389+
format!("({} = {})", fmt_sql(c1.as_ref()), fmt_sql(c2.as_ref()))
390+
})
388391
.collect::<Vec<String>>()
389392
.join(", ");
390393

datafusion/physical-plan/src/sorts/sort_preserving_merge.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,9 @@ impl DisplayAs for SortPreservingMergeExec {
187187
}
188188
DisplayFormatType::TreeRender => {
189189
for (i, e) in self.expr().iter().enumerate() {
190-
let e = e.to_string();
191-
if i == self.expr().len() - 1 {
192-
writeln!(f, "{e}")?;
193-
} else {
194-
write!(f, "{e}, ")?;
190+
e.fmt_sql(f)?;
191+
if i != self.expr().len() - 1 {
192+
write!(f, ", ")?;
195193
}
196194
}
197195
if let Some(fetch) = self.fetch {

0 commit comments

Comments
 (0)