You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by dh...@apache.org on 2021/05/19 18:00:23 UTC
[arrow-datafusion] branch master updated: Fix indented display for
multi-child nodes (#358)
This is an automated email from the ASF dual-hosted git repository.
dheres pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git
The following commit(s) were added to refs/heads/master by this push:
new 2f73558 Fix indented display for multi-child nodes (#358)
2f73558 is described below
commit 2f73558b6ed68974f2b63d64bef4628b0776d3d5
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Wed May 19 14:00:14 2021 -0400
Fix indented display for multi-child nodes (#358)
---
datafusion/src/physical_plan/display.rs | 5 ++++
datafusion/tests/sql.rs | 49 +++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/datafusion/src/physical_plan/display.rs b/datafusion/src/physical_plan/display.rs
index bfc3cd9..e178ea1 100644
--- a/datafusion/src/physical_plan/display.rs
+++ b/datafusion/src/physical_plan/display.rs
@@ -87,4 +87,9 @@ impl<'a, 'b> ExecutionPlanVisitor for IndentVisitor<'a, 'b> {
self.indent += 1;
Ok(true)
}
+
+ fn post_visit(&mut self, _plan: &dyn ExecutionPlan) -> Result<bool, Self::Error> {
+ self.indent -= 1;
+ Ok(true)
+ }
}
diff --git a/datafusion/tests/sql.rs b/datafusion/tests/sql.rs
index eb50661..17e0f13 100644
--- a/datafusion/tests/sql.rs
+++ b/datafusion/tests/sql.rs
@@ -2989,3 +2989,52 @@ async fn test_physical_plan_display_indent() {
expected, actual
);
}
+
+#[tokio::test]
+async fn test_physical_plan_display_indent_multi_children() {
+ // Hard code concurrency as it appears in the RepartitionExec output
+ let config = ExecutionConfig::new().with_concurrency(3);
+ let mut ctx = ExecutionContext::with_config(config);
+ // ensure indenting works for nodes with multiple children
+ register_aggregate_csv(&mut ctx).unwrap();
+ let sql = "SELECT c1 \
+ FROM (select c1 from aggregate_test_100)\
+ JOIN\
+ (select c1 as c2 from aggregate_test_100)\
+ ON c1=c2\
+ ";
+
+ let plan = ctx.create_logical_plan(&sql).unwrap();
+ let plan = ctx.optimize(&plan).unwrap();
+
+ let physical_plan = ctx.create_physical_plan(&plan).unwrap();
+ let expected = vec![
+ "ProjectionExec: expr=[c1]",
+ " CoalesceBatchesExec: target_batch_size=4096",
+ " HashJoinExec: mode=Partitioned, join_type=Inner, on=[(\"c1\", \"c2\")]",
+ " CoalesceBatchesExec: target_batch_size=4096",
+ " RepartitionExec: partitioning=Hash([Column { name: \"c1\" }], 3)",
+ " ProjectionExec: expr=[c1]",
+ " RepartitionExec: partitioning=RoundRobinBatch(3)",
+ " CsvExec: source=Path(ARROW_TEST_DATA/csv/aggregate_test_100.csv: [ARROW_TEST_DATA/csv/aggregate_test_100.csv]), has_header=true",
+ " CoalesceBatchesExec: target_batch_size=4096",
+ " RepartitionExec: partitioning=Hash([Column { name: \"c2\" }], 3)",
+ " ProjectionExec: expr=[c1 as c2]",
+ " RepartitionExec: partitioning=RoundRobinBatch(3)",
+ " CsvExec: source=Path(ARROW_TEST_DATA/csv/aggregate_test_100.csv: [ARROW_TEST_DATA/csv/aggregate_test_100.csv]), has_header=true",
+ ];
+
+ let data_path = arrow::util::test_util::arrow_test_data();
+ let actual = format!("{}", displayable(physical_plan.as_ref()).indent())
+ .trim()
+ .lines()
+ // normalize paths
+ .map(|s| s.replace(&data_path, "ARROW_TEST_DATA"))
+ .collect::<Vec<_>>();
+
+ assert_eq!(
+ expected, actual,
+ "expected:\n{:#?}\nactual:\n\n{:#?}\n",
+ expected, actual
+ );
+}