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

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new e9f22b233 chore!(rust): remove DataFusion driver (#4455)
e9f22b233 is described below

commit e9f22b233423502a7fb2121bf5cfd1d280f6d57c
Author: David Li <[email protected]>
AuthorDate: Tue Jul 7 15:31:23 2026 -0700

    chore!(rust): remove DataFusion driver (#4455)
    
    Maintenance of this driver has moved to
    https://github.com/adbc-drivers/datafusion. Additionally, this makes it
    easier to deal with dependency upgrades (DataFusion tends to lag behind
    a bit).
    
    ---------
    
    Co-authored-by: Bryce Mecum <[email protected]>
---
 .github/dependabot.yml                          |    3 +-
 .github/workflows/rust.yml                      |   39 +-
 dev/release/post-08-rust.sh                     |    2 -
 docs/source/driver/status.rst                   |    1 -
 docs/source/rust/quickstart.rst                 |    7 +-
 rust/Cargo.lock                                 | 2885 +++--------------------
 rust/driver/datafusion/Cargo.toml               |   52 -
 rust/driver/datafusion/README.md                |   60 -
 rust/driver/datafusion/src/lib.rs               |  995 --------
 rust/driver/datafusion/tests/test_datafusion.rs |  224 --
 10 files changed, 313 insertions(+), 3955 deletions(-)

diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index fd56bc0db..9ec20de05 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -92,10 +92,9 @@ updates:
     commit-message:
       prefix: "chore(rust): "
     groups:
-      arrow-datafusion:
+      arrow:
         applies-to: version-updates
         patterns:
           - "arrow-*"
-          - "datafusion*"
     cooldown:
       default-days: 7
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 2bbdf7216..8e38011e4 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -58,7 +58,7 @@ jobs:
           - false
         include:
           - os: ubuntu-latest
-            minimal-versions: true # Test can be built with older arrow except 
adbc_datafusion
+            minimal-versions: true # Test can be built with older arrow
           - os: windows-latest
             minimal-versions: true # Test can be built with older windows 
specific deps
     name: Rust ${{ matrix.os }} ${{ matrix.minimal-versions && '(minimal 
versions for adbc_core)' || '' }}
@@ -76,12 +76,6 @@ jobs:
         working-directory: rust
         run: |
           rustup toolchain install nightly
-          # adbc_datafusion is excluded from minimal versions testing (see the
-          # --exclude flags below), but its arrow requirement (driven by
-          # datafusion's) would still constrain the workspace-wide resolution.
-          # Drop it from the workspace before generating the lockfile so the
-          # workspace's own minimal arrow version is used.
-          sed -i '/^\[workspace\]$/a exclude = ["driver/datafusion"]' 
Cargo.toml
           CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=fallback cargo +nightly 
generate-lockfile -Z direct-minimal-versions
       - name: Use stable Rust
         id: rust
@@ -187,22 +181,18 @@ jobs:
         working-directory: rust
         run: >
           cargo test --all-targets --workspace
-          ${{ matrix.minimal-versions && '--exclude adbc_datafusion' || '' }}
       - name: Test (All Features)
         working-directory: rust
         run: >
           cargo test --all-targets --all-features --workspace
-          ${{ matrix.minimal-versions && '--exclude adbc_datafusion' || '' }}
       - name: Doctests
         working-directory: rust
         run: >
           cargo test --doc --all-features --workspace
-          ${{ matrix.minimal-versions && '--exclude adbc_datafusion' || '' }}
       - name: Check docs
         working-directory: rust
         run: >
           cargo doc --all-features --workspace
-          ${{ matrix.minimal-versions && '--exclude adbc_datafusion' || '' }}
       - name: Install cargo-msrv
         if: matrix.os == 'ubuntu-latest'
         run: |
@@ -216,35 +206,12 @@ jobs:
           tar xz -f "${cargo_msrv_archive}" --wildcards --strip-components=1 
-C "$HOME/.local/bin" "*/cargo-msrv"
           rm "${cargo_msrv_archive}"
 
-      - name: Verify MSRV (Minimum Supported Rust Version) except 
adbc_datafusion
+      - name: Verify MSRV (Minimum Supported Rust Version)
         if: matrix.os == 'ubuntu-latest' && matrix.minimal-versions
         working-directory: rust
         run: |
-          # Verify MSRV for each package except adbc_datafusion which requires 
a newer Rust version
-          find . -mindepth 2 -name Cargo.toml -not -path "*/datafusion/*" | 
while read -r dir
+          find . -mindepth 2 -name Cargo.toml | while read -r dir
           do
             echo "Checking package '$dir'"
             cargo msrv verify --manifest-path "$dir" || exit 1
           done
-
-      - name: Verify MSRV (Minimum Supported Rust Version) of adbc_datafusion
-        if: matrix.os == 'ubuntu-latest' && ! matrix.minimal-versions
-        working-directory: rust
-        run: |
-          cargo msrv verify --manifest-path "./driver/datafusion/Cargo.toml" 
|| exit 1
-
-      - name: Verify supports the latest arrow
-        if: matrix.os == 'ubuntu-latest' && ! matrix.minimal-versions
-        working-directory: rust
-        run: |
-          # Update arrow to the latest version in the lock file
-          cargo update \
-            -p arrow-array \
-            -p arrow-buffer \
-            -p arrow-schema \
-            -p arrow-select
-
-          # If the lock file was updated, run the tests except for 
adbc_datafusion
-          if ! git diff --quiet Cargo.lock; then
-            cargo test --all-targets --all-features --workspace --exclude 
adbc_datafusion
-          fi
diff --git a/dev/release/post-08-rust.sh b/dev/release/post-08-rust.sh
index b88c1aba1..206df1712 100755
--- a/dev/release/post-08-rust.sh
+++ b/dev/release/post-08-rust.sh
@@ -44,14 +44,12 @@ main() {
   cargo publish --all-features -p adbc_core
   cargo publish --all-features -p adbc_ffi
   cargo publish --all-features -p adbc_driver_manager
-  cargo publish --all-features -p adbc_datafusion
   popd
 
   echo "Success! The released Cargo crates are available here:"
   echo "  https://crates.io/crates/adbc_core";
   echo "  https://crates.io/crates/adbc_driver_ffi";
   echo "  https://crates.io/crates/adbc_driver_manager";
-  echo "  https://crates.io/crates/adbc_datafusion";
 }
 
 main "$@"
diff --git a/docs/source/driver/status.rst b/docs/source/driver/status.rst
index 0b24edc13..c4d1b41a9 100644
--- a/docs/source/driver/status.rst
+++ b/docs/source/driver/status.rst
@@ -51,7 +51,6 @@ Feature Support
    ../../../csharp/src/Drivers/Databricks/readme.md
    ../../../csharp/src/Drivers/FlightSql/README.md
    ../../../java/driver/flight-sql/README.md
-   ../../../rust/driver/datafusion/README.md
    ./duckdb => ../../../c/integration/duckdb/README.md [#duckdb]
    ./flight_sql => ../../../c/driver/flightsql/README.md
    ./jdbc => ../../../java/driver/jdbc/README.md
diff --git a/docs/source/rust/quickstart.rst b/docs/source/rust/quickstart.rst
index bc3cff181..472bd9f58 100644
--- a/docs/source/rust/quickstart.rst
+++ b/docs/source/rust/quickstart.rst
@@ -23,6 +23,8 @@ Here we'll briefly tour using ADBC with the `DataFusion`_ 
driver.
 
 .. _DataFusion: https://datafusion.apache.org/
 
+.. note:: The DataFusion driver is maintained by a third party, the ADBC 
Driver Foundry (https://adbc-drivers.org). We're using it here since we don't 
maintain any Rust-based drivers directly.
+
 Installation
 ============
 
@@ -30,7 +32,8 @@ Add a dependency on ``adbc_core`` and ``adbc_datafusion``:
 
 .. code-block:: shell
 
-   cargo add adbc_core adbc_datafusion
+   cargo add adbc_core
+   cargo add --git https://github.com/adbc-drivers/datafusion 
adbc-driver-datafusion
 
 .. note:: If you get a compiler error (E0308, mismatched types) and a note 
about
           multiple versions of the arrow crates in the dependency graph when 
you
@@ -59,7 +62,7 @@ connections can share.)
    // These traits must be in scope
    use adbc_core::{Connection, Database, Driver, Statement};
 
-   let mut driver = adbc_datafusion::DataFusionDriver {};
+   let mut driver = adbc_driver_datafusion::DataFusionDriver {};
    let db = driver.new_database().expect("Failed to create database handle");
    let mut conn = db.new_connection().expect("Failed to create connection");
 
diff --git a/rust/Cargo.lock b/rust/Cargo.lock
index 91c94481d..bbf7a5b1f 100644
--- a/rust/Cargo.lock
+++ b/rust/Cargo.lock
@@ -10,22 +10,6 @@ dependencies = [
  "arrow-schema",
 ]
 
-[[package]]
-name = "adbc_datafusion"
-version = "0.24.0"
-dependencies = [
- "adbc_core",
- "adbc_ffi",
- "arrow-array",
- "arrow-buffer",
- "arrow-schema",
- "arrow-select",
- "datafusion",
- "datafusion-substrait",
- "prost",
- "tokio",
-]
-
 [[package]]
 name = "adbc_driver_manager"
 version = "0.24.0"
@@ -91,12 +75,6 @@ dependencies = [
  "memchr",
 ]
 
-[[package]]
-name = "allocator-api2"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
-
 [[package]]
 name = "android_system_properties"
 version = "0.1.5"
@@ -106,61 +84,19 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "anyhow"
-version = "1.0.102"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
-
-[[package]]
-name = "arrow"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "378530e55cd479eda3c14eb345310799717e6f76d0c332041e8487022166b471"
-dependencies = [
- "arrow-arith",
- "arrow-array",
- "arrow-buffer",
- "arrow-cast",
- "arrow-csv",
- "arrow-data",
- "arrow-ipc",
- "arrow-json",
- "arrow-ord",
- "arrow-row",
- "arrow-schema",
- "arrow-select",
- "arrow-string",
-]
-
-[[package]]
-name = "arrow-arith"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a0ab212d2c1886e802f51c5212d78ebbcbb0bec980fff9dadc1eb8d45cd0b738"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-data",
- "arrow-schema",
- "chrono",
- "num-traits",
-]
-
 [[package]]
 name = "arrow-array"
-version = "58.3.0"
+version = "59.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cfd33d3e92f207444098c75b42de99d329562be0cf686b307b097cc52b4e999e"
+checksum = "0c60c79628e9a97cb90d7a0dc3e944f216a902f837d4ecabc14d524bddbbc137"
 dependencies = [
  "ahash",
  "arrow-buffer",
  "arrow-data",
  "arrow-schema",
  "chrono",
- "chrono-tz",
  "half",
- "hashbrown 0.17.1",
+ "hashbrown",
  "num-complex",
  "num-integer",
  "num-traits",
@@ -168,9 +104,9 @@ dependencies = [
 
 [[package]]
 name = "arrow-buffer"
-version = "58.3.0"
+version = "59.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0c6cd424c2693bcdbc150d843dc9d4d137dd2de4782ce6df491ad11a3a0416c0"
+checksum = "6026f638c400e9878c1b1cc05c3cfd46fbf381285916ab408678701c1df46c1a"
 dependencies = [
  "bytes",
  "half",
@@ -178,48 +114,11 @@ dependencies = [
  "num-traits",
 ]
 
-[[package]]
-name = "arrow-cast"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4c5aefb56a2c02e9e2b30746241058b85f8983f0fcff2ba0c6d09006e1cded7f"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-data",
- "arrow-ord",
- "arrow-schema",
- "arrow-select",
- "atoi",
- "base64",
- "chrono",
- "comfy-table",
- "half",
- "lexical-core",
- "num-traits",
- "ryu",
-]
-
-[[package]]
-name = "arrow-csv"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e94e8cf7e517657a52b91ea1263acf38c4ca62a84655d72458a3359b12ab97de"
-dependencies = [
- "arrow-array",
- "arrow-cast",
- "arrow-schema",
- "chrono",
- "csv",
- "csv-core",
- "regex",
-]
-
 [[package]]
 name = "arrow-data"
-version = "58.3.0"
+version = "59.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3c88210023a2bfee1896af366309a3028fc3bcbd6515fa29a7990ee1baa08ee0"
+checksum = "7bd568aa70c4ec5947027b0d5caee94877433b661a0bb9e8ddceeeb5f0c9b1ab"
 dependencies = [
  "arrow-buffer",
  "arrow-schema",
@@ -228,89 +127,20 @@ dependencies = [
  "num-traits",
 ]
 
-[[package]]
-name = "arrow-ipc"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "238438f0834483703d88896db6fe5a7138b2230debc31b34c0336c2996e3c64f"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-data",
- "arrow-schema",
- "arrow-select",
- "flatbuffers",
- "lz4_flex",
- "zstd",
-]
-
-[[package]]
-name = "arrow-json"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "205ca2119e6d679d5c133c6f30e68f027738d95ed948cf77677ea69c7800036b"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-cast",
- "arrow-ord",
- "arrow-schema",
- "arrow-select",
- "chrono",
- "half",
- "indexmap",
- "itoa",
- "lexical-core",
- "memchr",
- "num-traits",
- "ryu",
- "serde_core",
- "serde_json",
- "simdutf8",
-]
-
-[[package]]
-name = "arrow-ord"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1bffd8fd2579286a5d63bac898159873e5094a79009940bcb42bbfce4f19f1d0"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-data",
- "arrow-schema",
- "arrow-select",
-]
-
-[[package]]
-name = "arrow-row"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bab5994731204603c73ba69267616c50f80780774c6bb0476f1f830625115e0c"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-data",
- "arrow-schema",
- "half",
-]
-
 [[package]]
 name = "arrow-schema"
-version = "58.3.0"
+version = "59.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f633dbfdf39c039ada1bf9e34c694816eb71fbb7dc78f613993b7245e078a1ed"
+checksum = "80b3e786a0dd9103acd583a6fb486dbf2f3268466cc0bd571dcf34cef231c1f1"
 dependencies = [
  "bitflags",
- "serde_core",
- "serde_json",
 ]
 
 [[package]]
 name = "arrow-select"
-version = "58.3.0"
+version = "59.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8cd065c54172ac787cf3f2f8d4107e0d3fdc26edba76fdf4f4cc170258942222"
+checksum = "067a67e0361f6c31f4a7248759f36ca4ca71b187a941ed4d49da1c7d3d4db624"
 dependencies = [
  "ahash",
  "arrow-array",
@@ -320,79 +150,12 @@ dependencies = [
  "num-traits",
 ]
 
-[[package]]
-name = "arrow-string"
-version = "58.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "29dd7cda3ab9692f43a2e4acc444d760cc17b12bb6d8232ddf64e9bab7c06b42"
-dependencies = [
- "arrow-array",
- "arrow-buffer",
- "arrow-data",
- "arrow-schema",
- "arrow-select",
- "memchr",
- "num-traits",
- "regex",
- "regex-syntax",
-]
-
-[[package]]
-name = "async-recursion"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "async-trait"
-version = "0.1.89"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "atoi"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
-dependencies = [
- "num-traits",
-]
-
 [[package]]
 name = "autocfg"
 version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
 
-[[package]]
-name = "base64"
-version = "0.22.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
-
-[[package]]
-name = "bigdecimal"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695"
-dependencies = [
- "autocfg",
- "libm",
- "num-bigint",
- "num-integer",
- "num-traits",
-]
-
 [[package]]
 name = "bitflags"
 version = "2.13.0"
@@ -407,19 +170,17 @@ checksum = 
"72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
 
 [[package]]
 name = "bytes"
-version = "1.11.1"
+version = "1.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
 
 [[package]]
 name = "cc"
-version = "1.2.63"
+version = "1.2.65"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
+checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"
 dependencies = [
  "find-msvc-tools",
- "jobserver",
- "libc",
  "shlex",
 ]
 
@@ -440,26 +201,6 @@ dependencies = [
  "windows-link",
 ]
 
-[[package]]
-name = "chrono-tz"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
-dependencies = [
- "chrono",
- "phf",
-]
-
-[[package]]
-name = "comfy-table"
-version = "7.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47"
-dependencies = [
- "unicode-segmentation",
- "unicode-width",
-]
-
 [[package]]
 name = "const-random"
 version = "0.1.18"
@@ -486,12 +227,6 @@ version = "0.8.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
 
-[[package]]
-name = "crossbeam-utils"
-version = "0.8.21"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
-
 [[package]]
 name = "crunchy"
 version = "0.2.4"
@@ -499,2125 +234,418 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
 
 [[package]]
-name = "csv"
-version = "1.4.0"
+name = "errno"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
 dependencies = [
- "csv-core",
- "itoa",
- "ryu",
- "serde_core",
+ "libc",
+ "windows-sys",
 ]
 
 [[package]]
-name = "csv-core"
-version = "0.1.13"
+name = "fastrand"
+version = "2.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
-dependencies = [
- "memchr",
-]
+checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
 
 [[package]]
-name = "dashmap"
-version = "6.2.1"
+name = "find-msvc-tools"
+version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
- "hashbrown 0.14.5",
- "lock_api",
- "once_cell",
- "parking_lot_core",
-]
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
 
 [[package]]
-name = "datafusion"
-version = "54.0.0"
+name = "futures-core"
+version = "0.3.32"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "997a31e15872606a49478e670c58302094c97cb96abb0a7d60720f8e92170040"
-dependencies = [
- "arrow",
- "arrow-schema",
- "async-trait",
- "chrono",
- "datafusion-catalog",
- "datafusion-catalog-listing",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-datasource",
- "datafusion-datasource-arrow",
- "datafusion-datasource-csv",
- "datafusion-datasource-json",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-expr-common",
- "datafusion-functions",
- "datafusion-functions-aggregate",
- "datafusion-functions-nested",
- "datafusion-functions-table",
- "datafusion-functions-window",
- "datafusion-optimizer",
- "datafusion-physical-expr",
- "datafusion-physical-expr-adapter",
- "datafusion-physical-expr-common",
- "datafusion-physical-optimizer",
- "datafusion-physical-plan",
- "datafusion-session",
- "datafusion-sql",
- "futures",
- "indexmap",
- "itertools",
- "log",
- "object_store",
- "parking_lot",
- "sqlparser",
- "tempfile",
- "tokio",
- "url",
- "uuid",
-]
-
-[[package]]
-name = "datafusion-catalog"
-version = "54.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f7dd61161508f8f5fa1107774ea687bd753c22d83a32eebf963549f89de14139"
-dependencies = [
- "arrow",
- "async-trait",
- "dashmap",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-datasource",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-expr",
- "datafusion-physical-plan",
- "datafusion-session",
- "futures",
- "itertools",
- "log",
- "object_store",
- "parking_lot",
- "tokio",
-]
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
 
 [[package]]
-name = "datafusion-catalog-listing"
-version = "54.0.0"
+name = "futures-executor"
+version = "0.3.32"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "897c70f871277f9ce99aa38347be0d679bbe3e617156c4d2a8378cec8a2a0891"
+checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
 dependencies = [
- "arrow",
- "async-trait",
- "datafusion-catalog",
- "datafusion-common",
- "datafusion-datasource",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-expr",
- "datafusion-physical-expr-adapter",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "futures",
- "itertools",
- "log",
- "object_store",
+ "futures-core",
+ "futures-task",
+ "futures-util",
 ]
 
 [[package]]
-name = "datafusion-common"
-version = "54.0.0"
+name = "futures-task"
+version = "0.3.32"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "121c9ded5d87d9172319e006f2afdb9928d72dbacd6a90a458d8acb1e3b43a65"
-dependencies = [
- "arrow",
- "arrow-ipc",
- "arrow-schema",
- "chrono",
- "foldhash 0.2.0",
- "half",
- "hashbrown 0.17.1",
- "indexmap",
- "itertools",
- "libc",
- "log",
- "object_store",
- "sqlparser",
- "tokio",
- "uuid",
- "web-time",
-]
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
 
 [[package]]
-name = "datafusion-common-runtime"
-version = "54.0.0"
+name = "futures-util"
+version = "0.3.32"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "981b9dae74f78ee3d9f714fb49b01919eab975461b56149510c3ba9ea11287d1"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
 dependencies = [
- "futures",
- "log",
- "tokio",
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "slab",
 ]
 
 [[package]]
-name = "datafusion-datasource"
-version = "54.0.0"
+name = "getrandom"
+version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ffd7d295b2ec7c00d8a56562f41ed41062cf0af75549ed891c12a0a09eddfefe"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
 dependencies = [
- "arrow",
- "async-trait",
- "bytes",
- "chrono",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-expr",
- "datafusion-physical-expr-adapter",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "datafusion-session",
- "futures",
- "glob",
- "itertools",
- "log",
- "object_store",
- "parking_lot",
- "rand",
- "tokio",
- "url",
+ "cfg-if",
+ "libc",
+ "wasi",
 ]
 
 [[package]]
-name = "datafusion-datasource-arrow"
-version = "54.0.0"
+name = "getrandom"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "552b0b3f342f7ec41b3fbd70f6339dc82a30cfd0349e7f280e7852528085349f"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
 dependencies = [
- "arrow",
- "arrow-ipc",
- "async-trait",
- "bytes",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-datasource",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "datafusion-session",
- "futures",
- "itertools",
- "object_store",
- "tokio",
+ "cfg-if",
+ "libc",
+ "r-efi 5.3.0",
+ "wasip2",
 ]
 
 [[package]]
-name = "datafusion-datasource-csv"
-version = "54.0.0"
+name = "getrandom"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "68850aa426b897e879c8b87e512ea8124f1d0a2869a4e51808ddaaddf1bc0ada"
+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
 dependencies = [
- "arrow",
- "async-trait",
- "bytes",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-datasource",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "datafusion-session",
- "futures",
- "object_store",
- "regex",
- "tokio",
+ "cfg-if",
+ "libc",
+ "r-efi 6.0.0",
 ]
 
 [[package]]
-name = "datafusion-datasource-json"
-version = "54.0.0"
+name = "half"
+version = "2.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "402f93242ae08ef99139ee2c528a49d087efe88d5c7b2c3ff5480855a40ce54f"
+checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
 dependencies = [
- "arrow",
- "async-trait",
- "bytes",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-datasource",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "datafusion-session",
- "futures",
- "object_store",
- "tokio",
- "tokio-stream",
+ "cfg-if",
+ "crunchy",
+ "num-traits",
+ "zerocopy",
 ]
 
 [[package]]
-name = "datafusion-doc"
-version = "54.0.0"
+name = "hashbrown"
+version = "0.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cb9e7e5d11130c48c8bd4e80c79a9772dd28ce6dc330baca9246205d245b9e2e"
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
 
 [[package]]
-name = "datafusion-execution"
-version = "54.0.0"
+name = "iana-time-zone"
+version = "0.1.65"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "37a8643ab852eb68864e1b72ae789e8066282dce48eea6347ffb0aee33d1ccc0"
+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
 dependencies = [
- "arrow",
- "arrow-buffer",
- "async-trait",
- "dashmap",
- "datafusion-common",
- "datafusion-expr",
- "datafusion-physical-expr-common",
- "futures",
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
  "log",
- "object_store",
- "parking_lot",
- "rand",
- "tempfile",
- "url",
-]
-
-[[package]]
-name = "datafusion-expr"
-version = "54.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6932f4d71eed9c8d9341476a2b845aadfabde5495d08dbcd8fc23881f49fa7a0"
-dependencies = [
- "arrow",
- "arrow-schema",
- "async-trait",
- "chrono",
- "datafusion-common",
- "datafusion-doc",
- "datafusion-expr-common",
- "datafusion-functions-aggregate-common",
- "datafusion-functions-window-common",
- "datafusion-physical-expr-common",
- "indexmap",
- "itertools",
- "serde_json",
- "sqlparser",
+ "wasm-bindgen",
+ "windows-core",
 ]
 
 [[package]]
-name = "datafusion-expr-common"
-version = "54.0.0"
+name = "iana-time-zone-haiku"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0225491839a31b1f7d2cb8092c2d50792e2fe1c1724e4e6d08e011f5feaf4ed2"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
 dependencies = [
- "arrow",
- "datafusion-common",
- "indexmap",
- "itertools",
+ "cc",
 ]
 
 [[package]]
-name = "datafusion-functions"
-version = "54.0.0"
+name = "js-sys"
+version = "0.3.103"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "14872c47bfc3d21e53ec82f57074e6987a15941c1e2f43cde4ac6ae2746634e3"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
 dependencies = [
- "arrow",
- "arrow-buffer",
- "base64",
- "chrono",
- "chrono-tz",
- "datafusion-common",
- "datafusion-doc",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-expr-common",
- "datafusion-macros",
- "datafusion-physical-expr-common",
- "hex",
- "itertools",
- "log",
- "memchr",
- "num-traits",
- "rand",
- "regex",
- "uuid",
+ "cfg-if",
+ "futures-util",
+ "wasm-bindgen",
 ]
 
 [[package]]
-name = "datafusion-functions-aggregate"
-version = "54.0.0"
+name = "libc"
+version = "0.2.186"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "75a2ca14e1b609be21e657e2d3130b2f446456b08393b377bb721a33952d2e09"
-dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-doc",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-functions-aggregate-common",
- "datafusion-macros",
- "datafusion-physical-expr",
- "datafusion-physical-expr-common",
- "foldhash 0.2.0",
- "half",
- "log",
- "num-traits",
-]
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
 
 [[package]]
-name = "datafusion-functions-aggregate-common"
-version = "54.0.0"
+name = "libloading"
+version = "0.8.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ece74ba09092d2ef9c9b54a38445450aea292a1f8b04faf531936b723a24b3c"
+checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
 dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-expr-common",
- "datafusion-physical-expr-common",
+ "cfg-if",
+ "windows-link",
 ]
 
 [[package]]
