You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ag...@apache.org on 2024/02/25 17:18:41 UTC

(arrow-datafusion) branch main updated: Add test to prevent circular dependencies from being added (#9292)

This is an automated email from the ASF dual-hosted git repository.

agrove 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 10cbb056a3 Add test to prevent circular dependencies from being added (#9292)
10cbb056a3 is described below

commit 10cbb056a31f409fb1303df4601d777cedd3aaed
Author: Andy Grove <an...@gmail.com>
AuthorDate: Sun Feb 25 10:18:35 2024 -0700

    Add test to prevent circular dependencies from being added (#9292)
---
 datafusion/core/Cargo.toml        |   1 +
 datafusion/core/tests/depcheck.rs |  78 ++++++
 dev/release/crate-deps.dot        | 101 +++++---
 dev/release/crate-deps.svg        | 524 +++++++++++++++++++++++++++-----------
 4 files changed, 524 insertions(+), 180 deletions(-)

diff --git a/datafusion/core/Cargo.toml b/datafusion/core/Cargo.toml
index 506be6667e..c3bd89037c 100644
--- a/datafusion/core/Cargo.toml
+++ b/datafusion/core/Cargo.toml
@@ -122,6 +122,7 @@ zstd = { version = "0.13", optional = true, default-features = false }
 [dev-dependencies]
 async-trait = { workspace = true }
 bigdecimal = { workspace = true }
+cargo = "0.77.0"
 criterion = { version = "0.5", features = ["async_tokio"] }
 csv = "1.1.6"
 ctor = { workspace = true }
diff --git a/datafusion/core/tests/depcheck.rs b/datafusion/core/tests/depcheck.rs
new file mode 100644
index 0000000000..9444881869
--- /dev/null
+++ b/datafusion/core/tests/depcheck.rs
@@ -0,0 +1,78 @@
+// 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.
+
+/// Check for circular dependencies between DataFusion crates
+use std::collections::{HashMap, HashSet};
+use std::env;
+use std::path::Path;
+
+use cargo::util::config::Config;
+#[test]
+fn test_deps() -> Result<(), Box<dyn std::error::Error>> {
+    let config = Config::default()?;
+    let path = env::var("CARGO_MANIFEST_DIR").unwrap();
+    let dir = Path::new(&path);
+    let root_cargo_toml = dir.join("Cargo.toml");
+    let workspace = cargo::core::Workspace::new(&root_cargo_toml, &config)?;
+    let (_, resolve) = cargo::ops::resolve_ws(&workspace)?;
+
+    let mut package_deps = HashMap::new();
+    for package_id in resolve
+        .iter()
+        .filter(|id| id.name().starts_with("datafusion"))
+    {
+        let deps: Vec<String> = resolve
+            .deps(package_id)
+            .filter(|(package_id, _)| package_id.name().starts_with("datafusion"))
+            .map(|(package_id, _)| package_id.name().to_string())
+            .collect();
+        package_deps.insert(package_id.name().to_string(), deps);
+    }
+
+    // check for circular dependencies
+    for (root_package, deps) in &package_deps {
+        let mut seen = HashSet::new();
+        for dep in deps {
+            check_circular_deps(root_package, dep, &package_deps, &mut seen);
+        }
+    }
+
+    Ok(())
+}
+
+fn check_circular_deps(
+    root_package: &str,
+    current_dep: &str,
+    package_deps: &HashMap<String, Vec<String>>,
+    seen: &mut HashSet<String>,
+) {
+    if root_package == current_dep {
+        panic!(
+            "circular dependency detected from {root_package} to self via one of {:?}",
+            seen
+        );
+    }
+    if seen.contains(current_dep) {
+        return;
+    }
+    seen.insert(current_dep.to_string());
+    if let Some(deps) = package_deps.get(current_dep) {
+        for dep in deps {
+            check_circular_deps(root_package, dep, package_deps, seen);
+        }
+    }
+}
diff --git a/dev/release/crate-deps.dot b/dev/release/crate-deps.dot
index 618eb56afb..69811c7d61 100644
--- a/dev/release/crate-deps.dot
+++ b/dev/release/crate-deps.dot
@@ -16,39 +16,76 @@
 // under the License.
 
 digraph G {
-
-    datafusion_common
-
-	datafusion_expr -> datafusion_common
-
-	datafusion_sql -> datafusion_common
-	datafusion_sql -> datafusion_expr
-
-	datafusion_optimizer -> datafusion_common
-	datafusion_optimizer -> datafusion_expr
-
-	datafusion_physical_expr -> datafusion_common
-	datafusion_physical_expr -> datafusion_expr
-
-        datafusion_execution -> datafusion_common
-        datafusion_execution -> datafusion_expr
-
+        datafusion_examples
+        datafusion_examples -> datafusion
+        datafusion_examples -> datafusion_common
+        datafusion_examples -> datafusion_expr
+        datafusion_examples -> datafusion_optimizer
+        datafusion_examples -> datafusion_physical_expr
+        datafusion_examples -> datafusion_sql
+        datafusion_expr
+        datafusion_expr -> datafusion_common
+        datafusion_functions
+        datafusion_functions -> datafusion_common
+        datafusion_functions -> datafusion_execution
+        datafusion_functions -> datafusion_expr
+        datafusion_wasmtest
+        datafusion_wasmtest -> datafusion
+        datafusion_wasmtest -> datafusion_common
+        datafusion_wasmtest -> datafusion_execution
+        datafusion_wasmtest -> datafusion_expr
+        datafusion_wasmtest -> datafusion_optimizer
+        datafusion_wasmtest -> datafusion_physical_expr
+        datafusion_wasmtest -> datafusion_physical_plan
+        datafusion_wasmtest -> datafusion_sql
+        datafusion_common
+        datafusion_sql
+        datafusion_sql -> datafusion_common
+        datafusion_sql -> datafusion_expr
+        datafusion_physical_plan
         datafusion_physical_plan -> datafusion_common
         datafusion_physical_plan -> datafusion_execution
         datafusion_physical_plan -> datafusion_expr
         datafusion_physical_plan -> datafusion_physical_expr
-
-	datafusion -> datafusion_common
-    datafusion -> datafusion_execution
-	datafusion -> datafusion_expr
-	datafusion -> datafusion_optimizer
-	datafusion -> datafusion_physical_expr
-	datafusion -> datafusion_physical_plan
-	datafusion -> datafusion_sql
-
-	datafusion_proto -> datafusion
-
-	datafusion_substrait -> datafusion
-
-	datafusion_cli -> datafusion
-}
+        datafusion_benchmarks
+        datafusion_benchmarks -> datafusion
+        datafusion_benchmarks -> datafusion_common
+        datafusion_benchmarks -> datafusion_proto
+        datafusion_docs_tests
+        datafusion_docs_tests -> datafusion
+        datafusion_optimizer
+        datafusion_optimizer -> datafusion_common
+        datafusion_optimizer -> datafusion_expr
+        datafusion_optimizer -> datafusion_physical_expr
+        datafusion_optimizer -> datafusion_sql
+        datafusion_proto
+        datafusion_proto -> datafusion
+        datafusion_proto -> datafusion_common
+        datafusion_proto -> datafusion_expr
+        datafusion_physical_expr
+        datafusion_physical_expr -> datafusion_common
+        datafusion_physical_expr -> datafusion_execution
+        datafusion_physical_expr -> datafusion_expr
+        datafusion_sqllogictest
+        datafusion_sqllogictest -> datafusion
+        datafusion_sqllogictest -> datafusion_common
+        datafusion
+        datafusion -> datafusion_common
+        datafusion -> datafusion_execution
+        datafusion -> datafusion_expr
+        datafusion -> datafusion_functions
+        datafusion -> datafusion_functions_array
+        datafusion -> datafusion_optimizer
+        datafusion -> datafusion_physical_expr
+        datafusion -> datafusion_physical_plan
+        datafusion -> datafusion_sql
+        datafusion_functions_array
+        datafusion_functions_array -> datafusion_common
+        datafusion_functions_array -> datafusion_execution
+        datafusion_functions_array -> datafusion_expr
+        datafusion_execution
+        datafusion_execution -> datafusion_common
+        datafusion_execution -> datafusion_expr
+        datafusion_substrait
+        datafusion_substrait -> datafusion
+}
\ No newline at end of file
diff --git a/dev/release/crate-deps.svg b/dev/release/crate-deps.svg
index a7c7b7fe4a..cf60bf7526 100644
--- a/dev/release/crate-deps.svg
+++ b/dev/release/crate-deps.svg
@@ -1,217 +1,445 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 8.1.0 (20230707.0739)
+<!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: G Pages: 1 -->
-<svg width="900pt" height="404pt"
- viewBox="0.00 0.00 900.01 404.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 400)">
+<svg width="1695pt" height="548pt"
+ viewBox="0.00 0.00 1695.02 548.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 544)">
 <title>G</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-400 896.01,-400 896.01,4 -4,4"/>
-<!-- datafusion_common -->
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-544 1691.02,-544 1691.02,4 -4,4"/>
+<!-- datafusion_examples -->
 <g id="node1" class="node">
-<title>datafusion_common</title>
-<ellipse fill="none" stroke="black" cx="396.28" cy="-18" rx="87.18" ry="18"/>
-<text text-anchor="middle" x="396.28" y="-12.95" font-family="Times,serif" font-size="14.00">datafusion_common</text>
+<title>datafusion_examples</title>
+<ellipse fill="none" stroke="black" cx="144.38" cy="-450" rx="107.78" ry="18"/>
+<text text-anchor="middle" x="144.38" y="-446.3" font-family="Times,serif" font-size="14.00">datafusion_examples</text>
 </g>
-<!-- datafusion_expr -->
+<!-- datafusion -->
 <g id="node2" class="node">
-<title>datafusion_expr</title>
-<ellipse fill="none" stroke="black" cx="396.28" cy="-90" rx="70.29" ry="18"/>
-<text text-anchor="middle" x="396.28" y="-84.95" font-family="Times,serif" font-size="14.00">datafusion_expr</text>
+<title>datafusion</title>
+<ellipse fill="none" stroke="black" cx="974.38" cy="-378" rx="59.59" ry="18"/>
+<text text-anchor="middle" x="974.38" y="-374.3" font-family="Times,serif" font-size="14.00">datafusion</text>
 </g>
-<!-- datafusion_expr&#45;&gt;datafusion_common -->
+<!-- datafusion_examples&#45;&gt;datafusion -->
 <g id="edge1" class="edge">
-<title>datafusion_expr&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M396.28,-71.7C396.28,-64.24 396.28,-55.32 396.28,-46.97"/>
-<polygon fill="black" stroke="black" points="399.78,-47.1 396.28,-37.1 392.78,-47.1 399.78,-47.1"/>
+<title>datafusion_examples&#45;&gt;datafusion</title>
+<path fill="none" stroke="black" d="M238.38,-441.07C407.7,-426.79 759.98,-397.08 907.32,-384.66"/>
+<polygon fill="black" stroke="black" points="907.9,-388.12 917.57,-383.79 907.31,-381.14 907.9,-388.12"/>
 </g>
-<!-- datafusion_sql -->
+<!-- datafusion_common -->
 <g id="node3" class="node">
-<title>datafusion_sql</title>
-<ellipse fill="none" stroke="black" cx="88.28" cy="-162" rx="64.66" ry="18"/>
-<text text-anchor="middle" x="88.28" y="-156.95" font-family="Times,serif" font-size="14.00">datafusion_sql</text>
+<title>datafusion_common</title>
+<ellipse fill="none" stroke="black" cx="817.38" cy="-18" rx="102.88" ry="18"/>
+<text text-anchor="middle" x="817.38" y="-14.3" font-family="Times,serif" font-size="14.00">datafusion_common</text>
 </g>
-<!-- datafusion_sql&#45;&gt;datafusion_common -->
+<!-- datafusion_examples&#45;&gt;datafusion_common -->
 <g id="edge2" class="edge">
-<title>datafusion_sql&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M120.66,-146.07C176.1,-120.51 289.31,-68.32 352.01,-39.41"/>
-<polygon fill="black" stroke="black" points="353.38,-42.17 360.99,-34.81 350.45,-35.81 353.38,-42.17"/>
+<title>datafusion_examples&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M120.33,-432.33C89.06,-408.49 38.38,-361.45 38.38,-307 38.38,-307 38.38,-307 38.38,-161 38.38,-86.89 109.11,-95.52 179.38,-72 274.07,-40.31 550.14,-26.99 706.33,-21.87"/>
+<polygon fill="black" stroke="black" points="706.56,-25.37 716.44,-21.55 706.33,-18.37 706.56,-25.37"/>
 </g>
-<!-- datafusion_sql&#45;&gt;datafusion_expr -->
+<!-- datafusion_expr -->
+<g id="node4" class="node">
+<title>datafusion_expr</title>
+<ellipse fill="none" stroke="black" cx="636.38" cy="-90" rx="85.29" ry="18"/>
+<text text-anchor="middle" x="636.38" y="-86.3" font-family="Times,serif" font-size="14.00">datafusion_expr</text>
+</g>
+<!-- datafusion_examples&#45;&gt;datafusion_expr -->
 <g id="edge3" class="edge">
-<title>datafusion_sql&#45;&gt;datafusion_expr</title>
-<path fill="none" stroke="black" d="M136.56,-149.7C144.81,-147.79 153.29,-145.83 161.28,-144 219.71,-130.61 286.38,-115.6 333.74,-104.98"/>
-<polygon fill="black" stroke="black" points="334.45,-108.18 343.45,-102.58 332.92,-101.35 334.45,-108.18"/>
+<title>datafusion_examples&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M132.74,-431.83C106.54,-390.84 48.73,-285.5 95.38,-216 145.15,-141.87 406.15,-109.57 546.64,-97.38"/>
+<polygon fill="black" stroke="black" points="547.29,-100.84 556.96,-96.5 546.69,-93.86 547.29,-100.84"/>
 </g>
 <!-- datafusion_optimizer -->
-<g id="node4" class="node">
+<g id="node5" class="node">
 <title>datafusion_optimizer</title>
-<ellipse fill="none" stroke="black" cx="260.28" cy="-162" rx="89.74" ry="18"/>
-<text text-anchor="middle" x="260.28" y="-156.95" font-family="Times,serif" font-size="14.00">datafusion_optimizer</text>
+<ellipse fill="none" stroke="black" cx="327.38" cy="-306" rx="108.58" ry="18"/>
+<text text-anchor="middle" x="327.38" y="-302.3" font-family="Times,serif" font-size="14.00">datafusion_optimizer</text>
 </g>
-<!-- datafusion_optimizer&#45;&gt;datafusion_common -->
+<!-- datafusion_examples&#45;&gt;datafusion_optimizer -->
 <g id="edge4" class="edge">
+<title>datafusion_examples&#45;&gt;datafusion_optimizer</title>
+<path fill="none" stroke="black" d="M166.09,-432.15C198.84,-406.75 260.94,-358.56 297.79,-329.96"/>
+<polygon fill="black" stroke="black" points="299.95,-332.72 305.7,-323.82 295.65,-327.19 299.95,-332.72"/>
+</g>
+<!-- datafusion_physical_expr -->
+<g id="node6" class="node">
+<title>datafusion_physical_expr</title>
+<ellipse fill="none" stroke="black" cx="480.38" cy="-234" rx="127.28" ry="18"/>
+<text text-anchor="middle" x="480.38" y="-230.3" font-family="Times,serif" font-size="14.00">datafusion_physical_expr</text>
+</g>
+<!-- datafusion_examples&#45;&gt;datafusion_physical_expr -->
+<g id="edge5" class="edge">
+<title>datafusion_examples&#45;&gt;datafusion_physical_expr</title>
+<path fill="none" stroke="black" d="M214.78,-436.27C282.15,-420.68 382.57,-388.01 445.38,-324 461.94,-307.12 470.91,-281.48 475.61,-262.05"/>
+<polygon fill="black" stroke="black" points="479.03,-262.78 477.75,-252.26 472.19,-261.28 479.03,-262.78"/>
+</g>
+<!-- datafusion_sql -->
+<g id="node7" class="node">
+<title>datafusion_sql</title>
+<ellipse fill="none" stroke="black" cx="181.38" cy="-234" rx="77.19" ry="18"/>
+<text text-anchor="middle" x="181.38" y="-230.3" font-family="Times,serif" font-size="14.00">datafusion_sql</text>
+</g>
+<!-- datafusion_examples&#45;&gt;datafusion_sql -->
+<g id="edge6" class="edge">
+<title>datafusion_examples&#45;&gt;datafusion_sql</title>
+<path fill="none" stroke="black" d="M139.73,-431.93C132.4,-401.83 120.71,-337.82 138.38,-288 142.11,-277.51 148.89,-267.58 155.98,-259.21"/>
+<polygon fill="black" stroke="black" points="158.67,-261.46 162.79,-251.7 153.48,-256.75 158.67,-261.46"/>
+</g>
+<!-- datafusion&#45;&gt;datafusion_common -->
+<g id="edge41" class="edge">
+<title>datafusion&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M1032.05,-373.07C1164.93,-362.45 1481.38,-327.44 1481.38,-235 1481.38,-235 1481.38,-235 1481.38,-161 1481.38,-49.59 1119.38,-25.28 929.96,-20.19"/>
+<polygon fill="black" stroke="black" points="929.76,-16.69 919.68,-19.93 929.59,-23.69 929.76,-16.69"/>
+</g>
+<!-- datafusion&#45;&gt;datafusion_expr -->
+<g id="edge43" class="edge">
+<title>datafusion&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M955.24,-360.8C898.46,-312.76 730.77,-170.86 664.13,-114.48"/>
+<polygon fill="black" stroke="black" points="666.05,-111.52 656.16,-107.73 661.53,-116.86 666.05,-111.52"/>
+</g>
+<!-- datafusion&#45;&gt;datafusion_optimizer -->
+<g id="edge46" class="edge">
+<title>datafusion&#45;&gt;datafusion_optimizer</title>
+<path fill="none" stroke="black" d="M919.22,-371.03C809.73,-359.19 563.67,-332.56 425.78,-317.65"/>
+<polygon fill="black" stroke="black" points="425.96,-314.14 415.64,-316.55 425.2,-321.1 425.96,-314.14"/>
+</g>
+<!-- datafusion&#45;&gt;datafusion_physical_expr -->
+<g id="edge47" class="edge">
+<title>datafusion&#45;&gt;datafusion_physical_expr</title>
+<path fill="none" stroke="black" d="M914.47,-377.77C837.99,-376.73 702.92,-368 597.38,-324 561.14,-308.89 526.2,-279.79 504.09,-258.98"/>
+<polygon fill="black" stroke="black" points="506.46,-256.41 496.82,-252 501.61,-261.45 506.46,-256.41"/>
+</g>
+<!-- datafusion&#45;&gt;datafusion_sql -->
+<g id="edge49" class="edge">
+<title>datafusion&#45;&gt;datafusion_sql</title>
+<path fill="none" stroke="black" d="M914.48,-376.67C743.89,-375.21 264.27,-367.27 209.38,-324 190.86,-309.4 184.35,-282.61 182.18,-262.23"/>
+<polygon fill="black" stroke="black" points="185.67,-261.95 181.4,-252.25 178.69,-262.49 185.67,-261.95"/>
+</g>
+<!-- datafusion_functions -->
+<g id="node8" class="node">
+<title>datafusion_functions</title>
+<ellipse fill="none" stroke="black" cx="1019.38" cy="-234" rx="106.68" ry="18"/>
+<text text-anchor="middle" x="1019.38" y="-230.3" font-family="Times,serif" font-size="14.00">datafusion_functions</text>
+</g>
+<!-- datafusion&#45;&gt;datafusion_functions -->
+<g id="edge44" class="edge">
+<title>datafusion&#45;&gt;datafusion_functions</title>
+<path fill="none" stroke="black" d="M979.81,-359.87C987.51,-335.56 1001.69,-290.82 1010.82,-262.01"/>
+<polygon fill="black" stroke="black" points="1014.25,-262.78 1013.94,-252.19 1007.58,-260.66 1014.25,-262.78"/>
+</g>
+<!-- datafusion_execution -->
+<g id="node9" class="node">
+<title>datafusion_execution</title>
+<ellipse fill="none" stroke="black" cx="886.38" cy="-162" rx="108.58" ry="18"/>
+<text text-anchor="middle" x="886.38" y="-158.3" font-family="Times,serif" font-size="14.00">datafusion_execution</text>
+</g>
+<!-- datafusion&#45;&gt;datafusion_execution -->
+<g id="edge42" class="edge">
+<title>datafusion&#45;&gt;datafusion_execution</title>
+<path fill="none" stroke="black" d="M969.67,-359.99C964.02,-341.35 953.41,-311.04 938.38,-288 926.19,-269.31 913.69,-271.79 903.38,-252 893.36,-232.75 889.21,-208.41 887.5,-190.05"/>
+<polygon fill="black" stroke="black" points="890.99,-189.73 886.76,-180.02 884.01,-190.25 890.99,-189.73"/>
+</g>
+<!-- datafusion_physical_plan -->
+<g id="node11" class="node">
+<title>datafusion_physical_plan</title>
+<ellipse fill="none" stroke="black" cx="732.38" cy="-306" rx="126.18" ry="18"/>
+<text text-anchor="middle" x="732.38" y="-302.3" font-family="Times,serif" font-size="14.00">datafusion_physical_plan</text>
+</g>
+<!-- datafusion&#45;&gt;datafusion_physical_plan -->
+<g id="edge48" class="edge">
+<title>datafusion&#45;&gt;datafusion_physical_plan</title>
+<path fill="none" stroke="black" d="M932.78,-364.97C895.04,-354.05 838.86,-337.8 795.58,-325.28"/>
+<polygon fill="black" stroke="black" points="796.29,-321.84 785.71,-322.43 794.34,-328.57 796.29,-321.84"/>
+</g>
+<!-- datafusion_functions_array -->
+<g id="node16" class="node">
+<title>datafusion_functions_array</title>
+<ellipse fill="none" stroke="black" cx="1279.38" cy="-234" rx="135.68" ry="18"/>
+<text text-anchor="middle" x="1279.38" y="-230.3" font-family="Times,serif" font-size="14.00">datafusion_functions_array</text>
+</g>
+<!-- datafusion&#45;&gt;datafusion_functions_array -->
+<g id="edge45" class="edge">
+<title>datafusion&#45;&gt;datafusion_functions_array</title>
+<path fill="none" stroke="black" d="M1005.59,-362.47C1059.89,-337.19 1171.92,-285.03 1234.54,-255.88"/>
+<polygon fill="black" stroke="black" points="1236.19,-258.97 1243.78,-251.58 1233.23,-252.63 1236.19,-258.97"/>
+</g>
+<!-- datafusion_expr&#45;&gt;datafusion_common -->
+<g id="edge7" class="edge">
+<title>datafusion_expr&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M675.66,-73.81C702.56,-63.41 738.47,-49.52 767.41,-38.33"/>
+<polygon fill="black" stroke="black" points="768.87,-41.52 776.93,-34.64 766.34,-34.99 768.87,-41.52"/>
+</g>
+<!-- datafusion_optimizer&#45;&gt;datafusion_common -->
+<g id="edge29" class="edge">
 <title>datafusion_optimizer&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M268.56,-143.8C278.33,-124.73 295.97,-93.77 317.28,-72 328.82,-60.21 343.39,-49.54 356.87,-40.93"/>
-<polygon fill="black" stroke="black" points="358.31,-43.53 364.97,-35.3 354.62,-37.58 358.31,-43.53"/>
+<path fill="none" stroke="black" d="M323.59,-287.75C320.33,-269.42 317.31,-239.86 325.38,-216 338.29,-177.85 349.94,-170.36 380.38,-144 472.7,-64.04 613.13,-35.08 709.74,-24.67"/>
+<polygon fill="black" stroke="black" points="710.24,-28.14 719.83,-23.63 709.52,-21.17 710.24,-28.14"/>
 </g>
 <!-- datafusion_optimizer&#45;&gt;datafusion_expr -->
-<g id="edge5" class="edge">
+<g id="edge30" class="edge">
 <title>datafusion_optimizer&#45;&gt;datafusion_expr</title>
-<path fill="none" stroke="black" d="M291.82,-144.76C310.97,-134.91 335.6,-122.23 356.13,-111.66"/>
-<polygon fill="black" stroke="black" points="357.55,-114.35 364.84,-106.67 354.35,-108.13 357.55,-114.35"/>
+<path fill="none" stroke="black" d="M326.16,-287.98C325.67,-268.49 327.82,-236.59 344.38,-216 397.49,-150 492,-118.2 559.1,-103.32"/>
+<polygon fill="black" stroke="black" points="560.17,-106.67 569.21,-101.16 558.7,-99.83 560.17,-106.67"/>
 </g>
-<!-- datafusion_physical_expr -->
-<g id="node5" class="node">
-<title>datafusion_physical_expr</title>
-<ellipse fill="none" stroke="black" cx="550.28" cy="-162" rx="105.6" ry="18"/>
-<text text-anchor="middle" x="550.28" y="-156.95" font-family="Times,serif" font-size="14.00">datafusion_physical_expr</text>
+<!-- datafusion_optimizer&#45;&gt;datafusion_physical_expr -->
+<g id="edge31" class="edge">
+<title>datafusion_optimizer&#45;&gt;datafusion_physical_expr</title>
+<path fill="none" stroke="black" d="M362.48,-288.94C384.12,-279.04 412.07,-266.25 435.33,-255.61"/>
+<polygon fill="black" stroke="black" points="437.01,-258.69 444.65,-251.35 434.1,-252.33 437.01,-258.69"/>
+</g>
+<!-- datafusion_optimizer&#45;&gt;datafusion_sql -->
+<g id="edge32" class="edge">
+<title>datafusion_optimizer&#45;&gt;datafusion_sql</title>
+<path fill="none" stroke="black" d="M293.52,-288.76C272.44,-278.66 245.18,-265.59 222.81,-254.86"/>
+<polygon fill="black" stroke="black" points="224.09,-251.59 213.56,-250.43 221.06,-257.91 224.09,-251.59"/>
 </g>
 <!-- datafusion_physical_expr&#45;&gt;datafusion_common -->
-<g id="edge6" class="edge">
+<g id="edge36" class="edge">
 <title>datafusion_physical_expr&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M537.99,-143.69C524.08,-124.79 500.1,-94.25 475.28,-72 462.69,-60.72 447.53,-49.98 433.88,-41.16"/>
-<polygon fill="black" stroke="black" points="436.04,-37.75 425.71,-35.38 432.3,-43.67 436.04,-37.75"/>
+<path fill="none" stroke="black" d="M481.69,-215.81C485.19,-182.52 497.82,-109.29 542.38,-72 568.76,-49.93 649.98,-36.06 717.37,-28.08"/>
+<polygon fill="black" stroke="black" points="718.1,-31.52 727.63,-26.89 717.29,-24.56 718.1,-31.52"/>
 </g>
 <!-- datafusion_physical_expr&#45;&gt;datafusion_expr -->
-<g id="edge7" class="edge">
+<g id="edge38" class="edge">
 <title>datafusion_physical_expr&#45;&gt;datafusion_expr</title>
-<path fill="none" stroke="black" d="M514.56,-144.76C492.17,-134.59 463.16,-121.4 439.48,-110.64"/>
-<polygon fill="black" stroke="black" points="441.24,-107.14 430.69,-106.19 438.35,-113.51 441.24,-107.14"/>
+<path fill="none" stroke="black" d="M498.89,-216.15C526.57,-190.96 578.85,-143.37 610.36,-114.68"/>
+<polygon fill="black" stroke="black" points="612.86,-117.14 617.9,-107.82 608.15,-111.97 612.86,-117.14"/>
 </g>
-<!-- datafusion_execution -->
-<g id="node6" class="node">
-<title>datafusion_execution</title>
-<ellipse fill="none" stroke="black" cx="802.28" cy="-162" rx="89.74" ry="18"/>
-<text text-anchor="middle" x="802.28" y="-156.95" font-family="Times,serif" font-size="14.00">datafusion_execution</text>
+<!-- datafusion_physical_expr&#45;&gt;datafusion_execution -->
+<g id="edge37" class="edge">
+<title>datafusion_physical_expr&#45;&gt;datafusion_execution</title>
+<path fill="none" stroke="black" d="M557.7,-219.67C628.24,-207.51 732.15,-189.59 804.18,-177.17"/>
+<polygon fill="black" stroke="black" points="804.86,-180.61 814.12,-175.46 803.67,-173.71 804.86,-180.61"/>
 </g>
-<!-- datafusion_execution&#45;&gt;datafusion_common -->
-<g id="edge8" class="edge">
-<title>datafusion_execution&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M787.65,-143.81C769.09,-123.22 735.03,-89.34 698.28,-72 633.67,-41.52 553.81,-28.43 492.45,-22.88"/>
-<polygon fill="black" stroke="black" points="492.86,-19.32 482.6,-21.96 492.27,-26.29 492.86,-19.32"/>
+<!-- datafusion_sql&#45;&gt;datafusion_common -->
+<g id="edge19" class="edge">
+<title>datafusion_sql&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M177.9,-215.85C172.25,-182.65 165.44,-109.55 205.38,-72 240.96,-38.55 538.93,-25.83 705.59,-21.31"/>
+<polygon fill="black" stroke="black" points="705.98,-24.8 715.89,-21.03 705.8,-17.8 705.98,-24.8"/>
 </g>
-<!-- datafusion_execution&#45;&gt;datafusion_expr -->
-<g id="edge9" class="edge">
-<title>datafusion_execution&#45;&gt;datafusion_expr</title>
-<path fill="none" stroke="black" d="M735.69,-149.52C660.75,-136.6 539.65,-115.72 464.18,-102.71"/>
-<polygon fill="black" stroke="black" points="464.83,-99.1 454.38,-100.85 463.64,-105.99 464.83,-99.1"/>
+<!-- datafusion_sql&#45;&gt;datafusion_expr -->
+<g id="edge20" class="edge">
+<title>datafusion_sql&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M210.26,-217.08C228.16,-206.95 251.47,-193.27 271.38,-180 293.57,-165.21 294.87,-154.5 319.38,-144 390.71,-113.46 478.09,-100.46 543.03,-94.95"/>
+<polygon fill="black" stroke="black" points="543.56,-98.42 553.25,-94.13 543,-91.44 543.56,-98.42"/>
 </g>
-<!-- datafusion_physical_plan -->
-<g id="node7" class="node">
-<title>datafusion_physical_plan</title>
-<ellipse fill="none" stroke="black" cx="550.28" cy="-234" rx="105.09" ry="18"/>
-<text text-anchor="middle" x="550.28" y="-228.95" font-family="Times,serif" font-size="14.00">datafusion_physical_plan</text>
+<!-- datafusion_functions&#45;&gt;datafusion_common -->
+<g id="edge8" class="edge">
+<title>datafusion_functions&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M1026.08,-216.03C1032.36,-197.16 1039.08,-166.38 1026.38,-144 995,-88.66 928.31,-55.19 878.65,-37"/>
+<polygon fill="black" stroke="black" points="879.56,-33.61 868.96,-33.56 877.22,-40.21 879.56,-33.61"/>
 </g>
-<!-- datafusion_physical_plan&#45;&gt;datafusion_common -->
+<!-- datafusion_functions&#45;&gt;datafusion_expr -->
 <g id="edge10" class="edge">
-<title>datafusion_physical_plan&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M611.93,-219.04C632.47,-211.13 653.19,-198.88 665.28,-180 673.9,-166.53 673.88,-157.49 665.28,-144 623.62,-78.71 538.09,-47 474.59,-31.94"/>
-<polygon fill="black" stroke="black" points="475.73,-28.38 465.2,-29.57 474.18,-35.2 475.73,-28.38"/>
+<title>datafusion_functions&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M1021.9,-215.92C1023.8,-195.75 1023.44,-162.61 1004.38,-144 966.64,-107.14 827.05,-95.75 731.07,-92.32"/>
+<polygon fill="black" stroke="black" points="731.16,-88.82 721.05,-91.99 730.93,-95.82 731.16,-88.82"/>
 </g>
-<!-- datafusion_physical_plan&#45;&gt;datafusion_expr -->
-<g id="edge12" class="edge">
-<title>datafusion_physical_plan&#45;&gt;datafusion_expr</title>
-<path fill="none" stroke="black" d="M497.84,-218.01C476.26,-209.69 452.37,-197.42 435.28,-180 418.68,-163.09 408.56,-137.95 402.8,-118.7"/>
-<polygon fill="black" stroke="black" points="405.92,-117.86 399.9,-109.15 399.17,-119.72 405.92,-117.86"/>
+<!-- datafusion_functions&#45;&gt;datafusion_execution -->
+<g id="edge9" class="edge">
+<title>datafusion_functions&#45;&gt;datafusion_execution</title>
+<path fill="none" stroke="black" d="M988.54,-216.76C970.04,-207.03 946.31,-194.54 926.38,-184.05"/>
+<polygon fill="black" stroke="black" points="928,-180.95 917.52,-179.39 924.74,-187.14 928,-180.95"/>
 </g>
-<!-- datafusion_physical_plan&#45;&gt;datafusion_physical_expr -->
-<g id="edge13" class="edge">
-<title>datafusion_physical_plan&#45;&gt;datafusion_physical_expr</title>
-<path fill="none" stroke="black" d="M550.28,-215.7C550.28,-208.24 550.28,-199.32 550.28,-190.97"/>
-<polygon fill="black" stroke="black" points="553.78,-191.1 550.28,-181.1 546.78,-191.1 553.78,-191.1"/>
+<!-- datafusion_execution&#45;&gt;datafusion_common -->
+<g id="edge53" class="edge">
+<title>datafusion_execution&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M878.06,-143.87C866.15,-119.35 844.12,-74.03 830.14,-45.26"/>
+<polygon fill="black" stroke="black" points="833.25,-43.65 825.74,-36.19 826.96,-46.71 833.25,-43.65"/>
 </g>
-<!-- datafusion_physical_plan&#45;&gt;datafusion_execution -->
+<!-- datafusion_execution&#45;&gt;datafusion_expr -->
+<g id="edge54" class="edge">
+<title>datafusion_execution&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M833.67,-146.24C793.22,-134.91 737.38,-119.28 695.43,-107.53"/>
+<polygon fill="black" stroke="black" points="696.2,-104.11 685.63,-104.79 694.31,-110.85 696.2,-104.11"/>
+</g>
+<!-- datafusion_wasmtest -->
+<g id="node10" class="node">
+<title>datafusion_wasmtest</title>
+<ellipse fill="none" stroke="black" cx="540.38" cy="-450" rx="108.58" ry="18"/>
+<text text-anchor="middle" x="540.38" y="-446.3" font-family="Times,serif" font-size="14.00">datafusion_wasmtest</text>
+</g>
+<!-- datafusion_wasmtest&#45;&gt;datafusion -->
 <g id="edge11" class="edge">
-<title>datafusion_physical_plan&#45;&gt;datafusion_execution</title>
-<path fill="none" stroke="black" d="M603.72,-218.15C643.81,-207.02 698.77,-191.75 740.7,-180.1"/>
-<polygon fill="black" stroke="black" points="741.36,-183.27 750.06,-177.23 739.49,-176.53 741.36,-183.27"/>
+<title>datafusion_wasmtest&#45;&gt;datafusion</title>
+<path fill="none" stroke="black" d="M619.01,-437.59C720.75,-422.79 886.69,-398.58 900.38,-396 906.59,-394.83 913.06,-393.51 919.49,-392.12"/>
+<polygon fill="black" stroke="black" points="920.49,-395.49 929.5,-389.91 918.98,-388.65 920.49,-395.49"/>
 </g>
-<!-- datafusion -->
-<g id="node8" class="node">
-<title>datafusion</title>
-<ellipse fill="none" stroke="black" cx="378.28" cy="-306" rx="49.3" ry="18"/>
-<text text-anchor="middle" x="378.28" y="-300.95" font-family="Times,serif" font-size="14.00">datafusion</text>
+<!-- datafusion_wasmtest&#45;&gt;datafusion_common -->
+<g id="edge12" class="edge">
+<title>datafusion_wasmtest&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M617.4,-437.24C630.72,-435.37 644.44,-433.54 657.38,-432 753.48,-420.54 1519.38,-403.78 1519.38,-307 1519.38,-307 1519.38,-307 1519.38,-161 1519.38,-102.16 1475.29,-95.58 1421.38,-72 1335.95,-34.62 1079.45,-23.6 929.6,-20.35"/>
+<polygon fill="black" stroke="black" points="929.52,-16.85 919.45,-20.14 929.37,-23.84 929.52,-16.85"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_common -->
+<!-- datafusion_wasmtest&#45;&gt;datafusion_expr -->
 <g id="edge14" class="edge">
-<title>datafusion&#45;&gt;datafusion_common</title>
-<path fill="none" stroke="black" d="M329.86,-302.18C213.65,-293.5 -65.71,-260.28 14.28,-144 49.43,-92.9 219.97,-52.49 320.91,-32.57"/>
-<polygon fill="black" stroke="black" points="321.52,-35.82 330.66,-30.47 320.18,-28.95 321.52,-35.82"/>
+<title>datafusion_wasmtest&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M545.58,-431.76C554.76,-401.95 575.01,-339.06 597.38,-288 604.64,-271.43 610.96,-269.26 616.38,-252 630.65,-206.62 634.8,-151.03 635.97,-118.47"/>
+<polygon fill="black" stroke="black" points="639.47,-118.45 636.26,-108.35 632.47,-118.25 639.47,-118.45"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_expr -->
+<!-- datafusion_wasmtest&#45;&gt;datafusion_optimizer -->
+<g id="edge15" class="edge">
+<title>datafusion_wasmtest&#45;&gt;datafusion_optimizer</title>
+<path fill="none" stroke="black" d="M515.53,-432.43C477.24,-406.9 403.74,-357.91 360.82,-329.29"/>
+<polygon fill="black" stroke="black" points="362.67,-326.32 352.41,-323.68 358.78,-332.14 362.67,-326.32"/>
+</g>
+<!-- datafusion_wasmtest&#45;&gt;datafusion_physical_expr -->
 <g id="edge16" class="edge">
-<title>datafusion&#45;&gt;datafusion_expr</title>
-<path fill="none" stroke="black" d="M379.72,-287.85C382.82,-250.99 390.14,-163.92 393.92,-118.96"/>
-<polygon fill="black" stroke="black" points="397.48,-119.49 394.83,-109.23 390.5,-118.9 397.48,-119.49"/>
+<title>datafusion_wasmtest&#45;&gt;datafusion_physical_expr</title>
+<path fill="none" stroke="black" d="M535.57,-431.85C525.17,-394.75 500.52,-306.81 487.98,-262.1"/>
+<polygon fill="black" stroke="black" points="491.28,-260.92 485.22,-252.23 484.54,-262.81 491.28,-260.92"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_sql -->
-<g id="edge20" class="edge">
-<title>datafusion&#45;&gt;datafusion_sql</title>
-<path fill="none" stroke="black" d="M349.68,-291C297.94,-265.66 188.66,-212.15 129.09,-182.99"/>
-<polygon fill="black" stroke="black" points="130.79,-179.43 120.27,-178.18 127.72,-185.72 130.79,-179.43"/>
+<!-- datafusion_wasmtest&#45;&gt;datafusion_sql -->
+<g id="edge18" class="edge">
+<title>datafusion_wasmtest&#45;&gt;datafusion_sql</title>
+<path fill="none" stroke="black" d="M439.39,-443.4C356.27,-432.89 242.93,-403.72 184.38,-324 171.49,-306.44 171.88,-281.25 174.84,-262.15"/>
+<polygon fill="black" stroke="black" points="178.29,-262.72 176.68,-252.25 171.41,-261.44 178.29,-262.72"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_optimizer -->
+<!-- datafusion_wasmtest&#45;&gt;datafusion_execution -->
+<g id="edge13" class="edge">
+<title>datafusion_wasmtest&#45;&gt;datafusion_execution</title>
+<path fill="none" stroke="black" d="M598.04,-434.64C682.46,-412.41 833.41,-367.64 867.38,-324 883.14,-303.76 886.09,-230.71 886.48,-190.32"/>
+<polygon fill="black" stroke="black" points="889.99,-190.12 886.54,-180.1 882.99,-190.09 889.99,-190.12"/>
+</g>
+<!-- datafusion_wasmtest&#45;&gt;datafusion_physical_plan -->
 <g id="edge17" class="edge">
-<title>datafusion&#45;&gt;datafusion_optimizer</title>
-<path fill="none" stroke="black" d="M364.51,-288.43C344.01,-263.77 305.32,-217.2 281.28,-188.27"/>
-<polygon fill="black" stroke="black" points="283.4,-186.36 274.32,-180.9 278.02,-190.83 283.4,-186.36"/>
+<title>datafusion_wasmtest&#45;&gt;datafusion_physical_plan</title>
+<path fill="none" stroke="black" d="M563.16,-432.15C597.52,-406.75 662.67,-358.56 701.34,-329.96"/>
+<polygon fill="black" stroke="black" points="703.68,-332.59 709.63,-323.82 699.51,-326.96 703.68,-332.59"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_physical_expr -->
-<g id="edge18" class="edge">
-<title>datafusion&#45;&gt;datafusion_physical_expr</title>
-<path fill="none" stroke="black" d="M385.83,-287.87C395.2,-268.28 412.86,-236.3 436.28,-216 452.42,-202 472.89,-190.96 492.02,-182.66"/>
-<polygon fill="black" stroke="black" points="493.27,-185.51 501.17,-178.45 490.59,-179.05 493.27,-185.51"/>
+<!-- datafusion_physical_plan&#45;&gt;datafusion_common -->
+<g id="edge21" class="edge">
+<title>datafusion_physical_plan&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M735.32,-287.86C740.6,-258.18 752.64,-195.49 768.38,-144 779.04,-109.17 794.94,-70.29 805.72,-45.28"/>
+<polygon fill="black" stroke="black" points="808.93,-46.66 809.71,-36.09 802.51,-43.87 808.93,-46.66"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_execution -->
-<g id="edge15" class="edge">
-<title>datafusion&#45;&gt;datafusion_execution</title>
-<path fill="none" stroke="black" d="M426.66,-301.78C484.84,-296.62 584.61,-283.64 664.28,-252 704.98,-235.83 746.53,-207.02 773.25,-186.56"/>
-<polygon fill="black" stroke="black" points="774.98,-188.87 780.72,-179.97 770.68,-183.35 774.98,-188.87"/>
+<!-- datafusion_physical_plan&#45;&gt;datafusion_expr -->
+<g id="edge23" class="edge">
+<title>datafusion_physical_plan&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M724.69,-287.85C707.94,-250.5 668.07,-161.63 648.14,-117.21"/>
+<polygon fill="black" stroke="black" points="651.27,-115.63 643.98,-107.94 644.88,-118.49 651.27,-115.63"/>
 </g>
-<!-- datafusion&#45;&gt;datafusion_physical_plan -->
-<g id="edge19" class="edge">
-<title>datafusion&#45;&gt;datafusion_physical_plan</title>
-<path fill="none" stroke="black" d="M410.23,-292C435.6,-281.67 471.54,-267.05 500.65,-255.2"/>
-<polygon fill="black" stroke="black" points="501.69,-258.14 509.64,-251.13 499.06,-251.66 501.69,-258.14"/>
+<!-- datafusion_physical_plan&#45;&gt;datafusion_physical_expr -->
+<g id="edge24" class="edge">
+<title>datafusion_physical_plan&#45;&gt;datafusion_physical_expr</title>
+<path fill="none" stroke="black" d="M677.39,-289.72C638.59,-278.95 586.46,-264.46 545.56,-253.11"/>
+<polygon fill="black" stroke="black" points="546.26,-249.67 535.69,-250.36 544.39,-256.41 546.26,-249.67"/>
+</g>
+<!-- datafusion_physical_plan&#45;&gt;datafusion_execution -->
+<g id="edge22" class="edge">
+<title>datafusion_physical_plan&#45;&gt;datafusion_execution</title>
+<path fill="none" stroke="black" d="M741.25,-287.92C751.89,-268.66 771.21,-237.26 794.38,-216 808.12,-203.39 825.36,-192.48 841.2,-183.88"/>
+<polygon fill="black" stroke="black" points="843.1,-186.84 850.32,-179.09 839.84,-180.64 843.1,-186.84"/>
+</g>
+<!-- datafusion_benchmarks -->
+<g id="node12" class="node">
+<title>datafusion_benchmarks</title>
+<ellipse fill="none" stroke="black" cx="1148.38" cy="-522" rx="120.48" ry="18"/>
+<text text-anchor="middle" x="1148.38" y="-518.3" font-family="Times,serif" font-size="14.00">datafusion_benchmarks</text>
+</g>
+<!-- datafusion_benchmarks&#45;&gt;datafusion -->
+<g id="edge25" class="edge">
+<title>datafusion_benchmarks&#45;&gt;datafusion</title>
+<path fill="none" stroke="black" d="M1149.44,-503.72C1149.68,-483.98 1147,-451.85 1129.38,-432 1106.81,-406.57 1071.52,-393.33 1040.3,-386.44"/>
+<polygon fill="black" stroke="black" points="1040.83,-382.98 1030.34,-384.42 1039.44,-389.84 1040.83,-382.98"/>
+</g>
+<!-- datafusion_benchmarks&#45;&gt;datafusion_common -->
+<g id="edge26" class="edge">
+<title>datafusion_benchmarks&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M1029.67,-519.04C749.26,-513.92 66.41,-498.4 27.38,-468 -5.23,-442.6 0.38,-420.34 0.38,-379 0.38,-379 0.38,-379 0.38,-161 0.38,-113.54 18.38,-95.89 59.38,-72 113.79,-40.3 508.68,-26.4 705.91,-21.39"/>
+<polygon fill="black" stroke="black" points="706.1,-24.88 716.01,-21.13 705.93,-17.89 706.1,-24.88"/>
 </g>
 <!-- datafusion_proto -->
-<g id="node9" class="node">
+<g id="node13" class="node">
 <title>datafusion_proto</title>
-<ellipse fill="none" stroke="black" cx="202.28" cy="-378" rx="73.36" ry="18"/>
-<text text-anchor="middle" x="202.28" y="-372.95" font-family="Times,serif" font-size="14.00">datafusion_proto</text>
+<ellipse fill="none" stroke="black" cx="1292.38" cy="-450" rx="89.08" ry="18"/>
+<text text-anchor="middle" x="1292.38" y="-446.3" font-family="Times,serif" font-size="14.00">datafusion_proto</text>
+</g>
+<!-- datafusion_benchmarks&#45;&gt;datafusion_proto -->
+<g id="edge27" class="edge">
+<title>datafusion_benchmarks&#45;&gt;datafusion_proto</title>
+<path fill="none" stroke="black" d="M1182.15,-504.59C1202.66,-494.62 1229,-481.81 1250.79,-471.22"/>
+<polygon fill="black" stroke="black" points="1252.36,-474.35 1259.82,-466.83 1249.3,-468.05 1252.36,-474.35"/>
 </g>
 <!-- datafusion_proto&#45;&gt;datafusion -->
-<g id="edge21" class="edge">
+<g id="edge33" class="edge">
 <title>datafusion_proto&#45;&gt;datafusion</title>
-<path fill="none" stroke="black" d="M239.6,-362.15C267.76,-350.95 306.43,-335.58 335.78,-323.9"/>
-<polygon fill="black" stroke="black" points="336.74,-326.89 344.74,-319.94 334.15,-320.38 336.74,-326.89"/>
+<path fill="none" stroke="black" d="M1234.43,-436.24C1176.63,-423.52 1088.42,-404.1 1031.07,-391.48"/>
+<polygon fill="black" stroke="black" points="1031.61,-388.01 1021.09,-389.28 1030.1,-394.85 1031.61,-388.01"/>
+</g>
+<!-- datafusion_proto&#45;&gt;datafusion_common -->
+<g id="edge34" class="edge">
+<title>datafusion_proto&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M1368.68,-440.64C1446.96,-427.32 1557.38,-393.25 1557.38,-307 1557.38,-307 1557.38,-307 1557.38,-161 1557.38,-106.3 1521.76,-95.52 1472.38,-72 1379.47,-27.74 1092.21,-19.54 930.67,-18.56"/>
+<polygon fill="black" stroke="black" points="930.23,-15.06 920.21,-18.5 930.2,-22.06 930.23,-15.06"/>
+</g>
+<!-- datafusion_proto&#45;&gt;datafusion_expr -->
+<g id="edge35" class="edge">
+<title>datafusion_proto&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M1329.71,-433.53C1374.42,-412.22 1443.38,-369.26 1443.38,-307 1443.38,-307 1443.38,-307 1443.38,-233 1443.38,-160.79 935.69,-113.79 725.68,-97.44"/>
+<polygon fill="black" stroke="black" points="725.84,-93.95 715.6,-96.67 725.3,-100.93 725.84,-93.95"/>
+</g>
+<!-- datafusion_docs_tests -->
+<g id="node14" class="node">
+<title>datafusion_docs_tests</title>
+<ellipse fill="none" stroke="black" cx="1008.38" cy="-450" rx="112.38" ry="18"/>
+<text text-anchor="middle" x="1008.38" y="-446.3" font-family="Times,serif" font-size="14.00">datafusion_docs_tests</text>
+</g>
+<!-- datafusion_docs_tests&#45;&gt;datafusion -->
+<g id="edge28" class="edge">
+<title>datafusion_docs_tests&#45;&gt;datafusion</title>
+<path fill="none" stroke="black" d="M999.98,-431.7C996.11,-423.73 991.43,-414.1 987.14,-405.26"/>
+<polygon fill="black" stroke="black" points="990.21,-403.57 982.69,-396.1 983.91,-406.63 990.21,-403.57"/>
+</g>
+<!-- datafusion_sqllogictest -->
+<g id="node15" class="node">
+<title>datafusion_sqllogictest</title>
+<ellipse fill="none" stroke="black" cx="1569.38" cy="-450" rx="117.78" ry="18"/>
+<text text-anchor="middle" x="1569.38" y="-446.3" font-family="Times,serif" font-size="14.00">datafusion_sqllogictest</text>
+</g>
+<!-- datafusion_sqllogictest&#45;&gt;datafusion -->
+<g id="edge39" class="edge">
+<title>datafusion_sqllogictest&#45;&gt;datafusion</title>
+<path fill="none" stroke="black" d="M1479.34,-438.41C1358.17,-424.15 1145.58,-399.14 1039.06,-386.61"/>
+<polygon fill="black" stroke="black" points="1039.43,-383.13 1029.09,-385.44 1038.61,-390.08 1039.43,-383.13"/>
+</g>
+<!-- datafusion_sqllogictest&#45;&gt;datafusion_common -->
+<g id="edge40" class="edge">
+<title>datafusion_sqllogictest&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M1574.65,-431.7C1582.24,-405.14 1595.38,-352.61 1595.38,-307 1595.38,-307 1595.38,-307 1595.38,-161 1595.38,-108.7 1565.1,-95.53 1518.38,-72 1467.03,-46.14 1111.46,-29.63 927.36,-22.72"/>
+<polygon fill="black" stroke="black" points="927.23,-19.22 917.1,-22.34 926.97,-26.21 927.23,-19.22"/>
+</g>
+<!-- datafusion_functions_array&#45;&gt;datafusion_common -->
+<g id="edge50" class="edge">
+<title>datafusion_functions_array&#45;&gt;datafusion_common</title>
+<path fill="none" stroke="black" d="M1253.53,-216.22C1203.95,-184.59 1091.36,-115.46 989.38,-72 955.26,-57.46 915.79,-45 883.28,-35.83"/>
+<polygon fill="black" stroke="black" points="884,-32.4 873.43,-33.09 882.12,-39.14 884,-32.4"/>
+</g>
+<!-- datafusion_functions_array&#45;&gt;datafusion_expr -->
+<g id="edge52" class="edge">
+<title>datafusion_functions_array&#45;&gt;datafusion_expr</title>
+<path fill="none" stroke="black" d="M1240.69,-216.61C1191.68,-196.5 1104.24,-162.78 1026.38,-144 924.46,-119.42 804.61,-105.26 724.94,-97.87"/>
+<polygon fill="black" stroke="black" points="725.22,-94.38 714.94,-96.96 724.59,-101.35 725.22,-94.38"/>
+</g>
+<!-- datafusion_functions_array&#45;&gt;datafusion_execution -->
+<g id="edge51" class="edge">
+<title>datafusion_functions_array&#45;&gt;datafusion_execution</title>
+<path fill="none" stroke="black" d="M1201.74,-219.17C1134.05,-207.11 1036.21,-189.69 967.5,-177.45"/>
+<polygon fill="black" stroke="black" points="968.05,-173.99 957.59,-175.68 966.82,-180.88 968.05,-173.99"/>
 </g>
 <!-- datafusion_substrait -->
-<g id="node10" class="node">
+<g id="node17" class="node">
 <title>datafusion_substrait</title>
-<ellipse fill="none" stroke="black" cx="378.28" cy="-378" rx="85.13" ry="18"/>
-<text text-anchor="middle" x="378.28" y="-372.95" font-family="Times,serif" font-size="14.00">datafusion_substrait</text>
+<ellipse fill="none" stroke="black" cx="772.38" cy="-450" rx="105.88" ry="18"/>
+<text text-anchor="middle" x="772.38" y="-446.3" font-family="Times,serif" font-size="14.00">datafusion_substrait</text>
 </g>
 <!-- datafusion_substrait&#45;&gt;datafusion -->
-<g id="edge22" class="edge">
+<g id="edge55" class="edge">
 <title>datafusion_substrait&#45;&gt;datafusion</title>
-<path fill="none" stroke="black" d="M378.28,-359.7C378.28,-352.24 378.28,-343.32 378.28,-334.97"/>
-<polygon fill="black" stroke="black" points="381.78,-335.1 378.28,-325.1 374.78,-335.1 381.78,-335.1"/>
-</g>
-<!-- datafusion_cli -->
-<g id="node11" class="node">
-<title>datafusion_cli</title>
-<ellipse fill="none" stroke="black" cx="544.28" cy="-378" rx="63.12" ry="18"/>
-<text text-anchor="middle" x="544.28" y="-372.95" font-family="Times,serif" font-size="14.00">datafusion_cli</text>
-</g>
-<!-- datafusion_cli&#45;&gt;datafusion -->
-<g id="edge23" class="edge">
-<title>datafusion_cli&#45;&gt;datafusion</title>
-<path fill="none" stroke="black" d="M509.88,-362.5C483.66,-351.44 447.45,-336.17 419.65,-324.45"/>
-<polygon fill="black" stroke="black" points="421.39,-320.96 410.82,-320.3 418.67,-327.41 421.39,-320.96"/>
+<path fill="none" stroke="black" d="M816.71,-433.64C849.38,-422.32 893.73,-406.95 927.07,-395.39"/>
+<polygon fill="black" stroke="black" points="928.3,-398.67 936.6,-392.09 926.01,-392.06 928.3,-398.67"/>
 </g>
 </g>
 </svg>