You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by al...@apache.org on 2023/06/11 10:57:20 UTC
[arrow-datafusion] branch main updated: Minor: Move `PlanType`, `StringifiedPlan` and `ToStringifiedPlan` `datafusion_common` (#6571)
This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new f0bf01691f Minor: Move `PlanType`, `StringifiedPlan` and `ToStringifiedPlan` `datafusion_common` (#6571)
f0bf01691f is described below
commit f0bf01691f3f496e6b37c8994d5708273bbdb125
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Sun Jun 11 06:57:14 2023 -0400
Minor: Move `PlanType`, `StringifiedPlan` and `ToStringifiedPlan` `datafusion_common` (#6571)
* Move DisplayablePlan to `datafusion_common`
* Update uses
* Update datafusion/common/src/display.rs
Co-authored-by: Liang-Chi Hsieh <vi...@gmail.com>
---------
Co-authored-by: Liang-Chi Hsieh <vi...@gmail.com>
---
datafusion/common/src/display.rs | 110 +++++++++++++++++++++++++++
datafusion/common/src/lib.rs | 1 +
datafusion/core/src/physical_plan/display.rs | 2 +-
datafusion/core/src/physical_plan/explain.rs | 7 +-
datafusion/core/src/physical_plan/planner.rs | 4 +-
datafusion/expr/src/logical_plan/builder.rs | 8 +-
datafusion/expr/src/logical_plan/plan.rs | 90 +---------------------
7 files changed, 124 insertions(+), 98 deletions(-)
diff --git a/datafusion/common/src/display.rs b/datafusion/common/src/display.rs
new file mode 100644
index 0000000000..79de9bc031
--- /dev/null
+++ b/datafusion/common/src/display.rs
@@ -0,0 +1,110 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+//! Types for plan display
+
+use std::{
+ fmt::{self, Display, Formatter},
+ sync::Arc,
+};
+
+/// Represents which type of plan, when storing multiple
+/// for use in EXPLAIN plans
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub enum PlanType {
+ /// The initial LogicalPlan provided to DataFusion
+ InitialLogicalPlan,
+ /// The LogicalPlan which results from applying an analyzer pass
+ AnalyzedLogicalPlan {
+ /// The name of the analyzer which produced this plan
+ analyzer_name: String,
+ },
+ /// The LogicalPlan after all analyzer passes have been applied
+ FinalAnalyzedLogicalPlan,
+ /// The LogicalPlan which results from applying an optimizer pass
+ OptimizedLogicalPlan {
+ /// The name of the optimizer which produced this plan
+ optimizer_name: String,
+ },
+ /// The final, fully optimized LogicalPlan that was converted to a physical plan
+ FinalLogicalPlan,
+ /// The initial physical plan, prepared for execution
+ InitialPhysicalPlan,
+ /// The ExecutionPlan which results from applying an optimizer pass
+ OptimizedPhysicalPlan {
+ /// The name of the optimizer which produced this plan
+ optimizer_name: String,
+ },
+ /// The final, fully optimized physical which would be executed
+ FinalPhysicalPlan,
+}
+
+impl Display for PlanType {
+ fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ match self {
+ PlanType::InitialLogicalPlan => write!(f, "initial_logical_plan"),
+ PlanType::AnalyzedLogicalPlan { analyzer_name } => {
+ write!(f, "logical_plan after {analyzer_name}")
+ }
+ PlanType::FinalAnalyzedLogicalPlan => write!(f, "analyzed_logical_plan"),
+ PlanType::OptimizedLogicalPlan { optimizer_name } => {
+ write!(f, "logical_plan after {optimizer_name}")
+ }
+ PlanType::FinalLogicalPlan => write!(f, "logical_plan"),
+ PlanType::InitialPhysicalPlan => write!(f, "initial_physical_plan"),
+ PlanType::OptimizedPhysicalPlan { optimizer_name } => {
+ write!(f, "physical_plan after {optimizer_name}")
+ }
+ PlanType::FinalPhysicalPlan => write!(f, "physical_plan"),
+ }
+ }
+}
+
+/// Represents some sort of execution plan, in String form
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct StringifiedPlan {
+ /// An identifier of what type of plan this string represents
+ pub plan_type: PlanType,
+ /// The string representation of the plan
+ pub plan: Arc<String>,
+}
+
+impl StringifiedPlan {
+ /// Create a new Stringified plan of `plan_type` with string
+ /// representation `plan`
+ pub fn new(plan_type: PlanType, plan: impl Into<String>) -> Self {
+ StringifiedPlan {
+ plan_type,
+ plan: Arc::new(plan.into()),
+ }
+ }
+
+ /// Returns true if this plan should be displayed. Generally
+ /// `verbose_mode = true` will display all available plans
+ pub fn should_display(&self, verbose_mode: bool) -> bool {
+ match self.plan_type {
+ PlanType::FinalLogicalPlan | PlanType::FinalPhysicalPlan => true,
+ _ => verbose_mode,
+ }
+ }
+}
+
+/// Trait for something that can be formatted as a stringified plan
+pub trait ToStringifiedPlan {
+ /// Create a stringified plan with the specified type
+ fn to_stringified(&self, plan_type: PlanType) -> StringifiedPlan;
+}
diff --git a/datafusion/common/src/lib.rs b/datafusion/common/src/lib.rs
index ef7e094700..80b8a85977 100644
--- a/datafusion/common/src/lib.rs
+++ b/datafusion/common/src/lib.rs
@@ -20,6 +20,7 @@ mod column;
pub mod config;
pub mod delta;
mod dfschema;
+pub mod display;
mod error;
mod join_type;
pub mod parsers;
diff --git a/datafusion/core/src/physical_plan/display.rs b/datafusion/core/src/physical_plan/display.rs
index 5f286eed18..2fba06ed29 100644
--- a/datafusion/core/src/physical_plan/display.rs
+++ b/datafusion/core/src/physical_plan/display.rs
@@ -21,7 +21,7 @@
use std::fmt;
-use crate::logical_expr::{StringifiedPlan, ToStringifiedPlan};
+use datafusion_common::display::{StringifiedPlan, ToStringifiedPlan};
use super::{accept, ExecutionPlan, ExecutionPlanVisitor};
diff --git a/datafusion/core/src/physical_plan/explain.rs b/datafusion/core/src/physical_plan/explain.rs
index fc70626d9b..e40512f1b1 100644
--- a/datafusion/core/src/physical_plan/explain.rs
+++ b/datafusion/core/src/physical_plan/explain.rs
@@ -20,12 +20,11 @@
use std::any::Any;
use std::sync::Arc;
+use datafusion_common::display::StringifiedPlan;
+
use datafusion_common::{DataFusionError, Result};
-use crate::{
- logical_expr::StringifiedPlan,
- physical_plan::{DisplayFormatType, ExecutionPlan, Partitioning, Statistics},
-};
+use crate::physical_plan::{DisplayFormatType, ExecutionPlan, Partitioning, Statistics};
use arrow::{array::StringBuilder, datatypes::SchemaRef, record_batch::RecordBatch};
use log::trace;
diff --git a/datafusion/core/src/physical_plan/planner.rs b/datafusion/core/src/physical_plan/planner.rs
index 6f45b7b545..38e125dc93 100644
--- a/datafusion/core/src/physical_plan/planner.rs
+++ b/datafusion/core/src/physical_plan/planner.rs
@@ -32,8 +32,10 @@ use crate::logical_expr::{
};
use crate::logical_expr::{
CrossJoin, Expr, LogicalPlan, Partitioning as LogicalPartitioning, PlanType,
- Repartition, ToStringifiedPlan, Union, UserDefinedLogicalNode,
+ Repartition, Union, UserDefinedLogicalNode,
};
+use datafusion_common::display::ToStringifiedPlan;
+
use crate::logical_expr::{Limit, Values};
use crate::physical_expr::create_physical_expr;
use crate::physical_optimizer::optimizer::PhysicalOptimizerRule;
diff --git a/datafusion/expr/src/logical_plan/builder.rs b/datafusion/expr/src/logical_plan/builder.rs
index 606b990cfe..99489637da 100644
--- a/datafusion/expr/src/logical_plan/builder.rs
+++ b/datafusion/expr/src/logical_plan/builder.rs
@@ -29,8 +29,8 @@ use crate::{
logical_plan::{
Aggregate, Analyze, CrossJoin, Distinct, EmptyRelation, Explain, Filter, Join,
JoinConstraint, JoinType, Limit, LogicalPlan, Partitioning, PlanType, Prepare,
- Projection, Repartition, Sort, SubqueryAlias, TableScan, ToStringifiedPlan,
- Union, Unnest, Values, Window,
+ Projection, Repartition, Sort, SubqueryAlias, TableScan, Union, Unnest, Values,
+ Window,
},
utils::{
can_hash, expand_qualified_wildcard, expand_wildcard,
@@ -40,8 +40,8 @@ use crate::{
};
use arrow::datatypes::{DataType, Schema, SchemaRef};
use datafusion_common::{
- Column, DFField, DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result,
- ScalarValue, TableReference, ToDFSchema,
+ display::ToStringifiedPlan, Column, DFField, DFSchema, DFSchemaRef, DataFusionError,
+ OwnedTableReference, Result, ScalarValue, TableReference, ToDFSchema,
};
use std::any::Any;
use std::cmp::Ordering;
diff --git a/datafusion/expr/src/logical_plan/plan.rs b/datafusion/expr/src/logical_plan/plan.rs
index e19b327785..deaea25145 100644
--- a/datafusion/expr/src/logical_plan/plan.rs
+++ b/datafusion/expr/src/logical_plan/plan.rs
@@ -42,7 +42,8 @@ use std::fmt::{self, Debug, Display, Formatter};
use std::hash::{Hash, Hasher};
use std::sync::Arc;
-// backwards compatible
+// backwards compatibility
+pub use datafusion_common::display::{PlanType, StringifiedPlan, ToStringifiedPlan};
pub use datafusion_common::{JoinConstraint, JoinType};
use super::DdlStatement;
@@ -1650,93 +1651,6 @@ pub enum Partitioning {
DistributeBy(Vec<Expr>),
}
-/// Represents which type of plan, when storing multiple
-/// for use in EXPLAIN plans
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub enum PlanType {
- /// The initial LogicalPlan provided to DataFusion
- InitialLogicalPlan,
- /// The LogicalPlan which results from applying an analyzer pass
- AnalyzedLogicalPlan {
- /// The name of the analyzer which produced this plan
- analyzer_name: String,
- },
- /// The LogicalPlan after all analyzer passes have been applied
- FinalAnalyzedLogicalPlan,
- /// The LogicalPlan which results from applying an optimizer pass
- OptimizedLogicalPlan {
- /// The name of the optimizer which produced this plan
- optimizer_name: String,
- },
- /// The final, fully optimized LogicalPlan that was converted to a physical plan
- FinalLogicalPlan,
- /// The initial physical plan, prepared for execution
- InitialPhysicalPlan,
- /// The ExecutionPlan which results from applying an optimizer pass
- OptimizedPhysicalPlan {
- /// The name of the optimizer which produced this plan
- optimizer_name: String,
- },
- /// The final, fully optimized physical which would be executed
- FinalPhysicalPlan,
-}
-
-impl Display for PlanType {
- fn fmt(&self, f: &mut Formatter) -> fmt::Result {
- match self {
- PlanType::InitialLogicalPlan => write!(f, "initial_logical_plan"),
- PlanType::AnalyzedLogicalPlan { analyzer_name } => {
- write!(f, "logical_plan after {analyzer_name}")
- }
- PlanType::FinalAnalyzedLogicalPlan => write!(f, "analyzed_logical_plan"),
- PlanType::OptimizedLogicalPlan { optimizer_name } => {
- write!(f, "logical_plan after {optimizer_name}")
- }
- PlanType::FinalLogicalPlan => write!(f, "logical_plan"),
- PlanType::InitialPhysicalPlan => write!(f, "initial_physical_plan"),
- PlanType::OptimizedPhysicalPlan { optimizer_name } => {
- write!(f, "physical_plan after {optimizer_name}")
- }
- PlanType::FinalPhysicalPlan => write!(f, "physical_plan"),
- }
- }
-}
-
-/// Represents some sort of execution plan, in String form
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct StringifiedPlan {
- /// An identifier of what type of plan this string represents
- pub plan_type: PlanType,
- /// The string representation of the plan
- pub plan: Arc<String>,
-}
-
-impl StringifiedPlan {
- /// Create a new Stringified plan of `plan_type` with string
- /// representation `plan`
- pub fn new(plan_type: PlanType, plan: impl Into<String>) -> Self {
- StringifiedPlan {
- plan_type,
- plan: Arc::new(plan.into()),
- }
- }
-
- /// returns true if this plan should be displayed. Generally
- /// `verbose_mode = true` will display all available plans
- pub fn should_display(&self, verbose_mode: bool) -> bool {
- match self.plan_type {
- PlanType::FinalLogicalPlan | PlanType::FinalPhysicalPlan => true,
- _ => verbose_mode,
- }
- }
-}
-
-/// Trait for something that can be formatted as a stringified plan
-pub trait ToStringifiedPlan {
- /// Create a stringified plan with the specified type
- fn to_stringified(&self, plan_type: PlanType) -> StringifiedPlan;
-}
-
/// Unnest a column that contains a nested list type.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Unnest {