-name = "datafusion-functions-nested"
-version = "54.0.0"
+name = "libm"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3f3e3f9ee8ca59bf70518802107de6f1b88a9509efdc629fadc5de9d6b2d5ef5"
-dependencies = [
- "arrow",
- "arrow-ord",
- "datafusion-common",
- "datafusion-doc",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-expr-common",
- "datafusion-functions",
- "datafusion-functions-aggregate",
- "datafusion-functions-aggregate-common",
- "datafusion-macros",
- "datafusion-physical-expr-common",
- "hashbrown 0.17.1",
- "itertools",
- "itoa",
- "log",
- "memchr",
-]
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
 
 [[package]]
-name = "datafusion-functions-table"
-version = "54.0.0"
+name = "linux-raw-sys"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "89161dffc22cf2b50f9f4b1bee83b5221d3b4ed7c2e37fd7aa2b22a5297b3a26"
-dependencies = [
- "arrow",
- "async-trait",
- "datafusion-catalog",
- "datafusion-common",
- "datafusion-expr",
- "datafusion-physical-expr",
- "datafusion-physical-plan",
- "parking_lot",
-]
+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
 
 [[package]]
-name = "datafusion-functions-window"
-version = "54.0.0"
+name = "lock_api"
+version = "0.4.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d7339345b226b3874037708bf5023ba1c2de705128f8457a095aae5ae9cb9c78"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
 dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-doc",
