Skip to content

Commit

Permalink
Merge branch 'apache:main' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
comphead authored Jul 10, 2023
2 parents 6507527 + d23e48f commit b2294b8
Show file tree
Hide file tree
Showing 104 changed files with 5,407 additions and 3,072 deletions.
397 changes: 205 additions & 192 deletions datafusion-cli/Cargo.lock

Large diffs are not rendered by default.

11 changes: 9 additions & 2 deletions datafusion-examples/examples/custom_datasource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ use datafusion::execution::context::{SessionState, TaskContext};
use datafusion::physical_plan::expressions::PhysicalSortExpr;
use datafusion::physical_plan::memory::MemoryStream;
use datafusion::physical_plan::{
project_schema, ExecutionPlan, SendableRecordBatchStream, Statistics,
project_schema, DisplayAs, DisplayFormatType, ExecutionPlan,
SendableRecordBatchStream, Statistics,
};
use datafusion::prelude::*;
use datafusion_expr::{Expr, LogicalPlanBuilder};
use std::any::Any;
use std::collections::{BTreeMap, HashMap};
use std::fmt::{Debug, Formatter};
use std::fmt::{self, Debug, Formatter};
use std::sync::{Arc, Mutex};
use std::time::Duration;
use tokio::time::timeout;
Expand Down Expand Up @@ -204,6 +205,12 @@ impl CustomExec {
}
}

impl DisplayAs for CustomExec {
fn fmt_as(&self, _t: DisplayFormatType, f: &mut fmt::Formatter) -> std::fmt::Result {
write!(f, "CustomExec")
}
}

impl ExecutionPlan for CustomExec {
fn as_any(&self) -> &dyn Any {
self
Expand Down
8 changes: 2 additions & 6 deletions datafusion/common/src/dfschema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -384,12 +384,8 @@ impl DFSchema {
let self_fields = self.fields().iter();
let other_fields = other.fields().iter();
self_fields.zip(other_fields).all(|(f1, f2)| {
// TODO: resolve field when exist alias
// f1.qualifier() == f2.qualifier()
// && f1.name() == f2.name()
// column(t1.a) field is "t1"."a"
// column(x) as t1.a field is ""."t1.a"
f1.qualified_name() == f2.qualified_name()
f1.qualifier() == f2.qualifier()
&& f1.name() == f2.name()
&& Self::datatype_is_semantically_equal(f1.data_type(), f2.data_type())
})
}
Expand Down
105 changes: 105 additions & 0 deletions datafusion/common/src/display/graphviz.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
// 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.

//! Logic related to creating DOT language graphs.

use std::fmt;

#[derive(Default)]
pub struct GraphvizBuilder {
id_gen: usize,
}

impl GraphvizBuilder {
// Generate next id in graphviz.
pub fn next_id(&mut self) -> usize {
self.id_gen += 1;
self.id_gen
}

// Write out the start of whole graph.
pub fn start_graph(&mut self, f: &mut fmt::Formatter) -> fmt::Result {
writeln!(
f,
r#"
// Begin DataFusion GraphViz Plan,
// display it online here: https://dreampuf.github.io/GraphvizOnline
"#
)?;
writeln!(f, "digraph {{")
}

pub fn end_graph(&mut self, f: &mut fmt::Formatter) -> fmt::Result {
writeln!(f, "}}")?;
writeln!(f, "// End DataFusion GraphViz Plan")
}

// write out the start of the subgraph cluster
pub fn start_cluster(&mut self, f: &mut fmt::Formatter, title: &str) -> fmt::Result {
writeln!(f, " subgraph cluster_{}", self.next_id())?;
writeln!(f, " {{")?;
writeln!(f, " graph[label={}]", Self::quoted(title))
}

// write out the end of the subgraph cluster
pub fn end_cluster(&mut self, f: &mut fmt::Formatter) -> fmt::Result {
writeln!(f, " }}")
}

/// makes a quoted string suitable for inclusion in a graphviz chart
pub fn quoted(label: &str) -> String {
let label = label.replace('"', "_");
format!("\"{label}\"")
}

pub fn add_node(
&self,
f: &mut fmt::Formatter,
id: usize,
label: &str,
tooltip: Option<&str>,
) -> fmt::Result {
if let Some(tooltip) = tooltip {
writeln!(
f,
" {}[shape=box label={}, tooltip={}]",
id,
GraphvizBuilder::quoted(label),
GraphvizBuilder::quoted(tooltip),
)
} else {
writeln!(
f,
" {}[shape=box label={}]",
id,
GraphvizBuilder::quoted(label),
)
}
}

pub fn add_edge(
&self,
f: &mut fmt::Formatter,
from_id: usize,
to_id: usize,
) -> fmt::Result {
writeln!(
f,
" {from_id} -> {to_id} [arrowhead=none, arrowtail=normal, dir=back]"
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@

//! Types for plan display

mod graphviz;
pub use graphviz::*;

use std::{
fmt::{self, Display, Formatter},
sync::Arc,
Expand Down
Loading

0 comments on commit b2294b8

Please sign in to comment.