- "datafusion-expr",
- "datafusion-functions-window-common",
- "datafusion-macros",
- "datafusion-physical-expr",
- "datafusion-physical-expr-common",
- "log",
+ "scopeguard",
 ]
 
 [[package]]
-name = "datafusion-functions-window-common"
-version = "54.0.0"
+name = "log"
+version = "0.4.33"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fa84836dc2392df6f43d6a29d37fb56a8ebdc8b3f4e10ae8dc15861fd20278fb"
-dependencies = [
- "datafusion-common",
- "datafusion-physical-expr-common",
-]
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
 
 [[package]]
-name = "datafusion-macros"
-version = "54.0.0"
+name = "memchr"
+version = "2.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "587164e03ad68732aa9e7bfe5686e3f25970d4c64fd4bd80790749840892dae5"
-dependencies = [
- "datafusion-doc",
- "quote",
- "syn",
-]
+checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
 
 [[package]]
-name = "datafusion-optimizer"
-version = "54.0.0"
+name = "num-bigint"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "77f20e8cf9e8654d92f4c16b24c487353ee5bf153ffc12d5772cd399ab8cd281"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
 dependencies = [
- "arrow",
- "chrono",
- "datafusion-common",
- "datafusion-expr",
- "datafusion-expr-common",
- "datafusion-physical-expr",
- "indexmap",
- "itertools",
- "log",
- "regex",
- "regex-syntax",
+ "num-integer",
+ "num-traits",
 ]
 
 [[package]]
-name = "datafusion-physical-expr"
-version = "54.0.0"
+name = "num-complex"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f015a4a82f6f7ff7e1d8d4bf3870a936752fa38b17705dfcc14adef95aa8922c"
+checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
 dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-expr",
- "datafusion-expr-common",
- "datafusion-functions-aggregate-common",
- "datafusion-physical-expr-common",
- "half",
- "hashbrown 0.17.1",
- "indexmap",
- "itertools",
- "parking_lot",
- "petgraph",
- "tokio",
+ "num-traits",
 ]
 
 [[package]]
-name = "datafusion-physical-expr-adapter"
-version = "54.0.0"
+name = "num-integer"
+version = "0.1.46"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "51e6ffff8acdfe54e0ea15ccf38115c4a9184433b0439f42907637928d00a235"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
 dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-expr",
- "datafusion-functions",
- "datafusion-physical-expr",
- "datafusion-physical-expr-common",
- "itertools",
+ "num-traits",
 ]
 
 [[package]]
-name = "datafusion-physical-expr-common"
-version = "54.0.0"
+name = "num-traits"
+version = "0.2.19"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7967a3e171c6a4bf09474b3f7a14f1a3db13ed1714ba12156f33fcce2bba54e8"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
 dependencies = [
- "arrow",
- "chrono",
- "datafusion-common",
- "datafusion-expr-common",
- "hashbrown 0.17.1",
- "indexmap",
- "itertools",
- "parking_lot",
- "pin-project",
+ "autocfg",
+ "libm",
 ]
 
 [[package]]
-name = "datafusion-physical-optimizer"
-version = "54.0.0"
+name = "once_cell"
+version = "1.21.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "59ff803e2a96054cb6d83f35f9e60fd4f42eac515e1932bd1b2dbc91d5fcbf36"
-dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-expr-common",
- "datafusion-physical-expr",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "datafusion-pruning",
- "itertools",
-]
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
 
 [[package]]
-name = "datafusion-physical-plan"
-version = "54.0.0"
+name = "parking_lot"
+version = "0.12.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "776ee54d47d15bdb126452f9ca17b03761e3b004682914beaedd3f86eb507fbc"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
 dependencies = [
- "arrow",
- "arrow-data",
- "arrow-ipc",
- "arrow-ord",
- "arrow-schema",
- "async-trait",
- "datafusion-common",
- "datafusion-common-runtime",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-functions",
- "datafusion-functions-aggregate-common",
- "datafusion-functions-window-common",
- "datafusion-physical-expr",
- "datafusion-physical-expr-common",
- "futures",
- "half",
- "hashbrown 0.17.1",
- "indexmap",
- "itertools",
- "log",
- "num-traits",
- "parking_lot",
- "pin-project-lite",
- "tokio",
+ "lock_api",
+ "parking_lot_core",
 ]
 
 [[package]]
-name = "datafusion-pruning"
-version = "54.0.0"
+name = "parking_lot_core"
+version = "0.9.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d5fb9e5774660aa69c3ba93c610f175f75b65cb8c3776edb3626de8f3a4f4ee3"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
 dependencies = [
- "arrow",
- "datafusion-common",
- "datafusion-datasource",
- "datafusion-expr-common",
- "datafusion-physical-expr",
- "datafusion-physical-expr-common",
- "datafusion-physical-plan",
- "log",
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-link",
 ]
 
 [[package]]
-name = "datafusion-session"
-version = "54.0.0"
+name = "path-slash"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "15ce715fa2a61f4623cc234bcc14a3ef6a91f189128d5b14b468a6a17cdfc417"
-dependencies = [
- "async-trait",
- "datafusion-common",
- "datafusion-execution",
- "datafusion-expr",
- "datafusion-physical-plan",
- "parking_lot",
-]
+checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
 
 [[package]]
-name = "datafusion-sql"
-version = "54.0.0"
+name = "pin-project-lite"
+version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6094ad36a3ed6d7ac87b20b479b2d0b118250f66cf997603829fdc65b44a7099"
-dependencies = [
- "arrow",
- "bigdecimal",
- "chrono",
- "datafusion-common",
- "datafusion-expr",
- "datafusion-functions-nested",
- "indexmap",
- "log",
- "regex",
- "sqlparser",
-]
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
 
 [[package]]
-name = "datafusion-substrait"
-version = "54.0.0"
+name = "proc-macro2"
+version = "1.0.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3b22c8f8c72d317e54fad6f85c0ef6d1e1da53cc7faadc7eea8daf0f8d86d4f2"
+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
 dependencies = [
- "async-recursion",
- "async-trait",
- "chrono",
- "datafusion",
- "half",
- "itertools",
- "object_store",
- "pbjson-types",
- "prost",
- "substrait",
- "tokio",
- "url",
+ "unicode-ident",
 ]
 
 [[package]]
-name = "displaydoc"
-version = "0.2.6"
+name = "quote"
+version = "1.0.46"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
 dependencies = [
  "proc-macro2",
- "quote",
- "syn",
 ]
 
 [[package]]
-name = "dyn-clone"
-version = "1.0.20"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
-
-[[package]]
-name = "either"
-version = "1.16.0"
+name = "r-efi"
+version = "5.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
 
 [[package]]
-name = "equivalent"
-version = "1.0.2"
+name = "r-efi"
+version = "6.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
 
 [[package]]
-name = "errno"
-version = "0.3.14"
+name = "redox_syscall"
+version = "0.5.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
 dependencies = [
- "libc",
- "windows-sys",
+ "bitflags",
 ]
 
 [[package]]
-name = "fastrand"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
-
-[[package]]
-name = "find-msvc-tools"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
-
-[[package]]
-name = "fixedbitset"
-version = "0.5.7"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
-
-[[package]]
-name = "flatbuffers"
-version = "25.12.19"
+name = "regex"
+version = "1.12.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3"
+checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
 dependencies = [
- "bitflags",
- "rustc_version",
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
 ]
 
 [[package]]
-name = "foldhash"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
-
-[[package]]
-name = "foldhash"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.2.2"
+name = "regex-automata"
+version = "0.4.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
 dependencies = [
- "percent-encoding",
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
 ]
 
 [[package]]
-name = "futures"
-version = "0.3.32"
+name = "regex-syntax"
+version = "0.8.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-executor",
- "futures-io",
- "futures-sink",
- "futures-task",
- "futures-util",
-]
+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
 
 [[package]]
-name = "futures-channel"
-version = "0.3.32"
+name = "rustix"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
 dependencies = [
- "futures-core",
- "futures-sink",
+ "bitflags",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
 ]
 
 [[package]]
-name = "futures-core"
-version = "0.3.32"
+name = "rustversion"
+version = "1.0.22"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
 
 [[package]]
-name = "futures-executor"
-version = "0.3.32"
+name = "scopeguard"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
-dependencies = [
- "futures-core",
- "futures-task",
- "futures-util",
-]
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
 
 [[package]]
-name = "futures-io"
-version = "0.3.32"
+name = "serde_core"
+version = "1.0.228"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
-
-[[package]]
-name = "futures-macro"
-version = "0.3.32"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "futures-sink"
-version = "0.3.32"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
-
-[[package]]
-name = "futures-task"
-version = "0.3.32"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
-
-[[package]]
-name = "futures-util"
-version = "0.3.32"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-io",
- "futures-macro",
- "futures-sink",
- "futures-task",
- "memchr",
- "pin-project-lite",
- "slab",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
-dependencies = [
- "cfg-if",
- "libc",
- "r-efi 5.3.0",
- "wasip2",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
-dependencies = [
- "cfg-if",
- "libc",
- "r-efi 6.0.0",
- "wasip2",
- "wasip3",
-]
-
-[[package]]
-name = "glob"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
-
-[[package]]
-name = "half"
-version = "2.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
-dependencies = [
- "cfg-if",
- "crunchy",
- "num-traits",
- "zerocopy",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
-
-[[package]]
-name = "hashbrown"
-version = "0.15.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
-dependencies = [
- "foldhash 0.1.5",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.16.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
-dependencies = [
- "allocator-api2",
- "equivalent",
- "foldhash 0.2.0",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.17.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
-dependencies = [
- "allocator-api2",
- "equivalent",
- "foldhash 0.2.0",
-]
-
-[[package]]
-name = "heck"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "http"
-version = "1.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"
-dependencies = [
- "bytes",
- "itoa",
-]
-
-[[package]]
-name = "humantime"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424"
-
-[[package]]
-name = "iana-time-zone"
-version = "0.1.65"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
-dependencies = [
- "android_system_properties",
- "core-foundation-sys",
- "iana-time-zone-haiku",
- "js-sys",
- "log",
- "wasm-bindgen",
- "windows-core",
-]
-
-[[package]]
-name = "iana-time-zone-haiku"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "icu_collections"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
-dependencies = [
- "displaydoc",
- "potential_utf",
- "utf8_iter",
- "yoke",
- "zerofrom",
- "zerovec",
-]
-
-[[package]]
-name = "icu_locale_core"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
-dependencies = [
- "displaydoc",
- "litemap",
- "tinystr",
- "writeable",
- "zerovec",
-]
-
-[[package]]
-name = "icu_normalizer"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
-dependencies = [
- "icu_collections",
- "icu_normalizer_data",
- "icu_properties",
- "icu_provider",
- "smallvec",
- "zerovec",
-]
-
-[[package]]
-name = "icu_normalizer_data"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
-
-[[package]]
-name = "icu_properties"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
-dependencies = [
- "icu_collections",
- "icu_locale_core",
- "icu_properties_data",
- "icu_provider",
- "zerotrie",
- "zerovec",
-]
-
-[[package]]
-name = "icu_properties_data"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
-
-[[package]]
-name = "icu_provider"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
-dependencies = [
- "displaydoc",
- "icu_locale_core",
- "writeable",
- "yoke",
- "zerofrom",
- "zerotrie",
- "zerovec",
-]
-
-[[package]]
-name = "id-arena"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
-
-[[package]]
-name = "idna"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
-dependencies = [
- "idna_adapter",
- "smallvec",
- "utf8_iter",
-]
-
-[[package]]
-name = "idna_adapter"
-version = "1.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
-dependencies = [
- "icu_normalizer",
- "icu_properties",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
-dependencies = [
- "equivalent",
- "hashbrown 0.17.1",
- "serde",
- "serde_core",
-]
-
-[[package]]
-name = "itertools"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.18"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
-
-[[package]]
-name = "jobserver"
-version = "0.1.34"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
-dependencies = [
- "getrandom 0.3.4",
- "libc",
-]
-
-[[package]]
-name = "js-sys"
-version = "0.3.100"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162"
-dependencies = [
- "cfg-if",
- "futures-util",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "leb128fmt"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
-
-[[package]]
-name = "lexical-core"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594"
-dependencies = [
- "lexical-parse-float",
- "lexical-parse-integer",
- "lexical-util",
- "lexical-write-float",
- "lexical-write-integer",
-]
-
-[[package]]
-name = "lexical-parse-float"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56"
-dependencies = [
- "lexical-parse-integer",
- "lexical-util",
-]
-
-[[package]]
-name = "lexical-parse-integer"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34"
-dependencies = [
- "lexical-util",
-]
-
-[[package]]
-name = "lexical-util"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17"
-
-[[package]]
-name = "lexical-write-float"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361"
-dependencies = [
- "lexical-util",
- "lexical-write-integer",
-]
-
-[[package]]
-name = "lexical-write-integer"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df"
-dependencies = [
- "lexical-util",
-]
-
-[[package]]
-name = "libc"
-version = "0.2.186"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
-
-[[package]]
-name = "libloading"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
-dependencies = [
- "cfg-if",
- "windows-link",
-]
-
-[[package]]
-name = "libm"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
-
-[[package]]
-name = "litemap"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
-
-[[package]]
-name = "lock_api"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
-dependencies = [
- "scopeguard",
-]
-
-[[package]]
-name = "log"
-version = "0.4.32"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a"
-
-[[package]]
-name = "lz4_flex"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e"
-dependencies = [
- "twox-hash",
-]
-
-[[package]]
-name = "memchr"
-version = "2.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
-
-[[package]]
-name = "multimap"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
-
-[[package]]
-name = "num-bigint"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
-dependencies = [
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-complex"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
-dependencies = [
- "num-traits",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.46"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
-dependencies = [
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
-dependencies = [
- "autocfg",
- "libm",
-]
-
-[[package]]
-name = "object_store"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "622acbc9100d3c10e2ee15804b0caa40e55c933d5aa53814cd520805b7958a49"
-dependencies = [
- "async-trait",
- "bytes",
- "chrono",
- "futures-channel",
- "futures-core",
- "futures-util",
- "http",
- "humantime",
- "itertools",
- "parking_lot",
- "percent-encoding",
- "thiserror",
- "tokio",
- "tracing",
- "url",
- "walkdir",
- "wasm-bindgen-futures",
- "web-time",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
-
-[[package]]
-name = "parking_lot"
-version = "0.12.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
-dependencies = [
- "lock_api",
- "parking_lot_core",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.9.12"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall",
- "smallvec",
- "windows-link",
-]
-
-[[package]]
-name = "path-slash"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
-
-[[package]]
-name = "pbjson"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "898bac3fa00d0ba57a4e8289837e965baa2dee8c3749f3b11d45a64b4223d9c3"
-dependencies = [
- "base64",
- "serde",
-]
-
-[[package]]
-name = "pbjson-build"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "af22d08a625a2213a78dbb0ffa253318c5c79ce3133d32d296655a7bdfb02095"
-dependencies = [
- "heck",
- "itertools",
- "prost",
- "prost-types",
-]
-
-[[package]]
-name = "pbjson-types"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8e748e28374f10a330ee3bb9f29b828c0ac79831a32bab65015ad9b661ead526"
-dependencies = [
- "bytes",
- "chrono",
- "pbjson",
- "pbjson-build",
- "prost",
- "prost-build",
- "serde",
-]
-
-[[package]]
-name = "percent-encoding"
-version = "2.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
-
-[[package]]
-name = "petgraph"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
-dependencies = [
- "fixedbitset",
- "hashbrown 0.15.5",
- "indexmap",
- "serde",
-]
-
-[[package]]
-name = "phf"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
-dependencies = [
- "phf_shared",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
-dependencies = [
- "siphasher",
-]
-
-[[package]]
-name = "pin-project"
-version = "1.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
-dependencies = [
- "pin-project-internal",
-]
-
-[[package]]
-name = "pin-project-internal"
-version = "1.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "pin-project-lite"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
-
-[[package]]
-name = "pkg-config"
-version = "0.3.33"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
-
-[[package]]
-name = "potential_utf"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
-dependencies = [
- "zerovec",
-]
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
-dependencies = [
- "zerocopy",
-]
-
-[[package]]
-name = "prettyplease"
-version = "0.2.37"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
-dependencies = [
- "proc-macro2",
- "syn",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.106"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "prost"
-version = "0.14.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1"
-dependencies = [
- "bytes",
- "prost-derive",
-]
-
-[[package]]
-name = "prost-build"
-version = "0.14.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042"
-dependencies = [
- "heck",
- "itertools",
- "log",
- "multimap",
- "petgraph",
- "prettyplease",
- "prost",
- "prost-types",
- "regex",
- "syn",
- "tempfile",
-]
-
-[[package]]
-name = "prost-derive"
-version = "0.14.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf"
-dependencies = [
- "anyhow",
- "itertools",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "prost-types"
-version = "0.14.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a"
-dependencies = [
- "prost",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.45"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "r-efi"
-version = "5.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
-
-[[package]]
-name = "r-efi"
-version = "6.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
-
-[[package]]
-name = "rand"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
-dependencies = [
- "rand_chacha",
- "rand_core",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
-dependencies = [
- "getrandom 0.3.4",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.5.18"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "regex"
-version = "1.12.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.11"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
-
-[[package]]
-name = "regress"
-version = "0.10.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2057b2325e68a893284d1538021ab90279adac1139957ca2a74426c6f118fb48"
-dependencies = [
- "hashbrown 0.16.1",
- "memchr",
-]
-
-[[package]]
-name = "rustc_version"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
-dependencies = [
- "semver",
-]
-
-[[package]]
-name = "rustix"
-version = "1.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
-dependencies = [
- "bitflags",
- "errno",
- "libc",
- "linux-raw-sys",
- "windows-sys",
-]
-
-[[package]]
-name = "rustversion"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
-
-[[package]]
-name = "ryu"
-version = "1.0.23"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
-
-[[package]]
-name = "same-file"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "schemars"
-version = "0.8.22"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
-dependencies = [
- "dyn-clone",
- "schemars_derive",
- "serde",
- "serde_json",
-]
-
-[[package]]
-name = "schemars_derive"
-version = "0.8.22"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde_derive_internals",
- "syn",
-]
-
-[[package]]
-name = "scopeguard"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-
-[[package]]
-name = "semver"
-version = "1.0.28"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
-dependencies = [
- "serde",
- "serde_core",
-]
-
-[[package]]
-name = "serde"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
-dependencies = [
- "serde_core",
- "serde_derive",
-]
-
-[[package]]
-name = "serde_core"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
-dependencies = [
- "serde_derive",
-]
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+dependencies = [
+ "serde_derive",
+]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_derive_internals"
-version = "0.29.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.150"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
-dependencies = [
- "indexmap",
- "itoa",
- "memchr",
- "serde",
- "serde_core",
- "zmij",
-]
-
-[[package]]
-name = "serde_spanned"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
-dependencies = [
- "serde_core",
-]
-
-[[package]]
-name = "serde_tokenstream"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d7c49585c52c01f13c5c2ebb333f14f6885d76daa768d8a037d28017ec538c69"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde",
- "syn",
-]
-
-[[package]]
-name = "serde_yaml"
-version = "0.9.34+deprecated"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
-dependencies = [
- "indexmap",
- "itoa",
- "ryu",
- "serde",
- "unsafe-libyaml",
-]
-
-[[package]]
-name = "serial_test"
-version = "3.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d"
-dependencies = [
- "futures-executor",
- "futures-util",
- "log",
- "once_cell",
- "parking_lot",
- "serial_test_derive",
-]
-
-[[package]]
-name = "serial_test_derive"
-version = "3.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "shlex"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
-
-[[package]]
-name = "simdutf8"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
-
-[[package]]
-name = "siphasher"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
-
-[[package]]
-name = "slab"
-version = "0.4.12"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
-
-[[package]]
-name = "smallvec"
-version = "1.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
-
-[[package]]
-name = "sqlparser"
-version = "0.62.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "13c6d1b651dc4edf07eead2a0c6c78016ce971bc2c10da5266861b13f25e7cec"
-dependencies = [
- "log",
- "sqlparser_derive",
-]
-
-[[package]]
-name = "sqlparser_derive"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a6dd45d8fc1c79299bfbb7190e42ccbbdf6a5f52e4a6ad98d92357ea965bd289"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "stable_deref_trait"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
-
-[[package]]
-name = "substrait"
-version = "0.63.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e620ff4d5c02fd6f7752931aa74b16a26af66a63022cc1ad412c77edbe0bab47"
-dependencies = [
- "heck",
- "indexmap",
- "pbjson",
- "pbjson-build",
- "pbjson-types",
- "prettyplease",
- "prost",
- "prost-build",
- "prost-types",
- "regress",
- "schemars",
- "semver",
- "serde",
- "serde_json",
- "serde_yaml",
- "syn",
- "typify",
- "walkdir",
-]
-
-[[package]]
-name = "syn"
-version = "2.0.117"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "synstructure"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "temp-env"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "96374855068f47402c3121c6eed88d29cb1de8f3ab27090e273e420bdabcf050"
-dependencies = [
- "parking_lot",
-]
-
-[[package]]
-name = "tempfile"
-version = "3.27.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
-dependencies = [
- "fastrand",
- "getrandom 0.4.2",
- "once_cell",
- "rustix",
- "windows-sys",
-]
-
-[[package]]
-name = "thiserror"
-version = "2.0.18"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "2.0.18"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "tiny-keccak"
-version = "2.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
-dependencies = [
- "crunchy",
-]
-
-[[package]]
-name = "tinystr"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
-dependencies = [
- "displaydoc",
- "zerovec",
-]
-
-[[package]]
-name = "tokio"
-version = "1.52.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
-dependencies = [
- "bytes",
- "pin-project-lite",
- "tokio-macros",
-]
-
-[[package]]
-name = "tokio-macros"
-version = "2.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "tokio-stream"
-version = "0.1.18"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
-dependencies = [
- "futures-core",
- "pin-project-lite",
- "tokio",
- "tokio-util",
-]
-
-[[package]]
-name = "tokio-util"
-version = "0.7.18"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "pin-project-lite",
- "tokio",
-]
-
-[[package]]
-name = "toml"
-version = "1.1.2+spec-1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
-dependencies = [
- "serde_spanned",
- "toml_datetime",
- "toml_parser",
- "toml_writer",
- "winnow",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "1.1.1+spec-1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
-dependencies = [
- "serde_core",
-]
-
-[[package]]
-name = "toml_parser"
-version = "1.1.2+spec-1.1.0"
+version = "1.0.228"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
 dependencies = [
- "winnow",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
-name = "toml_writer"
-version = "1.1.1+spec-1.1.0"
+name = "serde_spanned"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
+checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
+dependencies = [
+ "serde_core",
+]
 
 [[package]]
-name = "tracing"
-version = "0.1.44"
+name = "serial_test"
+version = "3.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
+checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d"
 dependencies = [
- "pin-project-lite",
- "tracing-attributes",
- "tracing-core",
+ "futures-executor",
+ "futures-util",
+ "log",
+ "once_cell",
+ "parking_lot",
+ "serial_test_derive",
 ]
 
 [[package]]
-name = "tracing-attributes"
-version = "0.1.31"
+name = "serial_test_derive"
+version = "3.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
+checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2625,125 +653,107 @@ dependencies = [
 ]
 
 [[package]]
-name = "tracing-core"
-version = "0.1.36"
+name = "shlex"
+version = "2.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
-dependencies = [
- "once_cell",
-]
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
 
 [[package]]
-name = "twox-hash"
-version = "2.1.2"
+name = "slab"
+version = "0.4.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
 
 [[package]]
-name = "typify"
-version = "0.5.0"
+name = "smallvec"
+version = "1.15.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e6d5bcc6f62eb1fa8aa4098f39b29f93dcb914e17158b76c50360911257aa629"
-dependencies = [
- "typify-impl",
- "typify-macro",
-]
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
 
 [[package]]
-name = "typify-impl"
-version = "0.5.0"
+name = "syn"
+version = "2.0.118"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a1eb359f7ffa4f9ebe947fa11a1b2da054564502968db5f317b7e37693cb2240"
+checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
 dependencies = [
- "heck",
- "log",
  "proc-macro2",
  "quote",
- "regress",
- "schemars",
- "semver",
- "serde",
- "serde_json",
- "syn",
- "thiserror",
  "unicode-ident",
 ]
 
 [[package]]
-name = "typify-macro"
-version = "0.5.0"
+name = "temp-env"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "911c32f3c8514b048c1b228361bebb5e6d73aeec01696e8cc0e82e2ffef8ab7a"
+checksum = "96374855068f47402c3121c6eed88d29cb1de8f3ab27090e273e420bdabcf050"
 dependencies = [
- "proc-macro2",
- "quote",
- "schemars",
- "semver",
- "serde",
- "serde_json",
- "serde_tokenstream",
- "syn",
- "typify-impl",
+ "parking_lot",
 ]
 
 [[package]]
-name = "unicode-ident"
-version = "1.0.24"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.13.3"
+name = "tempfile"
+version = "3.27.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
+checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
+dependencies = [
+ "fastrand",
+ "getrandom 0.4.3",
+ "once_cell",
+ "rustix",
+ "windows-sys",
+]
 
 [[package]]
-name = "unicode-width"
-version = "0.2.2"
+name = "tiny-keccak"
+version = "2.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
 
 [[package]]
-name = "unicode-xid"
-version = "0.2.6"
+name = "toml"
+version = "1.1.2+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
+dependencies = [
+ "serde_spanned",
+ "toml_datetime",
+ "toml_parser",
+ "toml_writer",
+ "winnow",
+]
 
 [[package]]
-name = "unsafe-libyaml"
-version = "0.2.11"
+name = "toml_datetime"
+version = "1.1.1+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
+checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
+dependencies = [
+ "serde_core",
+]
 
 [[package]]
-name = "url"
-version = "2.5.8"
+name = "toml_parser"
+version = "1.1.2+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
 dependencies = [
- "form_urlencoded",
- "idna",
- "percent-encoding",
- "serde",
+ "winnow",
 ]
 
 [[package]]
-name = "utf8_iter"
-version = "1.0.4"
+name = "toml_writer"
+version = "1.1.1+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
 
 [[package]]
-name = "uuid"
-version = "1.23.3"
+name = "unicode-ident"
+version = "1.0.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
-dependencies = [
- "getrandom 0.4.2",
- "js-sys",
- "wasm-bindgen",
-]
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
 
 [[package]]
 name = "version_check"
@@ -2751,16 +761,6 @@ version = "0.9.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
 
-[[package]]
-name = "walkdir"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
-dependencies = [
- "same-file",
- "winapi-util",
-]
-
 [[package]]
 name = "wasi"
 version = "0.11.1+wasi-snapshot-preview1"
@@ -2769,27 +769,18 @@ checksum = 
"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
 
 [[package]]
 name = "wasip2"
-version = "1.0.3+wasi-0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
-dependencies = [
- "wit-bindgen 0.57.1",
-]
-
-[[package]]
-name = "wasip3"
-version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
+version = "1.0.1+wasi-0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
+checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
 dependencies = [
- "wit-bindgen 0.51.0",
+ "wit-bindgen",
 ]
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.123"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
 dependencies = [
  "cfg-if",
  "once_cell",
@@ -2798,21 +789,11 @@ dependencies = [
  "wasm-bindgen-shared",
 ]
 
-[[package]]
-name = "wasm-bindgen-futures"
-version = "0.4.73"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.123"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -2820,9 +801,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.123"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
 dependencies = [
  "bumpalo",
  "proc-macro2",
@@ -2833,66 +814,13 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.123"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
 dependencies = [
  "unicode-ident",
 ]
 
-[[package]]
-name = "wasm-encoder"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
-dependencies = [
- "leb128fmt",
- "wasmparser",
-]
-
-[[package]]
-name = "wasm-metadata"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
-dependencies = [
- "anyhow",
- "indexmap",
- "wasm-encoder",
- "wasmparser",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
-dependencies = [
- "bitflags",
- "hashbrown 0.15.5",
- "indexmap",
- "semver",
-]
-
-[[package]]
-name = "web-time"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "winapi-util"
-version = "0.1.11"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
-dependencies = [
- "windows-sys",
-]
-
 [[package]]
 name = "windows-core"
 version = "0.62.2"
@@ -2980,126 +908,9 @@ checksum = 
"0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
 
 [[package]]
 name = "wit-bindgen"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
-dependencies = [
- "wit-bindgen-rust-macro",
-]
-
-[[package]]
-name = "wit-bindgen"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
-
-[[package]]
-name = "wit-bindgen-core"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
-dependencies = [
- "anyhow",
- "heck",
- "wit-parser",
-]
-
-[[package]]
-name = "wit-bindgen-rust"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
-dependencies = [
- "anyhow",
- "heck",
- "indexmap",
- "prettyplease",
- "syn",
- "wasm-metadata",
- "wit-bindgen-core",
- "wit-component",
-]
-
-[[package]]
-name = "wit-bindgen-rust-macro"
-version = "0.51.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
-dependencies = [
- "anyhow",
- "prettyplease",
- "proc-macro2",
- "quote",
- "syn",
- "wit-bindgen-core",
- "wit-bindgen-rust",
-]
-
-[[package]]
-name = "wit-component"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
-dependencies = [
- "anyhow",
- "bitflags",
- "indexmap",
- "log",
- "serde",
- "serde_derive",
- "serde_json",
- "wasm-encoder",
- "wasm-metadata",
- "wasmparser",
- "wit-parser",
-]
-
-[[package]]
-name = "wit-parser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
-dependencies = [
- "anyhow",
- "id-arena",
- "indexmap",
- "log",
- "semver",
- "serde",
- "serde_derive",
- "serde_json",
- "unicode-xid",
- "wasmparser",
-]
-
-[[package]]
-name = "writeable"
-version = "0.6.3"
+version = "0.46.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
-
-[[package]]
-name = "yoke"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
-dependencies = [
- "stable_deref_trait",
- "yoke-derive",
- "zerofrom",
-]
-
-[[package]]
-name = "yoke-derive"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "synstructure",
-]
+checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
 
 [[package]]
 name = "zerocopy"
@@ -3120,91 +931,3 @@ dependencies = [
  "quote",
  "syn",
 ]
-
-[[package]]
-name = "zerofrom"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
-dependencies = [
- "zerofrom-derive",
-]
-
-[[package]]
-name = "zerofrom-derive"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "synstructure",
-]
-
-[[package]]
-name = "zerotrie"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
-dependencies = [
- "displaydoc",
- "yoke",
- "zerofrom",
-]
-
-[[package]]
-name = "zerovec"
-version = "0.11.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
-dependencies = [
- "yoke",
- "zerofrom",
- "zerovec-derive",
-]
-
-[[package]]
-name = "zerovec-derive"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "zmij"
-version = "1.0.21"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
-
-[[package]]
-name = "zstd"
-version = "0.13.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
-dependencies = [
- "zstd-safe",
-]
-
-[[package]]
-name = "zstd-safe"
-version = "7.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
-dependencies = [
- "zstd-sys",
-]
-
-[[package]]
-name = "zstd-sys"
-version = "2.0.16+zstd.1.5.7"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748"
-dependencies = [
- "cc",
- "pkg-config",
-]
diff --git a/rust/driver/datafusion/Cargo.toml 
b/rust/driver/datafusion/Cargo.toml
deleted file mode 100644
index e6781f9be..000000000
--- a/rust/driver/datafusion/Cargo.toml
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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.
-
-[package]
-name = "adbc_datafusion"
-description = "ADBC driver for Apache DataFusion"
-version.workspace = true
-edition.workspace = true
-rust-version = "1.88.0"                           # datafusion mrsv
-authors.workspace = true
-license.workspace = true
-readme = "README.md"
-documentation = "http://docs.rs/adbc_datafusion/";
-homepage.workspace = true
-repository.workspace = true
-keywords.workspace = true
-categories.workspace = true
-
-[dependencies]
-adbc_core.workspace = true
-adbc_ffi = { workspace = true, optional = true }
-arrow-array = { version = ">=58.3, <59", default-features = false }
-arrow-buffer = { version = ">=58.3, <59", default-features = false }
-arrow-schema = { version = ">=58.3, <59", default-features = false }
-datafusion = { version = "54.0.0", default-features = false }
-datafusion-substrait = { version = "54.0.0", default-features = false }
-tokio = { version = "1.52", features = ["rt-multi-thread"] }
-prost = "0.14.3"
-
-[dev-dependencies]
-arrow-select = ">=58.3, <59"
-
-[lib]
-crate-type = ["lib", "cdylib"]
-
-[features]
-default = []
-ffi = ["dep:adbc_ffi"]
diff --git a/rust/driver/datafusion/README.md b/rust/driver/datafusion/README.md
deleted file mode 100644
index ed5bb9d4d..000000000
--- a/rust/driver/datafusion/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-<!---
-  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.
--->
-
-# ADBC Driver for Apache DataFusion
-
-![Vendor: Apache 
DataFusion](https://img.shields.io/badge/vendor-Apache%20DataFusion-blue?style=flat-square)
-![Implementation: 
Rust](https://img.shields.io/badge/implementation-Rust-violet?style=flat-square)
-![Status: 
Experimental](https://img.shields.io/badge/status-experimental-red?style=flat-square)
-
-[![crates.io: 
adbc_datafusion](https://img.shields.io/crates/v/adbc_datafusion?style=flat-square)](https://crates.io/crates/adbc_datafusion)
-
-## Example Usage
-
-```
-use adbc_core::driver_manager::ManagedDriver;
-use adbc_core::options::AdbcVersion;
-use adbc_core::{Connection, Database, Driver, Statement};
-use arrow_cast::pretty::print_batches;
-use arrow_array::RecordBatch;
-
-fn main() {
-    let mut driver = ManagedDriver::load_dynamic_from_name(
-        "adbc_datafusion",
-        Some(b"DataFusionDriverInit"),
-        AdbcVersion::V110,
-    )
-    .unwrap();
-
-    let database = driver.new_database().unwrap();
-
-    let mut connection = database.new_connection().unwrap();
-
-    let mut statement = connection.new_statement().unwrap();
-    let _ = statement.set_sql_query("SELECT 'world' AS Hello");
-
-    let batches: Vec<RecordBatch> = statement.execute().unwrap().map(|b| 
b.unwrap()).collect();
-
-    print_batches(&batches).unwrap();
-}
-```
-
-## FFI
-
-Build with the `ffi` feature to export this driver as a C driver.
diff --git a/rust/driver/datafusion/src/lib.rs 
b/rust/driver/datafusion/src/lib.rs
deleted file mode 100644
index 62afa36b6..000000000
--- a/rust/driver/datafusion/src/lib.rs
+++ /dev/null
@@ -1,995 +0,0 @@
-// 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.
-
-#![allow(refining_impl_trait)]
-
-use adbc_core::constants;
-use datafusion::dataframe::DataFrameWriteOptions;
-use datafusion::datasource::TableType;
-use datafusion::prelude::*;
-use datafusion_substrait::logical_plan::consumer::from_substrait_plan;
-use datafusion_substrait::substrait::proto::Plan;
-use prost::Message;
-use std::fmt::Debug;
-use std::future::Future;
-use std::sync::Arc;
-use std::vec::IntoIter;
-
-use arrow_array::builder::{
-    BooleanBuilder, Int32Builder, Int64Builder, ListBuilder, MapBuilder, 
MapFieldNames,
-    StringBuilder, UInt32Builder,
-};
-use arrow_array::{
-    ArrayRef, BooleanArray, Int16Array, Int32Array, ListArray, RecordBatch, 
RecordBatchReader,
-    StringArray, StructArray, UnionArray,
-};
-use arrow_buffer::{OffsetBuffer, ScalarBuffer};
-use arrow_schema::{ArrowError, DataType, Field, SchemaRef};
-
-use adbc_core::{
-    Connection, Database, Driver, Optionable, Statement,
-    error::{Error, Result, Status},
-    options::{
-        InfoCode, ObjectDepth, OptionConnection, OptionDatabase, 
OptionStatement, OptionValue,
-    },
-    schemas,
-};
-
-pub enum Runtime {
-    Handle(tokio::runtime::Handle),
-    Tokio(tokio::runtime::Runtime),
-}
-
-impl Runtime {
-    pub fn new(handle: Option<tokio::runtime::Handle>) -> 
std::io::Result<Self> {
-        if let Some(handle) = handle {
-            Ok(Self::Handle(handle))
-        } else {
-            let runtime = tokio::runtime::Builder::new_multi_thread()
-                .enable_all()
-                .build()?;
-            Ok(Self::Tokio(runtime))
-        }
-    }
-
-    pub fn block_on<F: Future>(&self, future: F) -> F::Output {
-        match self {
-            Runtime::Handle(handle) => tokio::task::block_in_place(|| 
handle.block_on(future)),
-            Runtime::Tokio(runtime) => runtime.block_on(future),
-        }
-    }
-}
-
-#[derive(Debug)]
-pub struct SingleBatchReader {
-    batch: Option<RecordBatch>,
-    schema: SchemaRef,
-}
-
-impl SingleBatchReader {
-    pub fn new(batch: RecordBatch) -> Self {
-        let schema = batch.schema();
-        Self {
-            batch: Some(batch),
-            schema,
-        }
-    }
-}
-
-impl Iterator for SingleBatchReader {
-    type Item = std::result::Result<RecordBatch, ArrowError>;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        Ok(self.batch.take()).transpose()
-    }
-}
-
-impl RecordBatchReader for SingleBatchReader {
-    fn schema(&self) -> SchemaRef {
-        self.schema.clone()
-    }
-}
-
-pub struct DataFusionReader {
-    batches: IntoIter<RecordBatch>,
-    schema: SchemaRef,
-}
-
-impl DataFusionReader {
-    pub async fn new(df: DataFrame) -> Self {
-        let schema = df.schema().as_arrow().clone();
-
-        Self {
-            batches: df.collect().await.unwrap().into_iter(),
-            schema: schema.into(),
-        }
-    }
-}
-
-impl Iterator for DataFusionReader {
-    type Item = std::result::Result<RecordBatch, ArrowError>;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        self.batches.next().map(Ok)
-    }
-}
-
-impl RecordBatchReader for DataFusionReader {
-    fn schema(&self) -> SchemaRef {
-        self.schema.clone()
-    }
-}
-
-#[derive(Default)]
-pub struct DataFusionDriver {
-    handle: Option<tokio::runtime::Handle>,
-}
-
-impl DataFusionDriver {
-    pub fn new(handle: Option<tokio::runtime::Handle>) -> Self {
-        Self { handle }
-    }
-}
-
-impl Driver for DataFusionDriver {
-    type DatabaseType = DataFusionDatabase;
-
-    fn new_database(&mut self) -> Result<Self::DatabaseType> {
-        Ok(Self::DatabaseType {
-            handle: self.handle.clone(),
-        })
-    }
-
-    fn new_database_with_opts(
-        &mut self,
-        opts: impl IntoIterator<
-            Item = (
-                adbc_core::options::OptionDatabase,
-                adbc_core::options::OptionValue,
-            ),
-        >,
-    ) -> adbc_core::error::Result<Self::DatabaseType> {
-        let mut database = Self::DatabaseType {
-            handle: self.handle.clone(),
-        };
-        for (key, value) in opts {
-            database.set_option(key, value)?;
-        }
-        Ok(database)
-    }
-}
-
-pub struct DataFusionDatabase {
-    handle: Option<tokio::runtime::Handle>,
-}
-
-impl Optionable for DataFusionDatabase {
-    type Option = OptionDatabase;
-
-    fn set_option(
-        &mut self,
-        key: Self::Option,
-        _value: adbc_core::options::OptionValue,
-    ) -> adbc_core::error::Result<()> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_string(&self, key: Self::Option) -> 
adbc_core::error::Result<String> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_bytes(&self, key: Self::Option) -> 
adbc_core::error::Result<Vec<u8>> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_int(&self, key: Self::Option) -> 
adbc_core::error::Result<i64> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_double(&self, key: Self::Option) -> 
adbc_core::error::Result<f64> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-}
-
-impl Database for DataFusionDatabase {
-    type ConnectionType = DataFusionConnection;
-
-    fn new_connection(&self) -> Result<Self::ConnectionType> {
-        let ctx = SessionContext::new();
-
-        let runtime = Runtime::new(self.handle.clone()).unwrap();
-
-        Ok(DataFusionConnection {
-            runtime: Arc::new(runtime),
-            ctx: Arc::new(ctx),
-        })
-    }
-
-    fn new_connection_with_opts(
-        &self,
-        opts: impl IntoIterator<
-            Item = (
-                adbc_core::options::OptionConnection,
-                adbc_core::options::OptionValue,
-            ),
-        >,
-    ) -> adbc_core::error::Result<Self::ConnectionType> {
-        let ctx = SessionContext::new();
-
-        let runtime = Runtime::new(self.handle.clone()).unwrap();
-
-        let mut connection = DataFusionConnection {
-            runtime: Arc::new(runtime),
-            ctx: Arc::new(ctx),
-        };
-
-        for (key, value) in opts {
-            connection.set_option(key, value)?;
-        }
-
-        Ok(connection)
-    }
-}
-
-pub struct DataFusionConnection {
-    runtime: Arc<Runtime>,
-    ctx: Arc<SessionContext>,
-}
-
-impl Optionable for DataFusionConnection {
-    type Option = OptionConnection;
-
-    fn set_option(
-        &mut self,
-        key: Self::Option,
-        value: adbc_core::options::OptionValue,
-    ) -> adbc_core::error::Result<()> {
-        match key.as_ref() {
-            constants::ADBC_CONNECTION_OPTION_CURRENT_CATALOG => match value {
-                OptionValue::String(value) => {
-                    self.runtime.block_on(async {
-                        let query = format!("SET 
datafusion.catalog.default_catalog = {value}");
-                        self.ctx.sql(query.as_str()).await.unwrap();
-                    });
-                    Ok(())
-                }
-                _ => Err(Error::with_message_and_status(
-                    "CurrentCatalog value must be of type String",
-                    Status::InvalidArguments,
-                )),
-            },
-            constants::ADBC_CONNECTION_OPTION_CURRENT_DB_SCHEMA => match value 
{
-                OptionValue::String(value) => {
-                    self.runtime.block_on(async {
-                        let query = format!("SET 
datafusion.catalog.default_schema = {value}");
-                        self.ctx.sql(query.as_str()).await.unwrap();
-                    });
-                    Ok(())
-                }
-                _ => Err(Error::with_message_and_status(
-                    "CurrentSchema value must be of type String",
-                    Status::InvalidArguments,
-                )),
-            },
-            _ => Err(Error::with_message_and_status(
-                format!("Unrecognized option: {key:?}"),
-                Status::NotFound,
-            )),
-        }
-    }
-
-    fn get_option_string(&self, key: Self::Option) -> 
adbc_core::error::Result<String> {
-        match key.as_ref() {
-            constants::ADBC_CONNECTION_OPTION_CURRENT_CATALOG => Ok(self
-                .ctx
-                .state()
-                .config_options()
-                .catalog
-                .default_catalog
-                .clone()),
-            constants::ADBC_CONNECTION_OPTION_CURRENT_DB_SCHEMA => Ok(self
-                .ctx
-                .state()
-                .config_options()
-                .catalog
-                .default_schema
-                .clone()),
-            _ => Err(Error::with_message_and_status(
-                format!("Unrecognized option: {key:?}"),
-                Status::NotFound,
-            )),
-        }
-    }
-
-    fn get_option_bytes(&self, key: Self::Option) -> 
adbc_core::error::Result<Vec<u8>> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_int(&self, key: Self::Option) -> 
adbc_core::error::Result<i64> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_double(&self, key: Self::Option) -> 
adbc_core::error::Result<f64> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-}
-
-struct GetInfoBuilder {
-    name_builder: UInt32Builder,
-    type_id_vec: Vec<i8>,
-    offsets_vec: Vec<i32>,
-    string_array_builder: StringBuilder,
-    string_offset: i32,
-    bool_array_builder: BooleanBuilder,
-    bool_offset: i32,
-    int64_array_builder: Int64Builder,
-    // int64_offset: i32,
-    int32_array_builder: Int32Builder,
-    // int32_offset: i32,
-    list_string_array_builder: ListBuilder<StringBuilder>,
-    // list_string_offset: i32,
-    map_builder: MapBuilder<Int32Builder, ListBuilder<Int32Builder>>,
-    // map_offset: i32,
-}
-
-impl GetInfoBuilder {
-    pub fn new() -> GetInfoBuilder {
-        GetInfoBuilder {
-            name_builder: UInt32Builder::new(),
-            type_id_vec: vec![],
-            offsets_vec: vec![],
-            string_array_builder: StringBuilder::new(),
-            string_offset: 0,
-            bool_array_builder: BooleanBuilder::new(),
-            bool_offset: 0,
-            int64_array_builder: Int64Builder::new(),
-            // int64_offset: 0,
-            int32_array_builder: Int32Builder::new(),
-            // int32_offset: 0,
-            list_string_array_builder: ListBuilder::new(StringBuilder::new()),
-            // list_string_offset: 0,
-            map_builder: MapBuilder::new(
-                Some(MapFieldNames {
-                    entry: "entries".to_string(),
-                    key: "key".to_string(),
-                    value: "value".to_string(),
-                }),
-                Int32Builder::new(),
-                ListBuilder::new(Int32Builder::new()),
-            ),
-            // map_offset: 0,
-        }
-    }
-
-    pub fn set_string(&mut self, code: InfoCode, string: &str) {
-        self.name_builder.append_value(Into::<u32>::into(&code));
-        self.string_array_builder.append_value(string);
-        self.type_id_vec.push(0);
-        self.offsets_vec.push(self.string_offset);
-        self.string_offset += 1;
-    }
-
-    pub fn set_bool(&mut self, code: InfoCode, bool: bool) {
-        self.name_builder.append_value(Into::<u32>::into(&code));
-        self.bool_array_builder.append_value(bool);
-        self.type_id_vec.push(1);
-        self.offsets_vec.push(self.bool_offset);
-        self.bool_offset += 1;
-    }
-
-    pub fn finish(mut self) -> Result<RecordBatch> {
-        let fields = match schemas::GET_INFO_SCHEMA
-            .field_with_name("info_value")
-            .unwrap()
-            .data_type()
-        {
-            DataType::Union(fields, _) => Some(fields),
-            _ => None,
-        };
-
-        let value_array = UnionArray::try_new(
-            fields.unwrap().clone(),
-            self.type_id_vec.into_iter().collect::<ScalarBuffer<i8>>(),
-            Some(self.offsets_vec.into_iter().collect::<ScalarBuffer<i32>>()),
-            vec![
-                Arc::new(self.string_array_builder.finish()),
-                Arc::new(self.bool_array_builder.finish()),
-                Arc::new(self.int64_array_builder.finish()),
-                Arc::new(self.int32_array_builder.finish()),
-                Arc::new(self.list_string_array_builder.finish()),
-                Arc::new(self.map_builder.finish()),
-            ],
-        )?;
-
-        Ok(RecordBatch::try_new(
-            schemas::GET_INFO_SCHEMA.clone(),
-            vec![Arc::new(self.name_builder.finish()), Arc::new(value_array)],
-        )?)
-    }
-}
-
-struct GetObjectsBuilder {
-    catalog_names: Vec<String>,
-    catalog_db_schema_offsets: Vec<i32>,
-    catalog_db_schema_names: Vec<String>,
-    table_offsets: Vec<i32>,
-    table_names: Vec<String>,
-    table_types: Vec<String>,
-    column_offsets: Vec<i32>,
-    column_names: Vec<String>,
-}
-
-impl GetObjectsBuilder {
-    pub fn new() -> GetObjectsBuilder {
-        GetObjectsBuilder {
-            catalog_names: vec![],
-            catalog_db_schema_offsets: vec![0],
-            catalog_db_schema_names: vec![],
-            table_offsets: vec![0],
-            table_names: vec![],
-            table_types: vec![],
-            column_offsets: vec![0],
-            column_names: vec![],
-        }
-    }
-
-    pub fn build(
-        &mut self,
-        runtime: &Runtime,
-        ctx: &SessionContext,
-        depth: &ObjectDepth,
-    ) -> Result<RecordBatch> {
-        let mut catalogs = ctx.catalog_names();
-        self.catalog_names.append(&mut catalogs);
-
-        self.catalog_names.iter().for_each(|cat| {
-            let catalog_provider = ctx.catalog(cat).unwrap();
-            let schema_names = catalog_provider.schema_names();
-            self.catalog_db_schema_names
-                .append(&mut schema_names.clone());
-
-            self.catalog_db_schema_offsets
-                .push(self.catalog_db_schema_offsets.last().unwrap() + 
schema_names.len() as i32);
-
-            schema_names.iter().for_each(|schema| {
-                let schema_provider = catalog_provider.schema(schema).unwrap();
-                let table_names = schema_provider.table_names();
-                self.table_names.append(&mut table_names.clone());
-                self.table_offsets
-                    .push(self.table_offsets.last().unwrap() + 
table_names.len() as i32);
-
-                table_names.iter().for_each(|t| {
-                    runtime.block_on(async {
-                        let table_provider = 
schema_provider.table(t).await.unwrap().unwrap();
-                        let table_type = match table_provider.table_type() {
-                            TableType::Base => "Base",
-                            TableType::View => "View",
-                            TableType::Temporary => "Temporary",
-                        };
-                        self.table_types.push(table_type.to_string());
-
-                        let schema = table_provider.schema();
-                        let num_fields = schema.fields().len();
-
-                        schema.fields().iter().for_each(|f| {
-                            self.column_names.push(f.name().clone());
-                        });
-                        self.column_offsets
-                            .push(self.column_offsets.last().unwrap() + 
num_fields as i32);
-                    });
-                });
-            });
-        });
-
-        //////////////////////////////////////////////////////
-
-        let table_columns_array = match depth {
-            ObjectDepth::Columns | ObjectDepth::All => {
-                let columns_struct_array = StructArray::from(vec![
-                    (
-                        Arc::new(Field::new("column_name", DataType::Utf8, 
false)),
-                        Arc::new(StringArray::from(self.column_names.clone())) 
as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("ordinal_position", 
DataType::Int32, true)),
-                        
Arc::new(Int32Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("remarks", DataType::Utf8, true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_data_type", DataType::Int16, 
true)),
-                        
Arc::new(Int16Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_type_name", DataType::Utf8, 
true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_column_size", 
DataType::Int32, true)),
-                        
Arc::new(Int32Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_decimal_digits", 
DataType::Int16, true)),
-                        
Arc::new(Int16Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_num_prec_radix", 
DataType::Int16, true)),
-                        
Arc::new(Int16Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_nullable", DataType::Int16, 
true)),
-                        
Arc::new(Int16Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_column_def", DataType::Utf8, 
true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_sql_data_type", 
DataType::Int16, true)),
-                        
Arc::new(Int16Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_datetime_sub", 
DataType::Int16, true)),
-                        
Arc::new(Int16Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_char_octet_length", 
DataType::Int32, true)),
-                        
Arc::new(Int32Array::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_is_nullable", 
DataType::Utf8, true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_scope_catalog", 
DataType::Utf8, true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_scope_schema", 
DataType::Utf8, true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_scope_table", 
DataType::Utf8, true)),
-                        
Arc::new(StringArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("xdbc_is_autoincrement", 
DataType::Boolean, true)),
-                        
Arc::new(BooleanArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new(
-                            "xdbc_is_generatedcolumn",
-                            DataType::Boolean,
-                            true,
-                        )),
-                        
Arc::new(BooleanArray::new_null(self.column_names.len())) as ArrayRef,
-                    ),
-                ]);
-
-                ListArray::new(
-                    Arc::new(Field::new("item", 
schemas::COLUMN_SCHEMA.clone(), true)),
-                    
OffsetBuffer::new(ScalarBuffer::from(self.column_offsets.clone())),
-                    Arc::new(columns_struct_array) as ArrayRef,
-                    None,
-                )
-            }
-            _ => ListArray::new_null(
-                Arc::new(Field::new("item", schemas::COLUMN_SCHEMA.clone(), 
true)),
-                self.table_names.len(),
-            ),
-        };
-
-        let db_schema_tables_array = match depth {
-            ObjectDepth::Tables | ObjectDepth::Columns | ObjectDepth::All => {
-                let table_constraints_array = ListArray::new_null(
-                    Arc::new(Field::new("item", 
schemas::CONSTRAINT_SCHEMA.clone(), true)),
-                    self.table_names.len(),
-                );
-
-                let tables_struct_array = StructArray::from(vec![
-                    (
-                        Arc::new(Field::new("table_name", DataType::Utf8, 
false)),
-                        Arc::new(StringArray::from(self.table_names.clone())) 
as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new("table_type", DataType::Utf8, 
false)),
-                        Arc::new(StringArray::from(self.table_types.clone())) 
as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new_list(
-                            "table_columns",
-                            Arc::new(Field::new("item", 
schemas::COLUMN_SCHEMA.clone(), true)),
-                            true,
-                        )),
-                        Arc::new(table_columns_array) as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new_list(
-                            "table_constraints",
-                            Arc::new(Field::new("item", 
schemas::CONSTRAINT_SCHEMA.clone(), true)),
-                            true,
-                        )),
-                        Arc::new(table_constraints_array) as ArrayRef,
-                    ),
-                ]);
-
-                ListArray::new(
-                    Arc::new(Field::new("item", schemas::TABLE_SCHEMA.clone(), 
true)),
-                    
OffsetBuffer::new(ScalarBuffer::from(self.table_offsets.clone())),
-                    Arc::new(tables_struct_array) as ArrayRef,
-                    None,
-                )
-            }
-            _ => ListArray::new_null(
-                Arc::new(Field::new("item", schemas::TABLE_SCHEMA.clone(), 
true)),
-                self.catalog_db_schema_names.len(),
-            ),
-        };
-
-        let catalog_db_schemas_array = match depth {
-            ObjectDepth::Columns
-            | ObjectDepth::Tables
-            | ObjectDepth::Schemas
-            | ObjectDepth::All => {
-                let db_schemas_array = StructArray::from(vec![
-                    (
-                        Arc::new(Field::new("db_schema_name", DataType::Utf8, 
true)),
-                        
Arc::new(StringArray::from(self.catalog_db_schema_names.clone()))
-                            as ArrayRef,
-                    ),
-                    (
-                        Arc::new(Field::new_list(
-                            "db_schema_tables",
-                            Arc::new(Field::new("item", 
schemas::TABLE_SCHEMA.clone(), true)),
-                            true,
-                        )),
-                        Arc::new(db_schema_tables_array) as ArrayRef,
-                    ),
-                ]);
-
-                ListArray::new(
-                    Arc::new(Field::new(
-                        "item",
-                        schemas::OBJECTS_DB_SCHEMA_SCHEMA.clone(),
-                        true,
-                    )),
-                    
OffsetBuffer::new(ScalarBuffer::from(self.catalog_db_schema_offsets.clone())),
-                    Arc::new(db_schemas_array) as ArrayRef,
-                    None,
-                )
-            }
-            _ => ListArray::new_null(
-                Arc::new(Field::new(
-                    "item",
-                    schemas::OBJECTS_DB_SCHEMA_SCHEMA.clone(),
-                    true,
-                )),
-                self.catalog_names.len(),
-            ),
-        };
-
-        let catalog_name_array = StringArray::from(self.catalog_names.clone());
-
-        let batch = RecordBatch::try_new(
-            schemas::GET_OBJECTS_SCHEMA.clone(),
-            vec![
-                Arc::new(catalog_name_array),
-                Arc::new(catalog_db_schemas_array),
-            ],
-        )?;
-
-        Ok(batch)
-    }
-}
-
-impl Connection for DataFusionConnection {
-    type StatementType = DataFusionStatement;
-
-    fn new_statement(&mut self) -> 
adbc_core::error::Result<Self::StatementType> {
-        Ok(DataFusionStatement {
-            runtime: self.runtime.clone(),
-            ctx: self.ctx.clone(),
-            sql_query: None,
-            substrait_plan: None,
-            bound_record_batch: None,
-            ingest_target_table: None,
-        })
-    }
-
-    fn cancel(&mut self) -> adbc_core::error::Result<()> {
-        todo!()
-    }
-
-    fn get_info(
-        &self,
-        codes: Option<std::collections::HashSet<adbc_core::options::InfoCode>>,
-    ) -> Result<Box<dyn RecordBatchReader + Send + 'static>> {
-        let mut get_info_builder = GetInfoBuilder::new();
-
-        codes.unwrap().into_iter().for_each(|f| match f {
-            InfoCode::DriverName => get_info_builder.set_string(f, 
"ADBCDataFusion"),
-            InfoCode::VendorName => get_info_builder.set_string(f, 
"DataFusion"),
-            InfoCode::VendorSql => get_info_builder.set_bool(f, true),
-            InfoCode::VendorSubstrait => get_info_builder.set_bool(f, true),
-            _ => {}
-        });
-
-        let batch = get_info_builder.finish()?;
-        let reader = SingleBatchReader::new(batch);
-        Ok(Box::new(reader))
-    }
-
-    fn get_objects(
-        &self,
-        depth: adbc_core::options::ObjectDepth,
-        _catalog: Option<&str>,
-        _db_schema: Option<&str>,
-        _table_name: Option<&str>,
-        _table_type: Option<Vec<&str>>,
-        _column_name: Option<&str>,
-    ) -> Result<Box<dyn RecordBatchReader + Send + 'static>> {
-        let batch = GetObjectsBuilder::new().build(&self.runtime, &self.ctx, 
&depth)?;
-        let reader = SingleBatchReader::new(batch);
-        Ok(Box::new(reader))
-    }
-
-    fn get_table_schema(
-        &self,
-        _catalog: Option<&str>,
-        _db_schema: Option<&str>,
-        _table_name: &str,
-    ) -> adbc_core::error::Result<arrow_schema::Schema> {
-        todo!()
-    }
-
-    fn get_table_types(&self) -> Result<Box<dyn RecordBatchReader + Send + 
'static>> {
-        todo!()
-    }
-
-    fn get_statistic_names(&self) -> Result<Box<dyn RecordBatchReader + Send + 
'static>> {
-        todo!()
-    }
-
-    fn get_statistics(
-        &self,
-        _catalog: Option<&str>,
-        _db_schema: Option<&str>,
-        _table_name: Option<&str>,
-        _approximate: bool,
-    ) -> Result<Box<dyn RecordBatchReader + Send + 'static>> {
-        todo!()
-    }
-
-    fn commit(&mut self) -> adbc_core::error::Result<()> {
-        todo!()
-    }
-
-    fn rollback(&mut self) -> adbc_core::error::Result<()> {
-        todo!()
-    }
-
-    fn read_partition(
-        &self,
-        _partition: impl AsRef<[u8]>,
-    ) -> Result<Box<dyn RecordBatchReader + Send + 'static>> {
-        todo!()
-    }
-}
-
-pub struct DataFusionStatement {
-    runtime: Arc<Runtime>,
-    ctx: Arc<SessionContext>,
-    sql_query: Option<String>,
-    substrait_plan: Option<Plan>,
-    bound_record_batch: Option<RecordBatch>,
-    ingest_target_table: Option<String>,
-}
-
-impl Optionable for DataFusionStatement {
-    type Option = OptionStatement;
-
-    fn set_option(
-        &mut self,
-        key: Self::Option,
-        value: adbc_core::options::OptionValue,
-    ) -> adbc_core::error::Result<()> {
-        match key.as_ref() {
-            constants::ADBC_INGEST_OPTION_TARGET_TABLE => match value {
-                OptionValue::String(value) => {
-                    self.ingest_target_table = Some(value);
-                    Ok(())
-                }
-                _ => Err(Error::with_message_and_status(
-                    "IngestOptionTargetTable value must be of type String",
-                    Status::InvalidArguments,
-                )),
-            },
-            _ => Err(Error::with_message_and_status(
-                format!("Unrecognized option: {key:?}"),
-                Status::NotFound,
-            )),
-        }
-    }
-
-    fn get_option_string(&self, key: Self::Option) -> 
adbc_core::error::Result<String> {
-        match key.as_ref() {
-            constants::ADBC_INGEST_OPTION_TARGET_TABLE => {
-                let target_table = self.ingest_target_table.clone();
-                match target_table {
-                    Some(table) => Ok(table),
-                    None => Err(Error::with_message_and_status(
-                        format!("{key:?} has not been set"),
-                        Status::NotFound,
-                    )),
-                }
-            }
-            _ => Err(Error::with_message_and_status(
-                format!("Unrecognized option: {key:?}"),
-                Status::NotFound,
-            )),
-        }
-    }
-
-    fn get_option_bytes(&self, key: Self::Option) -> 
adbc_core::error::Result<Vec<u8>> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_int(&self, key: Self::Option) -> 
adbc_core::error::Result<i64> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-
-    fn get_option_double(&self, key: Self::Option) -> 
adbc_core::error::Result<f64> {
-        Err(Error::with_message_and_status(
-            format!("Unrecognized option: {key:?}"),
-            Status::NotFound,
-        ))
-    }
-}
-
-impl Statement for DataFusionStatement {
-    fn bind(&mut self, batch: arrow_array::RecordBatch) -> 
adbc_core::error::Result<()> {
-        self.bound_record_batch.replace(batch);
-        Ok(())
-    }
-
-    fn bind_stream(
-        &mut self,
-        _reader: Box<dyn arrow_array::RecordBatchReader + Send>,
-    ) -> adbc_core::error::Result<()> {
-        todo!()
-    }
-
-    fn execute(&mut self) -> Result<Box<dyn RecordBatchReader + Send>> {
-        self.runtime.block_on(async {
-            let df = if self.sql_query.is_some() {
-                self.ctx
-                    .sql(&self.sql_query.clone().unwrap())
-                    .await
-                    .unwrap()
-            } else {
-                let plan =
-                    from_substrait_plan(&self.ctx.state(), 
&self.substrait_plan.clone().unwrap())
-                        .await
-                        .unwrap();
-                self.ctx.execute_logical_plan(plan).await.unwrap()
-            };
-
-            Ok(Box::new(DataFusionReader::new(df).await) as Box<dyn 
RecordBatchReader + Send>)
-        })
-    }
-
-    fn execute_update(&mut self) -> adbc_core::error::Result<Option<i64>> {
-        if self.sql_query.is_some() {
-            self.runtime.block_on(async {
-                let _ = self
-                    .ctx
-                    .sql(&self.sql_query.clone().unwrap())
-                    .await
-                    .unwrap();
-            });
-        } else if let Some(batch) = self.bound_record_batch.take() {
-            self.runtime.block_on(async {
-                let table = match self.ingest_target_table.clone() {
-                    Some(table) => table,
-                    None => todo!(),
-                };
-
-                self.ctx
-                    .read_batch(batch)
-                    .unwrap()
-                    .write_table(table.as_str(), DataFrameWriteOptions::new())
-                    .await
-                    .unwrap();
-            });
-        }
-
-        Ok(Some(0))
-    }
-
-    fn execute_schema(&mut self) -> 
adbc_core::error::Result<arrow_schema::Schema> {
-        self.runtime.block_on(async {
-            let df = self
-                .ctx
-                .sql(&self.sql_query.clone().unwrap())
-                .await
-                .unwrap();
-
-            Ok(df.schema().as_arrow().clone())
-        })
-    }
-
-    fn execute_partitions(&mut self) -> 
adbc_core::error::Result<adbc_core::PartitionedResult> {
-        todo!()
-    }
-
-    fn get_parameter_schema(&self) -> 
adbc_core::error::Result<arrow_schema::Schema> {
-        todo!()
-    }
-
-    fn prepare(&mut self) -> adbc_core::error::Result<()> {
-        todo!()
-    }
-
-    fn set_sql_query(&mut self, query: impl AsRef<str>) -> 
adbc_core::error::Result<()> {
-        self.sql_query = Some(query.as_ref().to_string());
-        Ok(())
-    }
-
-    fn set_substrait_plan(&mut self, plan: impl AsRef<[u8]>) -> 
adbc_core::error::Result<()> {
-        self.substrait_plan = Some(Plan::decode(plan.as_ref()).unwrap());
-        Ok(())
-    }
-
-    fn cancel(&mut self) -> adbc_core::error::Result<()> {
-        todo!()
-    }
-}
-
-#[cfg(feature = "ffi")]
-adbc_ffi::export_driver!(DataFusionDriverInit, DataFusionDriver);
diff --git a/rust/driver/datafusion/tests/test_datafusion.rs 
b/rust/driver/datafusion/tests/test_datafusion.rs
deleted file mode 100644
index 0d2767ede..000000000
--- a/rust/driver/datafusion/tests/test_datafusion.rs
+++ /dev/null
@@ -1,224 +0,0 @@
-// 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.
-
-use adbc_core::{Connection, Database, Driver, Optionable, Statement};
-use adbc_datafusion::{DataFusionConnection, DataFusionDriver};
-use arrow_array::RecordBatch;
-use datafusion::prelude::*;
-
-use adbc_core::options::{OptionConnection, OptionStatement, OptionValue};
-use arrow_select::concat::concat_batches;
-use datafusion_substrait::logical_plan::producer::to_substrait_plan;
-use datafusion_substrait::substrait::proto::Plan;
-use prost::Message;
-
-fn get_connection(handle: Option<tokio::runtime::Handle>) -> 
DataFusionConnection {
-    let mut driver = DataFusionDriver::new(handle);
-    let database = driver.new_database().unwrap();
-    database.new_connection().unwrap()
-}
-
-fn get_objects(connection: &DataFusionConnection) -> RecordBatch {
-    let objects = connection.get_objects(
-        adbc_core::options::ObjectDepth::All,
-        None,
-        None,
-        None,
-        None,
-        None,
-    );
-
-    let batches: Vec<RecordBatch> = objects.unwrap().map(|b| 
b.unwrap()).collect();
-
-    let schema = batches.first().unwrap().schema();
-
-    concat_batches(&schema, &batches).unwrap()
-}
-
-fn execute_update(connection: &mut DataFusionConnection, query: &str) {
-    let mut statement = connection.new_statement().unwrap();
-    let _ = statement.set_sql_query(query);
-    let _ = statement.execute_update();
-}
-
-fn execute_sql_query(connection: &mut DataFusionConnection, query: &str) -> 
RecordBatch {
-    let mut statement = connection.new_statement().unwrap();
-    let _ = statement.set_sql_query(query);
-
-    let batches: Vec<RecordBatch> = statement.execute().unwrap().map(|b| 
b.unwrap()).collect();
-
-    let schema = batches.first().unwrap().schema();
-
-    concat_batches(&schema, &batches).unwrap()
-}
-
-fn execute_substrait(connection: &mut DataFusionConnection, plan: Plan) -> 
RecordBatch {
-    let mut statement = connection.new_statement().unwrap();
-
-    let _ = statement.set_substrait_plan(plan.encode_to_vec());
-
-    let batches: Vec<RecordBatch> = statement.execute().unwrap().map(|b| 
b.unwrap()).collect();
-
-    let schema = batches.first().unwrap().schema();
-
-    concat_batches(&schema, &batches).unwrap()
-}
-
-#[test]
-fn test_connection_options() {
-    let mut connection = get_connection(None);
-
-    let current_catalog = connection
-        .get_option_string(OptionConnection::CurrentCatalog)
-        .unwrap();
-
-    assert_eq!(current_catalog, "datafusion");
-
-    let _ = connection.set_option(
-        OptionConnection::CurrentCatalog,
-        OptionValue::String("datafusion2".to_string()),
-    );
-
-    let current_catalog = connection
-        .get_option_string(OptionConnection::CurrentCatalog)
-        .unwrap();
-
-    assert_eq!(current_catalog, "datafusion2");
-
-    let current_schema = connection
-        .get_option_string(OptionConnection::CurrentSchema)
-        .unwrap();
-
-    assert_eq!(current_schema, "public");
-
-    let _ = connection.set_option(
-        OptionConnection::CurrentSchema,
-        OptionValue::String("public2".to_string()),
-    );
-
-    let current_schema = connection
-        .get_option_string(OptionConnection::CurrentSchema)
-        .unwrap();
-
-    assert_eq!(current_schema, "public2");
-}
-
-#[test]
-fn test_get_objects_database() {
-    let mut connection = get_connection(None);
-
-    let objects = get_objects(&connection);
-
-    assert_eq!(objects.num_rows(), 1);
-
-    execute_update(&mut connection, "CREATE DATABASE another");
-
-    let objects = get_objects(&connection);
-
-    assert_eq!(objects.num_rows(), 2);
-}
-
-#[test]
-fn test_execute_sql() {
-    let mut connection = get_connection(None);
-
-    execute_update(
-        &mut connection,
-        "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 
VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')",
-    );
-
-    let batch = execute_sql_query(&mut connection, "SELECT * FROM 
datafusion.public.example");
-
-    assert_eq!(batch.num_rows(), 3);
-    assert_eq!(batch.num_columns(), 2);
-}
-
-#[test]
-fn test_ingest() {
-    let mut connection = get_connection(None);
-
-    execute_update(
-        &mut connection,
-        "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 
VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')",
-    );
-
-    let batch = execute_sql_query(&mut connection, "SELECT * FROM 
datafusion.public.example");
-
-    assert_eq!(batch.num_rows(), 3);
-    assert_eq!(batch.num_columns(), 2);
-
-    let mut statement = connection.new_statement().unwrap();
-
-    let _ = statement.set_option(
-        OptionStatement::TargetTable,
-        OptionValue::String("example".to_string()),
-    );
-    let _ = statement.bind(batch);
-
-    let _ = statement.execute_update();
-
-    let batch = execute_sql_query(&mut connection, "SELECT * FROM 
datafusion.public.example");
-
-    assert_eq!(batch.num_rows(), 6);
-}
-
-#[test]
-fn test_execute_substrait() {
-    let mut connection = get_connection(None);
-
-    execute_update(
-        &mut connection,
-        "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 
VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')",
-    );
-
-    let ctx = SessionContext::new();
-
-    let runtime = tokio::runtime::Builder::new_multi_thread()
-        .enable_all()
-        .build()
-        .unwrap();
-
-    let plan = runtime.block_on(async {
-        let _ = ctx.sql(
-            "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 
VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')"
-        ).await;
-
-        let df = ctx.sql("SELECT c1, c2 FROM 
datafusion.public.example").await.unwrap();
-
-        to_substrait_plan(df.logical_plan(), &ctx.state()).unwrap()
-    });
-
-    let batch = execute_substrait(&mut connection, *plan);
-
-    assert_eq!(batch.num_rows(), 3);
-    assert_eq!(batch.num_columns(), 2);
-}
-
-#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
-async fn test_running_in_async() {
-    let mut connection = 
get_connection(Some(tokio::runtime::Handle::current()));
-
-    execute_update(
-        &mut connection,
-        "CREATE TABLE IF NOT EXISTS datafusion.public.example (c1 INT, c2 
VARCHAR) AS VALUES(1,'HELLO'),(2,'DATAFUSION'),(3,'!')",
-    );
-
-    let batch = execute_sql_query(&mut connection, "SELECT * FROM 
datafusion.public.example");
-
-    assert_eq!(batch.num_rows(), 3);
-    assert_eq!(batch.num_columns(), 2);
-}


Reply via email to