This is an automated email from the ASF dual-hosted git repository.
paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/sedona-db.git
The following commit(s) were added to refs/heads/main by this push:
new 4e073470 chore: Update to Arrow 57, DataFusion 50 (#466)
4e073470 is described below
commit 4e073470831c3f9b968d3d425ec3f084c24f5957
Author: Dewey Dunnington <[email protected]>
AuthorDate: Mon Jan 5 13:01:45 2026 -0600
chore: Update to Arrow 57, DataFusion 50 (#466)
Co-authored-by: Copilot <[email protected]>
---
.github/workflows/examples.yml | 2 +-
.github/workflows/packaging.yml | 2 +-
.github/workflows/python-wheels.yml | 2 +-
.github/workflows/python.yml | 4 +-
.github/workflows/r.yml | 2 +-
.github/workflows/rust-gpu.yml | 4 +-
.github/workflows/rust.yml | 4 +-
Cargo.lock | 735 +++++++++++++--------
Cargo.toml | 58 +-
c/sedona-libgpuspatial/build.rs | 4 +-
c/sedona-s2geography/s2geography | 2 +-
python/sedonadb/tests/test_sjoin.py | 2 +-
r/sedonadb/src/Makevars.win.in | 2 +-
r/sedonadb/src/rust/src/dataframe.rs | 5 +-
rust/sedona-datasource/src/format.rs | 17 +-
rust/sedona-functions/Cargo.toml | 2 +-
rust/sedona-functions/src/barrier.rs | 2 +-
rust/sedona-functions/src/st_dump.rs | 2 +-
rust/sedona-geoparquet/src/file_opener.rs | 16 +-
rust/sedona-geoparquet/src/format.rs | 11 +-
rust/sedona-raster-functions/src/rs_srid.rs | 8 +-
rust/sedona-schema/src/crs.rs | 2 +-
rust/sedona-spatial-join/Cargo.toml | 3 +-
.../bench/partitioning/common.rs | 8 +-
rust/sedona-spatial-join/bench/partitioning/kdb.rs | 8 +-
rust/sedona-spatial-join/src/exec.rs | 4 +-
rust/sedona-spatial-join/src/utils/bbox_sampler.rs | 28 +-
rust/sedona-testing/src/benchmark_util.rs | 13 +-
rust/sedona-testing/src/datagen.rs | 222 ++++---
rust/sedona-testing/src/testers.rs | 1 +
rust/sedona/Cargo.toml | 3 +-
rust/sedona/src/context.rs | 20 +-
rust/sedona/src/random_geometry_provider.rs | 2 +-
sedona-cli/src/exec.rs | 2 +-
sedona-cli/src/helper.rs | 21 +-
35 files changed, 706 insertions(+), 517 deletions(-)
diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml
index 1d801b13..95ac4914 100644
--- a/.github/workflows/examples.yml
+++ b/.github/workflows/examples.yml
@@ -66,7 +66,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache
- prefix-key: "rust-${{ matrix.name }}-v4"
+ prefix-key: "rust-${{ matrix.name }}-v5"
- name: Install dependencies
shell: bash
diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index dacee800..f85f97a6 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -113,7 +113,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache (but share with the
python.yml workflow)
- prefix-key: "python-v2"
+ prefix-key: "python-v3"
- name: Install docs requirements
run: |
diff --git a/.github/workflows/python-wheels.yml
b/.github/workflows/python-wheels.yml
index 229348fb..277404cf 100644
--- a/.github/workflows/python-wheels.yml
+++ b/.github/workflows/python-wheels.yml
@@ -60,7 +60,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache
- prefix-key: "python-wheel-windows-latest-v2"
+ prefix-key: "python-wheel-windows-latest-v3"
- name: Clone vcpkg
uses: actions/checkout@v6
diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
index bbd09c56..c82030ec 100644
--- a/.github/workflows/python.yml
+++ b/.github/workflows/python.yml
@@ -92,7 +92,7 @@ jobs:
with:
path: vcpkg/packages
# Bump the number at the end of this line to force a new dependency
build
- key: vcpkg-installed-${{ runner.os }}-${{ runner.arch }}-${{
env.VCPKG_REF }}-2
+ key: vcpkg-installed-${{ runner.os }}-${{ runner.arch }}-${{
env.VCPKG_REF }}-3
- name: Install vcpkg dependencies
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
@@ -112,7 +112,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache (sync with packaging.yml)
- prefix-key: "python-v2"
+ prefix-key: "python-v3"
- name: Install
run: |
diff --git a/.github/workflows/r.yml b/.github/workflows/r.yml
index 04cbc638..0f0ee3a4 100644
--- a/.github/workflows/r.yml
+++ b/.github/workflows/r.yml
@@ -86,7 +86,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache
- prefix-key: "r-v3"
+ prefix-key: "r-v4"
# The R package uses its own target directory
workspaces: ". -> r/sedonadb/src/rust/target"
diff --git a/.github/workflows/rust-gpu.yml b/.github/workflows/rust-gpu.yml
index 523873f1..fc54e4d3 100644
--- a/.github/workflows/rust-gpu.yml
+++ b/.github/workflows/rust-gpu.yml
@@ -179,7 +179,7 @@ jobs:
with:
path: vcpkg/packages
# Bump the number at the end of this line to force a new dependency
build
- key: vcpkg-installed-${{ runner.os }}-${{ runner.arch }}-${{
env.VCPKG_REF }}-2
+ key: vcpkg-installed-${{ runner.os }}-${{ runner.arch }}-${{
env.VCPKG_REF }}-3
# Install vcpkg dependencies from vcpkg.json manifest
- name: Install vcpkg dependencies
@@ -198,7 +198,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
- prefix-key: "rust-gpu-v3"
+ prefix-key: "rust-gpu-v4"
# Build WITH GPU feature to compile CUDA code
# CUDA compilation (nvcc) works without GPU hardware
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index bf9c2ceb..f2c4e547 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -92,7 +92,7 @@ jobs:
with:
path: vcpkg/packages
# Bump the number at the end of this line to force a new dependency
build
- key: vcpkg-installed-${{ runner.os }}-${{ runner.arch }}-${{
env.VCPKG_REF }}-2
+ key: vcpkg-installed-${{ runner.os }}-${{ runner.arch }}-${{
env.VCPKG_REF }}-3
- name: Install vcpkg dependencies
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
@@ -111,7 +111,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache
- prefix-key: "rust-${{ matrix.name }}-v4"
+ prefix-key: "rust-${{ matrix.name }}-v5"
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
diff --git a/Cargo.lock b/Cargo.lock
index a79e1c52..f946c71c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -216,7 +216,7 @@ dependencies = [
"miniz_oxide",
"num-bigint",
"quad-rand",
- "rand 0.9.2",
+ "rand",
"regex-lite",
"serde",
"serde_bytes",
@@ -262,9 +262,9 @@ checksum =
"7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "arrow"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd798aea3553913a5986813e9c6ad31a2d2b04e931fe8ea4a37155eb541cebb5"
+checksum = "4df8bb5b0bd64c0b9bc61317fcc480bad0f00e56d3bc32c69a4c8dada4786bae"
dependencies = [
"arrow-arith",
"arrow-array",
@@ -283,23 +283,23 @@ dependencies = [
[[package]]
name = "arrow-arith"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "508dafb53e5804a238cab7fd97a59ddcbfab20cc4d9814b1ab5465b9fa147f2e"
+checksum = "a1a640186d3bd30a24cb42264c2dafb30e236a6f50d510e56d40b708c9582491"
dependencies = [
"arrow-array",
"arrow-buffer",
"arrow-data",
"arrow-schema",
"chrono",
- "num",
+ "num-traits",
]
[[package]]
name = "arrow-array"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2730bc045d62bb2e53ef8395b7d4242f5c8102f41ceac15e8395b9ac3d08461"
+checksum = "219fe420e6800979744c8393b687afb0252b3f8a89b91027d27887b72aa36d31"
dependencies = [
"ahash",
"arrow-buffer",
@@ -308,26 +308,29 @@ dependencies = [
"chrono",
"chrono-tz",
"half",
- "hashbrown 0.15.5",
- "num",
+ "hashbrown 0.16.1",
+ "num-complex",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "arrow-buffer"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54295b93beb702ee9a6f6fbced08ad7f4d76ec1c297952d4b83cf68755421d1d"
+checksum = "76885a2697a7edf6b59577f568b456afc94ce0e2edc15b784ce3685b6c3c5c27"
dependencies = [
"bytes",
"half",
- "num",
+ "num-bigint",
+ "num-traits",
]
[[package]]
name = "arrow-cast"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67e8bcb7dc971d779a7280593a1bf0c2743533b8028909073e804552e85e75b5"
+checksum = "9c9ebb4c987e6b3b236fb4a14b20b34835abfdd80acead3ccf1f9bf399e1f168"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -340,15 +343,15 @@ dependencies = [
"comfy-table",
"half",
"lexical-core",
- "num",
+ "num-traits",
"ryu",
]
[[package]]
name = "arrow-csv"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "673fd2b5fb57a1754fdbfac425efd7cf54c947ac9950c1cce86b14e248f1c458"
+checksum = "92386159c8d4bce96f8bd396b0642a0d544d471bdc2ef34d631aec80db40a09c"
dependencies = [
"arrow-array",
"arrow-cast",
@@ -361,26 +364,28 @@ dependencies = [
[[package]]
name = "arrow-data"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97c22fe3da840039c69e9f61f81e78092ea36d57037b4900151f063615a2f6b4"
+checksum = "727681b95de313b600eddc2a37e736dcb21980a40f640314dcf360e2f36bc89b"
dependencies = [
"arrow-buffer",
"arrow-schema",
"half",
- "num",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "arrow-ipc"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "778de14c5a69aedb27359e3dd06dd5f9c481d5f6ee9fbae912dba332fd64636b"
+checksum = "da9ba92e3de170295c98a84e5af22e2b037f0c7b32449445e6c493b5fca27f27"
dependencies = [
"arrow-array",
"arrow-buffer",
"arrow-data",
"arrow-schema",
+ "arrow-select",
"flatbuffers",
"lz4_flex",
"zstd",
@@ -388,9 +393,9 @@ dependencies = [
[[package]]
name = "arrow-json"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3860db334fe7b19fcf81f6b56f8d9d95053f3839ffe443d56b5436f7a29a1794"
+checksum = "b969b4a421ae83828591c6bf5450bd52e6d489584142845ad6a861f42fe35df8"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -400,19 +405,21 @@ dependencies = [
"chrono",
"half",
"indexmap",
+ "itoa",
"lexical-core",
"memchr",
- "num",
- "serde",
+ "num-traits",
+ "ryu",
+ "serde_core",
"serde_json",
"simdutf8",
]
[[package]]
name = "arrow-ord"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "425fa0b42a39d3ff55160832e7c25553e7f012c3f187def3d70313e7a29ba5d9"
+checksum = "141c05298b21d03e88062317a1f1a73f5ba7b6eb041b350015b1cd6aabc0519b"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -423,9 +430,9 @@ dependencies = [
[[package]]
name = "arrow-row"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df9c9423c9e71abd1b08a7f788fcd203ba2698ac8e72a1f236f1faa1a06a7414"
+checksum = "c5f3c06a6abad6164508ed283c7a02151515cef3de4b4ff2cebbcaeb85533db2"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -436,34 +443,34 @@ dependencies = [
[[package]]
name = "arrow-schema"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85fa1babc4a45fdc64a92175ef51ff00eba5ebbc0007962fecf8022ac1c6ce28"
+checksum = "9cfa7a03d1eee2a4d061476e1840ad5c9867a544ca6c4c59256496af5d0a8be5"
dependencies = [
"bitflags",
- "serde",
+ "serde_core",
"serde_json",
]
[[package]]
name = "arrow-select"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8854d15f1cf5005b4b358abeb60adea17091ff5bdd094dca5d3f73787d81170"
+checksum = "bafa595babaad59f2455f4957d0f26448fb472722c186739f4fac0823a1bdb47"
dependencies = [
"ahash",
"arrow-array",
"arrow-buffer",
"arrow-data",
"arrow-schema",
- "num",
+ "num-traits",
]
[[package]]
name = "arrow-string"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c477e8b89e1213d5927a2a84a72c384a9bf4dd0dbf15f9fd66d821aafd9e95e"
+checksum = "32f46457dbbb99f2650ff3ac23e46a929e0ab81db809b02aa5511c258348bef2"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -471,11 +478,23 @@ dependencies = [
"arrow-schema",
"arrow-select",
"memchr",
- "num",
+ "num-traits",
"regex",
"regex-syntax",
]
+[[package]]
+name = "as-slice"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0"
+dependencies = [
+ "generic-array 0.12.4",
+ "generic-array 0.13.3",
+ "generic-array 0.14.7",
+ "stable_deref_trait",
+]
+
[[package]]
name = "as_derive_utils"
version = "0.11.0"
@@ -534,6 +553,15 @@ dependencies = [
"num-traits",
]
+[[package]]
+name = "atomic-polyfill"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4"
+dependencies = [
+ "critical-section",
+]
+
[[package]]
name = "atomic-waker"
version = "1.1.2"
@@ -559,9 +587,9 @@ checksum =
"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "aws-config"
-version = "1.8.11"
+version = "1.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0149602eeaf915158e14029ba0c78dedb8c08d554b024d54c8f239aab46511d"
+checksum = "96571e6996817bf3d58f6b569e4b9fd2e9d2fcf9f7424eed07b2ce9bb87535e5"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -589,9 +617,9 @@ dependencies = [
[[package]]
name = "aws-credential-types"
-version = "1.2.10"
+version = "1.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b01c9521fa01558f750d183c8c68c81b0155b9d193a4ba7f84c36bd1b6d04a06"
+checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -601,9 +629,9 @@ dependencies = [
[[package]]
name = "aws-lc-rs"
-version = "1.15.1"
+version = "1.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f"
+checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288"
dependencies = [
"aws-lc-sys",
"zeroize",
@@ -611,9 +639,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.34.0"
+version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6"
+checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1"
dependencies = [
"cc",
"cmake",
@@ -623,9 +651,9 @@ dependencies = [
[[package]]
name = "aws-runtime"
-version = "1.5.16"
+version = "1.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ce527fb7e53ba9626fc47824f25e256250556c40d8f81d27dd92aa38239d632"
+checksum = "d81b5b2898f6798ad58f484856768bca817e3cd9de0974c24ae0f1113fe88f1b"
dependencies = [
"aws-credential-types",
"aws-sigv4",
@@ -647,9 +675,9 @@ dependencies = [
[[package]]
name = "aws-sdk-sso"
-version = "1.90.0"
+version = "1.91.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f18e53542c522459e757f81e274783a78f8c81acdfc8d1522ee8a18b5fb1c66"
+checksum = "8ee6402a36f27b52fe67661c6732d684b2635152b676aa2babbfb5204f99115d"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -669,9 +697,9 @@ dependencies = [
[[package]]
name = "aws-sdk-ssooidc"
-version = "1.92.0"
+version = "1.93.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "532f4d866012ffa724a4385c82e8dd0e59f0ca0e600f3f22d4c03b6824b34e4a"
+checksum = "a45a7f750bbd170ee3677671ad782d90b894548f4e4ae168302c57ec9de5cb3e"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -691,9 +719,9 @@ dependencies = [
[[package]]
name = "aws-sdk-sts"
-version = "1.94.0"
+version = "1.95.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1be6fbbfa1a57724788853a623378223fe828fc4c09b146c992f0c95b6256174"
+checksum = "55542378e419558e6b1f398ca70adb0b2088077e79ad9f14eb09441f2f7b2164"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -714,9 +742,9 @@ dependencies = [
[[package]]
name = "aws-sigv4"
-version = "1.3.6"
+version = "1.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c35452ec3f001e1f2f6db107b6373f1f48f05ec63ba2c5c9fa91f07dad32af11"
+checksum = "69e523e1c4e8e7e8ff219d732988e22bfeae8a1cafdbe6d9eca1546fa080be7c"
dependencies = [
"aws-credential-types",
"aws-smithy-http",
@@ -736,9 +764,9 @@ dependencies = [
[[package]]
name = "aws-smithy-async"
-version = "1.2.6"
+version = "1.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "127fcfad33b7dfc531141fda7e1c402ac65f88aca5511a4d31e2e3d2cd01ce9c"
+checksum = "9ee19095c7c4dda59f1697d028ce704c24b2d33c6718790c7f1d5a3015b4107c"
dependencies = [
"futures-util",
"pin-project-lite",
@@ -747,9 +775,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http"
-version = "0.62.5"
+version = "0.62.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445d5d720c99eed0b4aa674ed00d835d9b1427dd73e04adaf2f94c6b2d6f9fca"
+checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b"
dependencies = [
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -768,9 +796,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http-client"
-version = "1.1.4"
+version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "623254723e8dfd535f566ee7b2381645f8981da086b5c4aa26c0c41582bb1d2c"
+checksum = "59e62db736db19c488966c8d787f52e6270be565727236fd5579eaa301e7bc4a"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -792,27 +820,27 @@ dependencies = [
[[package]]
name = "aws-smithy-json"
-version = "0.61.7"
+version = "0.61.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2db31f727935fc63c6eeae8b37b438847639ec330a9161ece694efba257e0c54"
+checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551"
dependencies = [
"aws-smithy-types",
]
[[package]]
name = "aws-smithy-observability"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d1881b1ea6d313f9890710d65c158bdab6fb08c91ea825f74c1c8c357baf4cc"
+checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a"
dependencies = [
"aws-smithy-runtime-api",
]
[[package]]
name = "aws-smithy-query"
-version = "0.60.8"
+version = "0.60.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d28a63441360c477465f80c7abac3b9c4d075ca638f982e605b7dc2a2c7156c9"
+checksum = "ae5d689cf437eae90460e944a58b5668530d433b4ff85789e69d2f2a556e057d"
dependencies = [
"aws-smithy-types",
"urlencoding",
@@ -820,9 +848,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime"
-version = "1.9.4"
+version = "1.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bbe9d018d646b96c7be063dd07987849862b0e6d07c778aad7d93d1be6c1ef0"
+checksum = "65fda37911905ea4d3141a01364bc5509a0f32ae3f3b22d6e330c0abfb62d247"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
@@ -844,9 +872,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime-api"
-version = "1.9.2"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec7204f9fd94749a7c53b26da1b961b4ac36bf070ef1e0b94bb09f79d4f6c193"
+checksum = "ab0d43d899f9e508300e587bf582ba54c27a452dd0a9ea294690669138ae14a2"
dependencies = [
"aws-smithy-async",
"aws-smithy-types",
@@ -861,9 +889,9 @@ dependencies = [
[[package]]
name = "aws-smithy-types"
-version = "1.3.4"
+version = "1.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25f535879a207fce0db74b679cfc3e91a3159c8144d717d55f5832aea9eef46e"
+checksum = "905cb13a9895626d49cf2ced759b062d913834c7482c38e49557eac4e6193f01"
dependencies = [
"base64-simd",
"bytes",
@@ -884,18 +912,18 @@ dependencies = [
[[package]]
name = "aws-smithy-xml"
-version = "0.60.12"
+version = "0.60.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eab77cdd036b11056d2a30a7af7b775789fb024bf216acc13884c6c97752ae56"
+checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57"
dependencies = [
"xmlparser",
]
[[package]]
name = "aws-types"
-version = "1.3.10"
+version = "1.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d79fb68e3d7fe5d4833ea34dc87d2e97d26d3086cb3da660bb6b1f76d98680b6"
+checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164"
dependencies = [
"aws-credential-types",
"aws-smithy-async",
@@ -989,7 +1017,7 @@ version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
- "generic-array",
+ "generic-array 0.14.7",
]
[[package]]
@@ -1040,9 +1068,9 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.19.0"
+version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
+checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
[[package]]
name = "bytemuck"
@@ -1108,9 +1136,9 @@ checksum =
"37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
name = "cc"
-version = "1.2.48"
+version = "1.2.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a"
+checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -1250,9 +1278,9 @@ dependencies = [
[[package]]
name = "cmake"
-version = "0.1.54"
+version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0"
+checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d"
dependencies = [
"cc",
]
@@ -1393,6 +1421,12 @@ dependencies = [
"itertools 0.13.0",
]
+[[package]]
+name = "critical-section"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
[[package]]
name = "crossbeam-channel"
version = "0.5.15"
@@ -1462,7 +1496,7 @@ version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
dependencies = [
- "generic-array",
+ "generic-array 0.14.7",
"typenum",
]
@@ -1573,12 +1607,11 @@ dependencies = [
[[package]]
name = "datafusion"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2af15bb3c6ffa33011ef579f6b0bcbe7c26584688bd6c994f548e44df67f011a"
+checksum = "8ba7cb113e9c0bedf9e9765926031e132fa05a1b09ba6e93a6d1a4d7044457b8"
dependencies = [
"arrow",
- "arrow-ipc",
"arrow-schema",
"async-trait",
"bytes",
@@ -1589,6 +1622,7 @@ dependencies = [
"datafusion-common",
"datafusion-common-runtime",
"datafusion-datasource",
+ "datafusion-datasource-arrow",
"datafusion-datasource-avro",
"datafusion-datasource-csv",
"datafusion-datasource-json",
@@ -1616,8 +1650,9 @@ dependencies = [
"object_store",
"parking_lot",
"parquet",
- "rand 0.9.2",
+ "rand",
"regex",
+ "rstest",
"sqlparser",
"tempfile",
"tokio",
@@ -1629,9 +1664,9 @@ dependencies = [
[[package]]
name = "datafusion-catalog"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "187622262ad8f7d16d3be9202b4c1e0116f1c9aa387e5074245538b755261621"
+checksum = "66a3a799f914a59b1ea343906a0486f17061f39509af74e874a866428951130d"
dependencies = [
"arrow",
"async-trait",
@@ -1644,7 +1679,6 @@ dependencies = [
"datafusion-physical-expr",
"datafusion-physical-plan",
"datafusion-session",
- "datafusion-sql",
"futures",
"itertools 0.14.0",
"log",
@@ -1655,9 +1689,9 @@ dependencies = [
[[package]]
name = "datafusion-catalog-listing"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9657314f0a32efd0382b9a46fdeb2d233273ece64baa68a7c45f5a192daf0f83"
+checksum = "6db1b113c80d7a0febcd901476a57aef378e717c54517a163ed51417d87621b0"
dependencies = [
"arrow",
"async-trait",
@@ -1667,10 +1701,11 @@ dependencies = [
"datafusion-execution",
"datafusion-expr",
"datafusion-physical-expr",
+ "datafusion-physical-expr-adapter",
"datafusion-physical-expr-common",
"datafusion-physical-plan",
- "datafusion-session",
"futures",
+ "itertools 0.14.0",
"log",
"object_store",
"tokio",
@@ -1678,15 +1713,14 @@ dependencies = [
[[package]]
name = "datafusion-common"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a83760d9a13122d025fbdb1d5d5aaf93dd9ada5e90ea229add92aa30898b2d1"
+checksum = "7c10f7659e96127d25e8366be7c8be4109595d6a2c3eac70421f380a7006a1b0"
dependencies = [
"ahash",
"apache-avro",
"arrow",
"arrow-ipc",
- "base64",
"chrono",
"half",
"hashbrown 0.14.5",
@@ -1704,9 +1738,9 @@ dependencies = [
[[package]]
name = "datafusion-common-runtime"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b6234a6c7173fe5db1c6c35c01a12b2aa0f803a3007feee53483218817f8b1e"
+checksum = "b92065bbc6532c6651e2f7dd30b55cba0c7a14f860c7e1d15f165c41a1868d95"
dependencies = [
"futures",
"log",
@@ -1715,9 +1749,9 @@ dependencies = [
[[package]]
name = "datafusion-datasource"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7256c9cb27a78709dd42d0c80f0178494637209cac6e29d5c93edd09b6721b86"
+checksum = "fde13794244bc7581cd82f6fff217068ed79cdc344cafe4ab2c3a1c3510b38d6"
dependencies = [
"arrow",
"async-compression",
@@ -1740,9 +1774,7 @@ dependencies = [
"itertools 0.14.0",
"log",
"object_store",
- "parquet",
- "rand 0.9.2",
- "tempfile",
+ "rand",
"tokio",
"tokio-util",
"url",
@@ -1750,47 +1782,64 @@ dependencies = [
"zstd",
]
+[[package]]
+name = "datafusion-datasource-arrow"
+version = "51.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "804fa9b4ecf3157982021770617200ef7c1b2979d57bec9044748314775a9aea"
+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 0.14.0",
+ "object_store",
+ "tokio",
+]
+
[[package]]
name = "datafusion-datasource-avro"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10d40b6953ebc9099b37adfd12fde97eb73ff0cee44355c6dea64b8a4537d561"
+checksum = "388ed8be535f562cc655b9c3d22edbfb0f1a50a25c242647a98b6d92a75b55a1"
dependencies = [
"apache-avro",
"arrow",
"async-trait",
"bytes",
- "chrono",
- "datafusion-catalog",
"datafusion-common",
"datafusion-datasource",
- "datafusion-execution",
- "datafusion-physical-expr",
"datafusion-physical-expr-common",
"datafusion-physical-plan",
"datafusion-session",
"futures",
"num-traits",
"object_store",
- "tokio",
]
[[package]]
name = "datafusion-datasource-csv"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64533a90f78e1684bfb113d200b540f18f268134622d7c96bbebc91354d04825"
+checksum = "61a1641a40b259bab38131c5e6f48fac0717bedb7dc93690e604142a849e0568"
dependencies = [
"arrow",
"async-trait",
"bytes",
- "datafusion-catalog",
"datafusion-common",
"datafusion-common-runtime",
"datafusion-datasource",
"datafusion-execution",
"datafusion-expr",
- "datafusion-physical-expr",
"datafusion-physical-expr-common",
"datafusion-physical-plan",
"datafusion-session",
@@ -1802,49 +1851,44 @@ dependencies = [
[[package]]
name = "datafusion-datasource-json"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d7ebeb12c77df0aacad26f21b0d033aeede423a64b2b352f53048a75bf1d6e6"
+checksum = "adeacdb00c1d37271176f8fb6a1d8ce096baba16ea7a4b2671840c5c9c64fe85"
dependencies = [
"arrow",
"async-trait",
"bytes",
- "datafusion-catalog",
"datafusion-common",
"datafusion-common-runtime",
"datafusion-datasource",
"datafusion-execution",
"datafusion-expr",
- "datafusion-physical-expr",
"datafusion-physical-expr-common",
"datafusion-physical-plan",
"datafusion-session",
"futures",
"object_store",
- "serde_json",
"tokio",
]
[[package]]
name = "datafusion-datasource-parquet"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09e783c4c7d7faa1199af2df4761c68530634521b176a8d1331ddbc5a5c75133"
+checksum = "43d0b60ffd66f28bfb026565d62b0a6cbc416da09814766a3797bba7d85a3cd9"
dependencies = [
"arrow",
"async-trait",
"bytes",
- "datafusion-catalog",
"datafusion-common",
"datafusion-common-runtime",
"datafusion-datasource",
"datafusion-execution",
"datafusion-expr",
- "datafusion-functions-aggregate",
+ "datafusion-functions-aggregate-common",
"datafusion-physical-expr",
"datafusion-physical-expr-adapter",
"datafusion-physical-expr-common",
- "datafusion-physical-optimizer",
"datafusion-physical-plan",
"datafusion-pruning",
"datafusion-session",
@@ -1854,21 +1898,20 @@ dependencies = [
"object_store",
"parking_lot",
"parquet",
- "rand 0.9.2",
"tokio",
]
[[package]]
name = "datafusion-doc"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99ee6b1d9a80d13f9deb2291f45c07044b8e62fb540dbde2453a18be17a36429"
+checksum = "2b99e13947667b36ad713549237362afb054b2d8f8cc447751e23ec61202db07"
[[package]]
name = "datafusion-execution"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4cec0a57653bec7b933fb248d3ffa3fa3ab3bd33bd140dc917f714ac036f531"
+checksum = "63695643190679037bc946ad46a263b62016931547bf119859c511f7ff2f5178"
dependencies = [
"arrow",
"async-trait",
@@ -1879,16 +1922,16 @@ dependencies = [
"log",
"object_store",
"parking_lot",
- "rand 0.9.2",
+ "rand",
"tempfile",
"url",
]
[[package]]
name = "datafusion-expr"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef76910bdca909722586389156d0aa4da4020e1631994d50fadd8ad4b1aa05fe"
+checksum = "f9a4787cbf5feb1ab351f789063398f67654a6df75c4d37d7f637dc96f951a91"
dependencies = [
"arrow",
"async-trait",
@@ -1900,6 +1943,7 @@ dependencies = [
"datafusion-functions-window-common",
"datafusion-physical-expr-common",
"indexmap",
+ "itertools 0.14.0",
"paste",
"recursive",
"serde_json",
@@ -1908,9 +1952,9 @@ dependencies = [
[[package]]
name = "datafusion-expr-common"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d155ccbda29591ca71a1344dd6bed26c65a4438072b400df9db59447f590bb6"
+checksum = "5ce2fb1b8c15c9ac45b0863c30b268c69dc9ee7a1ee13ecf5d067738338173dc"
dependencies = [
"arrow",
"datafusion-common",
@@ -1921,9 +1965,9 @@ dependencies = [
[[package]]
name = "datafusion-ffi"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25ddb7c4e645df080c27dad13a198d191da328dd1c98e198664a7a0f64b335cc"
+checksum = "ec510e7787641279b0336e8b79e4b7bd1385d5976875ff9b97f4269ce5231a67"
dependencies = [
"abi_stable",
"arrow",
@@ -1931,6 +1975,7 @@ dependencies = [
"async-ffi",
"async-trait",
"datafusion",
+ "datafusion-common",
"datafusion-functions-aggregate-common",
"datafusion-proto",
"datafusion-proto-common",
@@ -1943,9 +1988,9 @@ dependencies = [
[[package]]
name = "datafusion-functions"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7de2782136bd6014670fd84fe3b0ca3b3e4106c96403c3ae05c0598577139977"
+checksum = "794a9db7f7b96b3346fc007ff25e994f09b8f0511b4cf7dff651fadfe3ebb28f"
dependencies = [
"arrow",
"arrow-buffer",
@@ -1963,7 +2008,8 @@ dependencies = [
"itertools 0.14.0",
"log",
"md-5",
- "rand 0.9.2",
+ "num-traits",
+ "rand",
"regex",
"sha2",
"unicode-segmentation",
@@ -1972,9 +2018,9 @@ dependencies = [
[[package]]
name = "datafusion-functions-aggregate"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07331fc13603a9da97b74fd8a273f4238222943dffdbbed1c4c6f862a30105bf"
+checksum = "1c25210520a9dcf9c2b2cbbce31ebd4131ef5af7fc60ee92b266dc7d159cb305"
dependencies = [
"ahash",
"arrow",
@@ -1993,9 +2039,9 @@ dependencies = [
[[package]]
name = "datafusion-functions-aggregate-common"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5951e572a8610b89968a09b5420515a121fbc305c0258651f318dc07c97ab17"
+checksum = "62f4a66f3b87300bb70f4124b55434d2ae3fe80455f3574701d0348da040b55d"
dependencies = [
"ahash",
"arrow",
@@ -2006,9 +2052,9 @@ dependencies = [
[[package]]
name = "datafusion-functions-nested"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdacca9302c3d8fc03f3e94f338767e786a88a33f5ebad6ffc0e7b50364b9ea3"
+checksum = "ae5c06eed03918dc7fe7a9f082a284050f0e9ecf95d72f57712d1496da03b8c4"
dependencies = [
"arrow",
"arrow-ord",
@@ -2016,6 +2062,7 @@ dependencies = [
"datafusion-doc",
"datafusion-execution",
"datafusion-expr",
+ "datafusion-expr-common",
"datafusion-functions",
"datafusion-functions-aggregate",
"datafusion-functions-aggregate-common",
@@ -2028,9 +2075,9 @@ dependencies = [
[[package]]
name = "datafusion-functions-table"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c37ff8a99434fbbad604a7e0669717c58c7c4f14c472d45067c4b016621d981"
+checksum = "db4fed1d71738fbe22e2712d71396db04c25de4111f1ec252b8f4c6d3b25d7f5"
dependencies = [
"arrow",
"async-trait",
@@ -2044,9 +2091,9 @@ dependencies = [
[[package]]
name = "datafusion-functions-window"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48e2aea7c79c926cffabb13dc27309d4eaeb130f4a21c8ba91cdd241c813652b"
+checksum = "1d92206aa5ae21892f1552b4d61758a862a70956e6fd7a95cb85db1de74bc6d1"
dependencies = [
"arrow",
"datafusion-common",
@@ -2062,9 +2109,9 @@ dependencies = [
[[package]]
name = "datafusion-functions-window-common"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fead257ab5fd2ffc3b40fda64da307e20de0040fe43d49197241d9de82a487f"
+checksum = "53ae9bcc39800820d53a22d758b3b8726ff84a5a3e24cecef04ef4e5fdf1c7cc"
dependencies = [
"datafusion-common",
"datafusion-physical-expr-common",
@@ -2072,20 +2119,20 @@ dependencies = [
[[package]]
name = "datafusion-macros"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec6f637bce95efac05cdfb9b6c19579ed4aa5f6b94d951cfa5bb054b7bb4f730"
+checksum = "1063ad4c9e094b3f798acee16d9a47bd7372d9699be2de21b05c3bd3f34ab848"
dependencies = [
- "datafusion-expr",
+ "datafusion-doc",
"quote",
"syn 2.0.111",
]
[[package]]
name = "datafusion-optimizer"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6583ef666ae000a613a837e69e456681a9faa96347bf3877661e9e89e141d8a"
+checksum = "9f35f9ec5d08b87fd1893a30c2929f2559c2f9806ca072d8fefca5009dc0f06a"
dependencies = [
"arrow",
"chrono",
@@ -2103,9 +2150,9 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8668103361a272cbbe3a61f72eca60c9b7c706e87cc3565bcf21e2b277b84f6"
+checksum = "c30cc8012e9eedcb48bbe112c6eff4ae5ed19cf3003cb0f505662e88b7014c5d"
dependencies = [
"ahash",
"arrow",
@@ -2118,7 +2165,6 @@ dependencies = [
"hashbrown 0.14.5",
"indexmap",
"itertools 0.14.0",
- "log",
"parking_lot",
"paste",
"petgraph",
@@ -2126,9 +2172,9 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr-adapter"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "815acced725d30601b397e39958e0e55630e0a10d66ef7769c14ae6597298bb0"
+checksum = "7f9ff2dbd476221b1f67337699eff432781c4e6e1713d2aefdaa517dfbf79768"
dependencies = [
"arrow",
"datafusion-common",
@@ -2141,9 +2187,9 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr-common"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6652fe7b5bf87e85ed175f571745305565da2c0b599d98e697bcbedc7baa47c3"
+checksum = "90da43e1ec550b172f34c87ec68161986ced70fd05c8d2a2add66eef9c276f03"
dependencies = [
"ahash",
"arrow",
@@ -2155,9 +2201,9 @@ dependencies = [
[[package]]
name = "datafusion-physical-optimizer"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49b7d623eb6162a3332b564a0907ba00895c505d101b99af78345f1acf929b5c"
+checksum = "ce9804f799acd7daef3be7aaffe77c0033768ed8fdbf5fb82fc4c5f2e6bc14e6"
dependencies = [
"arrow",
"datafusion-common",
@@ -2169,15 +2215,14 @@ dependencies = [
"datafusion-physical-plan",
"datafusion-pruning",
"itertools 0.14.0",
- "log",
"recursive",
]
[[package]]
name = "datafusion-physical-plan"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2f7f778a1a838dec124efb96eae6144237d546945587557c9e6936b3414558c"
+checksum = "0acf0ad6b6924c6b1aa7d213b181e012e2d3ec0a64ff5b10ee6282ab0f8532ac"
dependencies = [
"ahash",
"arrow",
@@ -2206,15 +2251,26 @@ dependencies = [
[[package]]
name = "datafusion-proto"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7df9f606892e6af45763d94d210634eec69b9bb6ced5353381682ff090028a3"
+checksum = "d368093a98a17d1449b1083ac22ed16b7128e4c67789991869480d8c4a40ecb9"
dependencies = [
"arrow",
"chrono",
- "datafusion",
+ "datafusion-catalog",
+ "datafusion-catalog-listing",
"datafusion-common",
+ "datafusion-datasource",
+ "datafusion-datasource-arrow",
+ "datafusion-datasource-csv",
+ "datafusion-datasource-json",
+ "datafusion-datasource-parquet",
+ "datafusion-execution",
"datafusion-expr",
+ "datafusion-functions-table",
+ "datafusion-physical-expr",
+ "datafusion-physical-expr-common",
+ "datafusion-physical-plan",
"datafusion-proto-common",
"object_store",
"prost",
@@ -2222,9 +2278,9 @@ dependencies = [
[[package]]
name = "datafusion-proto-common"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4b14f288ca4ef77743d9672cafecf3adfffff0b9b04af9af79ecbeaaf736901"
+checksum = "3b6aef3d5e5c1d2bc3114c4876730cb76a9bdc5a8df31ef1b6db48f0c1671895"
dependencies = [
"arrow",
"datafusion-common",
@@ -2233,12 +2289,11 @@ dependencies = [
[[package]]
name = "datafusion-pruning"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd1e59e2ca14fe3c30f141600b10ad8815e2856caa59ebbd0e3e07cd3d127a65"
+checksum = "ac2c2498a1f134a9e11a9f5ed202a2a7d7e9774bd9249295593053ea3be999db"
dependencies = [
"arrow",
- "arrow-schema",
"datafusion-common",
"datafusion-datasource",
"datafusion-expr-common",
@@ -2251,36 +2306,27 @@ dependencies = [
[[package]]
name = "datafusion-session"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21ef8e2745583619bd7a49474e8f45fbe98ebb31a133f27802217125a7b3d58d"
+checksum = "8f96eebd17555386f459037c65ab73aae8df09f464524c709d6a3134ad4f4776"
dependencies = [
- "arrow",
"async-trait",
- "dashmap",
"datafusion-common",
- "datafusion-common-runtime",
"datafusion-execution",
"datafusion-expr",
- "datafusion-physical-expr",
"datafusion-physical-plan",
- "datafusion-sql",
- "futures",
- "itertools 0.14.0",
- "log",
- "object_store",
"parking_lot",
- "tokio",
]
[[package]]
name = "datafusion-sql"
-version = "50.3.0"
+version = "51.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89abd9868770386fede29e5a4b14f49c0bf48d652c3b9d7a8a0332329b87d50b"
+checksum = "3fc195fe60634b2c6ccfd131b487de46dc30eccae8a3c35a13f136e7f440414f"
dependencies = [
"arrow",
"bigdecimal",
+ "chrono",
"datafusion-common",
"datafusion-expr",
"indexmap",
@@ -2642,6 +2688,24 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309"
+dependencies = [
+ "typenum",
+]
+
[[package]]
name = "generic-array"
version = "0.14.7"
@@ -2666,7 +2730,7 @@ dependencies = [
"log",
"num-traits",
"robust",
- "rstar",
+ "rstar 0.12.2",
"spade",
]
@@ -2703,7 +2767,11 @@ dependencies = [
"approx",
"num-traits",
"rayon",
- "rstar",
+ "rstar 0.10.0",
+ "rstar 0.11.0",
+ "rstar 0.12.2",
+ "rstar 0.8.4",
+ "rstar 0.9.3",
"serde",
]
@@ -2716,6 +2784,19 @@ dependencies = [
"libm",
]
+[[package]]
+name = "geojson"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e26f3c45b36fccc9cf2805e61d4da6bc4bbd5a3a9589b01afa3a40eff703bd79"
+dependencies = [
+ "geo-types",
+ "log",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.17",
+]
+
[[package]]
name = "geos"
version = "10.0.0"
@@ -2802,6 +2883,24 @@ dependencies = [
"zerocopy",
]
+[[package]]
+name = "hash32"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
[[package]]
name = "hash32"
version = "0.3.1"
@@ -2838,13 +2937,38 @@ version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+[[package]]
+name = "heapless"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634bd4d29cbf24424d0a4bfcbf80c6960129dc24424752a7d1d1390607023422"
+dependencies = [
+ "as-slice",
+ "generic-array 0.14.7",
+ "hash32 0.1.1",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heapless"
+version = "0.7.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f"
+dependencies = [
+ "atomic-polyfill",
+ "hash32 0.2.1",
+ "rustc_version",
+ "spin",
+ "stable_deref_trait",
+]
+
[[package]]
name = "heapless"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
dependencies = [
- "hash32",
+ "hash32 0.3.1",
"stable_deref_trait",
]
@@ -3141,9 +3265,9 @@ checksum =
"7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
[[package]]
name = "icu_properties"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
+checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
dependencies = [
"icu_collections",
"icu_locale_core",
@@ -3155,9 +3279,9 @@ dependencies = [
[[package]]
name = "icu_properties_data"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
+checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
[[package]]
name = "icu_provider"
@@ -3432,13 +3556,13 @@ dependencies = [
[[package]]
name = "libredox"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
+checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
dependencies = [
"bitflags",
"libc",
- "redox_syscall",
+ "redox_syscall 0.6.0",
]
[[package]]
@@ -3453,9 +3577,9 @@ dependencies = [
[[package]]
name = "libz-rs-sys"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b484ba8d4f775eeca644c452a56650e544bf7e617f1d170fe7298122ead5222"
+checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c"
dependencies = [
"zlib-rs",
]
@@ -3762,7 +3886,7 @@ dependencies = [
"parking_lot",
"percent-encoding",
"quick-xml",
- "rand 0.9.2",
+ "rand",
"reqwest",
"ring",
"rustls-pemfile",
@@ -3851,16 +3975,16 @@ checksum =
"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall",
+ "redox_syscall 0.5.18",
"smallvec",
"windows-link",
]
[[package]]
name = "parquet"
-version = "56.0.0"
+version = "57.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7288a07ed5d25939a90f9cb1ca5afa6855faa08ec7700613511ae64bdb0620c"
+checksum = "7a0f31027ef1af7549f7cec603a9a21dce706d3f8d7c2060a68f43c1773be95a"
dependencies = [
"ahash",
"arrow-array",
@@ -3877,13 +4001,13 @@ dependencies = [
"flate2",
"futures",
"half",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
"lz4_flex",
- "num",
"num-bigint",
+ "num-integer",
+ "num-traits",
"object_store",
"paste",
- "ring",
"seq-macro",
"simdutf8",
"snap",
@@ -3899,6 +4023,12 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+[[package]]
+name = "pdqselect"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27"
+
[[package]]
name = "percent-encoding"
version = "2.3.2"
@@ -4074,9 +4204,9 @@ dependencies = [
[[package]]
name = "prost"
-version = "0.13.5"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5"
+checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d"
dependencies = [
"bytes",
"prost-derive",
@@ -4084,9 +4214,9 @@ dependencies = [
[[package]]
name = "prost-derive"
-version = "0.13.5"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d"
+checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425"
dependencies = [
"anyhow",
"itertools 0.14.0",
@@ -4218,7 +4348,7 @@ dependencies = [
"bytes",
"getrandom 0.3.4",
"lru-slab",
- "rand 0.9.2",
+ "rand",
"ring",
"rustc-hash",
"rustls",
@@ -4269,35 +4399,14 @@ dependencies = [
"nibble_vec",
]
-[[package]]
-name = "rand"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-dependencies = [
- "libc",
- "rand_chacha 0.3.1",
- "rand_core 0.6.4",
-]
-
[[package]]
name = "rand"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
- "rand_chacha 0.9.0",
- "rand_core 0.9.3",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core 0.6.4",
+ "rand_chacha",
+ "rand_core",
]
[[package]]
@@ -4307,16 +4416,7 @@ source =
"registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
- "rand_core 0.9.3",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-dependencies = [
- "getrandom 0.2.16",
+ "rand_core",
]
[[package]]
@@ -4335,7 +4435,7 @@ source =
"registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463"
dependencies = [
"num-traits",
- "rand 0.9.2",
+ "rand",
]
[[package]]
@@ -4387,6 +4487,15 @@ dependencies = [
"bitflags",
]
+[[package]]
+name = "redox_syscall"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5"
+dependencies = [
+ "bitflags",
+]
+
[[package]]
name = "redox_users"
version = "0.5.2"
@@ -4450,9 +4559,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.12.24"
+version = "0.12.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
+checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f"
dependencies = [
"base64",
"bytes",
@@ -4510,14 +4619,64 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839"
+[[package]]
+name = "rstar"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a45c0e8804d37e4d97e55c6f258bc9ad9c5ee7b07437009dd152d764949a27c"
+dependencies = [
+ "heapless 0.6.1",
+ "num-traits",
+ "pdqselect",
+ "serde",
+ "smallvec",
+]
+
+[[package]]
+name = "rstar"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b40f1bfe5acdab44bc63e6699c28b74f75ec43afb59f3eda01e145aff86a25fa"
+dependencies = [
+ "heapless 0.7.17",
+ "num-traits",
+ "serde",
+ "smallvec",
+]
+
+[[package]]
+name = "rstar"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f39465655a1e3d8ae79c6d9e007f4953bfc5d55297602df9dc38f9ae9f1359a"
+dependencies = [
+ "heapless 0.7.17",
+ "num-traits",
+ "serde",
+ "smallvec",
+]
+
+[[package]]
+name = "rstar"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6"
+dependencies = [
+ "heapless 0.7.17",
+ "num-traits",
+ "serde",
+ "smallvec",
+]
+
[[package]]
name = "rstar"
version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb"
dependencies = [
- "heapless",
+ "heapless 0.8.0",
"num-traits",
+ "serde",
"smallvec",
]
@@ -4616,9 +4775,9 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
-version = "1.13.1"
+version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c"
+checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282"
dependencies = [
"web-time",
"zeroize",
@@ -4761,7 +4920,6 @@ dependencies = [
name = "sedona"
version = "0.3.0"
dependencies = [
- "abi_stable",
"arrow-array",
"arrow-schema",
"async-trait",
@@ -4939,6 +5097,7 @@ dependencies = [
"geo",
"geo-traits",
"geo-types",
+ "geojson",
"rstest",
"sedona-expr",
"sedona-functions",
@@ -4946,6 +5105,7 @@ dependencies = [
"sedona-geometry",
"sedona-schema",
"sedona-testing",
+ "serde_json",
"wkb",
"wkt 0.14.0",
]
@@ -4964,10 +5124,10 @@ dependencies = [
"log",
"num-traits",
"pretty_env_logger",
- "rand 0.8.5",
+ "rand",
"rand_distr",
"robust",
- "rstar",
+ "rstar 0.12.2",
"sedona-geo-traits-ext",
"sedona-testing",
"wkb",
@@ -5220,7 +5380,7 @@ dependencies = [
"geos",
"once_cell",
"parking_lot",
- "rand 0.8.5",
+ "rand",
"rstest",
"sedona-common",
"sedona-expr",
@@ -5254,7 +5414,7 @@ dependencies = [
"geo-traits",
"geo-types",
"parquet",
- "rand 0.8.5",
+ "rand",
"rstest",
"sedona-common",
"sedona-expr",
@@ -5464,9 +5624,9 @@ dependencies = [
[[package]]
name = "simd-adler32"
-version = "0.3.7"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
[[package]]
name = "simdutf8"
@@ -5520,11 +5680,20 @@ dependencies = [
"smallvec",
]
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
[[package]]
name = "sqlparser"
-version = "0.58.0"
+version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec4b661c54b1e4b603b37873a18c59920e4c51ea8ea2cf527d925424dbd4437c"
+checksum = "4591acadbcf52f0af60eafbb2c003232b2b4cd8de5f0e9437cb8b1b59046cc0f"
dependencies = [
"log",
"recursive",
@@ -5652,9 +5821,9 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c"
+checksum = "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba"
[[package]]
name = "tempfile"
@@ -5856,18 +6025,18 @@ dependencies = [
[[package]]
name = "toml_datetime"
-version = "0.7.3"
+version = "0.7.5+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
+checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
dependencies = [
"serde_core",
]
[[package]]
name = "toml_edit"
-version = "0.23.7"
+version = "0.23.10+spec-1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d"
+checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"
dependencies = [
"indexmap",
"toml_datetime",
@@ -5877,9 +6046,9 @@ dependencies = [
[[package]]
name = "toml_parser"
-version = "1.0.4"
+version = "1.0.6+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
+checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44"
dependencies = [
"winnow",
]
@@ -5901,9 +6070,9 @@ dependencies = [
[[package]]
name = "tower-http"
-version = "0.6.7"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456"
+checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
dependencies = [
"bitflags",
"bytes",
@@ -5931,9 +6100,9 @@ checksum =
"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
[[package]]
name = "tracing"
-version = "0.1.43"
+version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647"
+checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
dependencies = [
"pin-project-lite",
"tracing-attributes",
@@ -5953,9 +6122,9 @@ dependencies = [
[[package]]
name = "tracing-core"
-version = "0.1.35"
+version = "0.1.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c"
+checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
dependencies = [
"once_cell",
]
@@ -6680,9 +6849,9 @@ dependencies = [
[[package]]
name = "zlib-rs"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36134c44663532e6519d7a6dfdbbe06f6f8192bde8ae9ed076e9b213f0e31df7"
+checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235"
[[package]]
name = "zstd"
diff --git a/Cargo.toml b/Cargo.toml
index a84e149c..7a0d999c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -54,46 +54,44 @@ description = "Apache SedonaDB Rust API"
readme = "README.md"
edition = "2021"
-# Same rust-version, arrow, and datafusion dependencies as datafusion-comet
-# https://github.com/apache/datafusion-comet/blob/main/native/Cargo.toml
-rust-version = "1.86"
+rust-version = "1.88.0"
keywords = ["geospatial", "gis", "spatial", "datafusion", "arrow"]
categories = ["science::geo", "database"]
[workspace.dependencies]
approx = "0.5"
-abi_stable = "0.11.3"
adbc_core = ">=0.21.0"
adbc_ffi = ">=0.21.0"
lru = "0.12"
-arrow = { version = "56.0.0", features = ["prettyprint", "ffi", "chrono-tz"] }
-arrow-array = { version = "56.0.0" }
-arrow-cast = { version = "56.0.0" }
-arrow-data = { version = "56.0.0" }
-arrow-json = { version = "56.0.0" }
-arrow-schema = { version = "56.0.0" }
-arrow-buffer = { version = "56.0.0" }
+arrow = { version = "57.0.0", features = ["prettyprint", "ffi", "chrono-tz"] }
+arrow-array = { version = "57.0.0" }
+arrow-cast = { version = "57.0.0" }
+arrow-data = { version = "57.0.0" }
+arrow-json = { version = "57.0.0" }
+arrow-schema = { version = "57.0.0" }
+arrow-buffer = { version = "57.0.0" }
async-trait = { version = "0.1.87" }
bytes = "1.10"
byteorder = "1"
-chrono = { version = "0.4.38", default-features = false }
-comfy-table = { version = "7.1.4" }
+chrono = { version = "0.4.41", default-features = false }
+comfy-table = { version = "7" }
criterion = { version = "0.8", features = ["html_reports"] }
-datafusion = { version = "50.2.0", default-features = false }
-datafusion-catalog = { version = "50.2.0" }
-datafusion-common = { version = "50.2.0", default-features = false }
-datafusion-common-runtime = { version = "50.2.0", default-features = false }
-datafusion-datasource-parquet = { version = "50.2.0" }
-datafusion-execution = { version = "50.2.0", default-features = false }
-datafusion-expr = { version = "50.2.0" }
-datafusion-ffi = { version = "50.2.0" }
-datafusion-physical-expr = { version = "50.2.0" }
-datafusion-physical-plan = { version = "50.2.0" }
+datafusion = { version = "51.0.0", default-features = false }
+datafusion-catalog = { version = "51.0.0" }
+datafusion-common = { version = "51.0.0", default-features = false }
+datafusion-common-runtime = { version = "51.0.0", default-features = false }
+datafusion-datasource-parquet = { version = "51.0.0" }
+datafusion-execution = { version = "51.0.0", default-features = false }
+datafusion-expr = { version = "51.0.0" }
+datafusion-ffi = { version = "51.0.0" }
+datafusion-functions-nested = { version = "51.0.0" }
+datafusion-physical-expr = { version = "51.0.0" }
+datafusion-physical-plan = { version = "51.0.0" }
dirs = "6.0.0"
env_logger = "0.11"
fastrand = "2.0"
-futures = { version = "0.3" }
-object_store = { version = "0.12.0", default-features = false }
+futures = "0.3"
+object_store = { version = "0.12.4", default-features = false }
float_next_after = "1"
num-traits = { version = "0.2", default-features = false, features = ["libm"] }
mimalloc = { version = "0.1", default-features = false }
@@ -113,21 +111,21 @@ wkb = "0.9.2"
wkt = "0.14.0"
parking_lot = "0.12"
-parquet = { version = "56.0.0", default-features = false, features = [
+parquet = { version = "57.0.0", default-features = false, features = [
"arrow",
"async",
"object_store",
] }
-rand = "0.8"
-regex = "1.8"
+rand = "0.9"
+regex = "1.12"
rstest = "0.26.1"
serde = { version = "1" }
serde_json = { version = "1" }
serde_with = { version = "1" }
tempfile = { version = "3"}
thiserror = { version = "2" }
-tokio = { version = "1.44" }
-url = "2.5.4"
+tokio = { version = "1.48", features = ["macros", "rt", "sync"] }
+url = "2.5.7"
# Workspace path dependencies for internal crates
sedona = { version = "0.3.0", path = "rust/sedona" }
diff --git a/c/sedona-libgpuspatial/build.rs b/c/sedona-libgpuspatial/build.rs
index 06eac921..6bf5f3f8 100644
--- a/c/sedona-libgpuspatial/build.rs
+++ b/c/sedona-libgpuspatial/build.rs
@@ -135,14 +135,14 @@ fn main() {
// Detect CUDA library path from CUDA_HOME or default locations
let cuda_lib_path = if let Ok(cuda_home) = env::var("CUDA_HOME") {
- format!("{}/lib64", cuda_home)
+ format!("{cuda_home}/lib64")
} else if std::path::Path::new("/usr/local/cuda/lib64").exists() {
"/usr/local/cuda/lib64".to_string()
} else {
panic!("CUDA lib is not found. Neither CUDA_HOME is set nor the
default path /usr/local/cuda/lib64 exists.");
};
- println!("cargo:rustc-link-search=native={}", cuda_lib_path); // CUDA
runtime
+ println!("cargo:rustc-link-search=native={cuda_lib_path}"); // CUDA
runtime
if let Some(driver_lib_path) = find_cuda_driver_path() {
println!(
diff --git a/c/sedona-s2geography/s2geography b/c/sedona-s2geography/s2geography
index e63647cb..c4d4e5f7 160000
--- a/c/sedona-s2geography/s2geography
+++ b/c/sedona-s2geography/s2geography
@@ -1 +1 @@
-Subproject commit e63647cb4536648b06cc5aa6b97ce1777a5f6163
+Subproject commit c4d4e5f7416dc203d3cb0485d56f5d72e9ccb6dd
diff --git a/python/sedonadb/tests/test_sjoin.py
b/python/sedonadb/tests/test_sjoin.py
index acf2c41f..beb412ce 100644
--- a/python/sedonadb/tests/test_sjoin.py
+++ b/python/sedonadb/tests/test_sjoin.py
@@ -106,7 +106,7 @@ def test_spatial_join_geography(join_type, on):
"vertices_per_linestring_range": [2, 10],
"bounds": west_most_bound,
"size_range": [0.1, 5],
- "seed": 43,
+ "seed": 958,
}
)
df_point = eng_sedonadb.execute_and_collect(
diff --git a/r/sedonadb/src/Makevars.win.in b/r/sedonadb/src/Makevars.win.in
index 6ee99c74..24cb6eb6 100644
--- a/r/sedonadb/src/Makevars.win.in
+++ b/r/sedonadb/src/Makevars.win.in
@@ -27,7 +27,7 @@ RUSTFLAGS =
TARGET_DIR = @TARGET_DIR@
LIBDIR = $(TARGET_DIR)/$(TARGET)/$(subst dev,debug,$(PROFILE))
STATLIB = $(LIBDIR)/libsedonadbr.a
-PKG_LIBS = -L$(LIBDIR) -lsedonadbr -lws2_32 -ladvapi32 -luserenv -lbcrypt
-lntdll @PKG_LIBS@
+PKG_LIBS = -L$(LIBDIR) -lsedonadbr -lws2_32 -ladvapi32 -luserenv -lbcrypt
-lntdll -lole32 @PKG_LIBS@
# Rtools doesn't have the linker in the location that cargo expects, so we need
# to overwrite it via configuration.
diff --git a/r/sedonadb/src/rust/src/dataframe.rs
b/r/sedonadb/src/rust/src/dataframe.rs
index 45a3cf97..e34cee82 100644
--- a/r/sedonadb/src/rust/src/dataframe.rs
+++ b/r/sedonadb/src/rust/src/dataframe.rs
@@ -139,7 +139,10 @@ impl InternalDataFrame {
let schema = self.inner.schema();
let batches =
wait_for_future_captured_r(&self.runtime,
self.inner.clone().collect_partitioned())??;
- let provider = Arc::new(MemTable::try_new(schema.clone().into(),
batches)?);
+ let provider = Arc::new(MemTable::try_new(
+ schema.as_arrow().clone().into(),
+ batches,
+ )?);
let inner = ctx.inner.ctx.read_table(provider)?;
Ok(new_data_frame(inner, self.runtime.clone()))
}
diff --git a/rust/sedona-datasource/src/format.rs
b/rust/sedona-datasource/src/format.rs
index 69a2bc9f..005a6d6a 100644
--- a/rust/sedona-datasource/src/format.rs
+++ b/rust/sedona-datasource/src/format.rs
@@ -25,9 +25,10 @@ use datafusion::{
file_format::{file_compression_type::FileCompressionType, FileFormat,
FileFormatFactory},
listing::PartitionedFile,
physical_plan::{
- FileGroupPartitioner, FileMeta, FileOpenFuture, FileOpener,
FileScanConfig,
- FileSinkConfig, FileSource,
+ FileGroupPartitioner, FileOpenFuture, FileOpener, FileScanConfig,
FileSinkConfig,
+ FileSource,
},
+ table_schema::TableSchema,
},
};
use datafusion_catalog::{memory::DataSourceExec, Session};
@@ -204,7 +205,7 @@ impl FileFormat for ExternalFileFormat {
struct ExternalFileSource {
spec: Arc<dyn ExternalFormatSpec>,
batch_size: Option<usize>,
- file_schema: Option<SchemaRef>,
+ file_schema: Option<TableSchema>,
file_projection: Option<Vec<usize>>,
filters: Vec<Arc<dyn PhysicalExpr>>,
metrics: ExecutionPlanMetricsSet,
@@ -240,7 +241,7 @@ impl FileSource for ExternalFileSource {
range: None,
},
batch_size: self.batch_size,
- file_schema: self.file_schema.clone(),
+ file_schema: self.file_schema.as_ref().map(|s|
s.file_schema().clone()),
file_projection: self.file_projection.clone(),
filters: self.filters.clone(),
};
@@ -285,7 +286,7 @@ impl FileSource for ExternalFileSource {
})
}
- fn with_schema(&self, schema: SchemaRef) -> Arc<dyn FileSource> {
+ fn with_schema(&self, schema: TableSchema) -> Arc<dyn FileSource> {
Arc::new(Self {
file_schema: Some(schema),
..self.clone()
@@ -360,11 +361,11 @@ struct ExternalFileOpener {
}
impl FileOpener for ExternalFileOpener {
- fn open(&self, file_meta: FileMeta, _file: PartitionedFile) ->
Result<FileOpenFuture> {
+ fn open(&self, file: PartitionedFile) -> Result<FileOpenFuture> {
let mut self_clone = self.clone();
Ok(Box::pin(async move {
- self_clone.args.src.meta.replace(file_meta.object_meta);
- self_clone.args.src.range = file_meta.range;
+ self_clone.args.src.meta.replace(file.object_meta);
+ self_clone.args.src.range = file.range;
let reader = self_clone.spec.open_reader(&self_clone.args).await?;
let stream =
futures::stream::iter(reader.into_iter().map(|batch|
batch.map_err(Into::into)));
diff --git a/rust/sedona-functions/Cargo.toml b/rust/sedona-functions/Cargo.toml
index 9fb7f35f..4d0cedbe 100644
--- a/rust/sedona-functions/Cargo.toml
+++ b/rust/sedona-functions/Cargo.toml
@@ -35,7 +35,7 @@ arrow-json = { workspace = true }
criterion = { workspace = true }
rstest = { workspace = true }
sedona-testing = { workspace = true, features = ["criterion"] }
-datafusion = { workspace = true }
+datafusion = { workspace = true, features = ["sql"] }
tokio = { workspace = true, features = ["rt", "macros"] }
[dependencies]
diff --git a/rust/sedona-functions/src/barrier.rs
b/rust/sedona-functions/src/barrier.rs
index 83d7fefd..6cd7e9bd 100644
--- a/rust/sedona-functions/src/barrier.rs
+++ b/rust/sedona-functions/src/barrier.rs
@@ -89,7 +89,7 @@ impl SedonaScalarKernel for Barrier {
// Remaining arguments should be pairs of (string, any_type)
let remaining_args = &args[1..];
- if remaining_args.len() % 2 != 0 {
+ if !remaining_args.len().is_multiple_of(2) {
return exec_err!(
"Arguments after expression must be pairs of (column_name,
column_value)"
);
diff --git a/rust/sedona-functions/src/st_dump.rs
b/rust/sedona-functions/src/st_dump.rs
index 3b404105..aafbc4f6 100644
--- a/rust/sedona-functions/src/st_dump.rs
+++ b/rust/sedona-functions/src/st_dump.rs
@@ -195,7 +195,7 @@ impl STDumpBuilder {
DataType::List(Arc::new(Field::new("item", DataType::UInt32,
true))),
true,
),
- Field::new("geom", DataType::Binary, true),
+ WKB_GEOMETRY.to_storage_field("geom", true).unwrap(),
]);
let struct_array = StructArray::try_new(
fields.clone(),
diff --git a/rust/sedona-geoparquet/src/file_opener.rs
b/rust/sedona-geoparquet/src/file_opener.rs
index d634b92a..e0aa5274 100644
--- a/rust/sedona-geoparquet/src/file_opener.rs
+++ b/rust/sedona-geoparquet/src/file_opener.rs
@@ -19,7 +19,7 @@ use std::{collections::HashMap, sync::Arc};
use arrow_schema::SchemaRef;
use datafusion::datasource::{
listing::PartitionedFile,
- physical_plan::{parquet::ParquetAccessPlan, FileMeta, FileOpenFuture,
FileOpener},
+ physical_plan::{parquet::ParquetAccessPlan, FileOpenFuture, FileOpener},
};
use datafusion_common::Result;
use datafusion_datasource_parquet::metadata::DFParquetMetadata;
@@ -112,12 +112,12 @@ impl GeoParquetFileOpener {
}
impl FileOpener for GeoParquetFileOpener {
- fn open(&self, file_meta: FileMeta, file: PartitionedFile) ->
Result<FileOpenFuture> {
+ fn open(&self, file: PartitionedFile) -> Result<FileOpenFuture> {
let self_clone = self.clone();
Ok(Box::pin(async move {
let parquet_metadata =
- DFParquetMetadata::new(&self_clone.object_store,
&file_meta.object_meta)
+ DFParquetMetadata::new(&self_clone.object_store,
&file.object_meta)
.with_metadata_size_hint(self_clone.metadata_size_hint)
.fetch_metadata()
.await?;
@@ -154,15 +154,9 @@ impl FileOpener for GeoParquetFileOpener {
// We could also consider filtering using null_count here in the
future (i.e.,
// skip row groups that are all null)
+ let file = file.with_extensions(Arc::new(access_plan));
- let file_meta = FileMeta {
- object_meta: file_meta.object_meta,
- range: file_meta.range,
- extensions: Some(Arc::new(access_plan)),
- metadata_size_hint: self_clone.metadata_size_hint,
- };
-
- self_clone.inner.open(file_meta, file)?.await
+ self_clone.inner.open(file)?.await
}))
}
}
diff --git a/rust/sedona-geoparquet/src/format.rs
b/rust/sedona-geoparquet/src/format.rs
index e20adb1c..c31b2d25 100644
--- a/rust/sedona-geoparquet/src/format.rs
+++ b/rust/sedona-geoparquet/src/format.rs
@@ -30,6 +30,7 @@ use datafusion::{
physical_plan::{
FileOpener, FileScanConfig, FileScanConfigBuilder, FileSinkConfig,
FileSource,
},
+ table_schema::TableSchema,
},
};
use datafusion_catalog::{memory::DataSourceExec, Session};
@@ -363,7 +364,7 @@ impl GeoParquetFileSource {
if let Some(parquet_source) =
inner.as_any().downcast_ref::<ParquetSource>() {
let parquet_source = parquet_source.clone();
// Extract the predicate from the existing source if it exists so
we can keep a copy of it
- let new_predicate = match (parquet_source.predicate().cloned(),
predicate) {
+ let new_predicate = match (parquet_source.filter(), predicate) {
(None, None) => None,
(None, Some(specified_predicate)) => Some(specified_predicate),
(Some(inner_predicate), None) => Some(inner_predicate),
@@ -444,7 +445,7 @@ impl FileSource for GeoParquetFileSource {
.create_file_opener(object_store.clone(), base_config,
partition);
// If there are no geo columns or no pruning predicate, just return
the inner opener
- if self.predicate.is_none() ||
!storage_schema_contains_geo(&base_config.file_schema) {
+ if self.predicate.is_none() ||
!storage_schema_contains_geo(base_config.file_schema()) {
return inner_opener;
}
@@ -453,7 +454,7 @@ impl FileSource for GeoParquetFileSource {
object_store,
self.metadata_size_hint,
self.predicate.clone().unwrap(),
- base_config.file_schema.clone(),
+ base_config.file_schema().clone(),
self.inner.table_parquet_options().global.pruning,
// HACK: Since there is no public API to set inner's metrics, so
we use
// inner's metrics as the ExecutionPlan-global metrics
@@ -492,7 +493,7 @@ impl FileSource for GeoParquetFileSource {
))
}
- fn with_schema(&self, schema: SchemaRef) -> Arc<dyn FileSource> {
+ fn with_schema(&self, schema: TableSchema) -> Arc<dyn FileSource> {
Arc::new(Self::from_file_source(
self.inner.with_schema(schema),
self.metadata_size_hint,
@@ -818,7 +819,7 @@ mod test {
GeoParquetFileSource::try_from_file_source(Arc::new(parquet_source), None, None)
.unwrap();
let geo_source_with_predicate = geo_source.with_predicate(predicate);
- assert!(geo_source_with_predicate.inner.predicate().is_some());
+ assert!(geo_source_with_predicate.inner.filter().is_some());
}
#[tokio::test]
diff --git a/rust/sedona-raster-functions/src/rs_srid.rs
b/rust/sedona-raster-functions/src/rs_srid.rs
index b3e3709c..1697fe33 100644
--- a/rust/sedona-raster-functions/src/rs_srid.rs
+++ b/rust/sedona-raster-functions/src/rs_srid.rs
@@ -109,8 +109,7 @@ impl SedonaScalarKernel for RsSrid {
Some(crs_str) => {
let crs = deserialize_crs(crs_str).map_err(|e| {
DataFusionError::Execution(format!(
- "Failed to deserialize CRS: {}",
- e
+ "Failed to deserialize CRS: {e}"
))
})?;
@@ -118,8 +117,7 @@ impl SedonaScalarKernel for RsSrid {
Some(crs_ref) => {
let srid = crs_ref.srid().map_err(|e| {
DataFusionError::Execution(format!(
- "Failed to get SRID from CRS: {}",
- e
+ "Failed to get SRID from CRS: {e}"
))
})?;
@@ -175,7 +173,7 @@ impl SedonaScalarKernel for RsCrs {
None => builder.append_null(),
Some(crs_str) => {
let crs = deserialize_crs(crs_str).map_err(|e| {
- DataFusionError::Execution(format!("Failed to
deserialize CRS: {}", e))
+ DataFusionError::Execution(format!("Failed to
deserialize CRS: {e}"))
})?;
let crs_string = crs
diff --git a/rust/sedona-schema/src/crs.rs b/rust/sedona-schema/src/crs.rs
index 295d1d84..2a77ad60 100644
--- a/rust/sedona-schema/src/crs.rs
+++ b/rust/sedona-schema/src/crs.rs
@@ -221,7 +221,7 @@ impl AuthorityCode {
/// Example: "EPSG:4269"
pub fn crs(auth_code: &str) -> Crs {
let ac = if Self::validate_epsg_code(auth_code) {
- format!("EPSG:{}", auth_code)
+ format!("EPSG:{auth_code}")
} else {
auth_code.to_string()
};
diff --git a/rust/sedona-spatial-join/Cargo.toml
b/rust/sedona-spatial-join/Cargo.toml
index 178b3178..b4c8f630 100644
--- a/rust/sedona-spatial-join/Cargo.toml
+++ b/rust/sedona-spatial-join/Cargo.toml
@@ -68,8 +68,9 @@ fastrand = { workspace = true }
[dev-dependencies]
criterion = { workspace = true }
+datafusion = { workspace = true, features = ["sql"] }
rstest = { workspace = true }
-sedona-testing = { workspace = true }
+sedona-testing = { workspace = true}
wkt = { workspace = true }
tokio = { workspace = true, features = ["macros"] }
rand = { workspace = true }
diff --git a/rust/sedona-spatial-join/bench/partitioning/common.rs
b/rust/sedona-spatial-join/bench/partitioning/common.rs
index 1b0e1c71..dd77f973 100644
--- a/rust/sedona-spatial-join/bench/partitioning/common.rs
+++ b/rust/sedona-spatial-join/bench/partitioning/common.rs
@@ -70,11 +70,11 @@ fn random_bbox(extent: &BoundingBox, rng: &mut StdRng,
max_span: f64) -> Boundin
let (min_x, max_x) = (extent.x().lo(), extent.x().hi());
let (min_y, max_y) = (extent.y().lo(), extent.y().hi());
- let span_x = rng.gen_range(0.01..max_span).min(max_x - min_x);
- let span_y = rng.gen_range(0.01..max_span).min(max_y - min_y);
+ let span_x = rng.random_range(0.01..max_span).min(max_x - min_x);
+ let span_y = rng.random_range(0.01..max_span).min(max_y - min_y);
- let start_x = rng.gen_range(min_x..=max_x - span_x);
- let start_y = rng.gen_range(min_y..=max_y - span_y);
+ let start_x = rng.random_range(min_x..=max_x - span_x);
+ let start_y = rng.random_range(min_y..=max_y - span_y);
BoundingBox::xy((start_x, start_x + span_x), (start_y, start_y + span_y))
}
diff --git a/rust/sedona-spatial-join/bench/partitioning/kdb.rs
b/rust/sedona-spatial-join/bench/partitioning/kdb.rs
index f38e8300..1edc4bb6 100644
--- a/rust/sedona-spatial-join/bench/partitioning/kdb.rs
+++ b/rust/sedona-spatial-join/bench/partitioning/kdb.rs
@@ -106,11 +106,11 @@ fn random_bbox(extent: &BoundingBox, rng: &mut StdRng,
max_span: f64) -> Boundin
let (min_x, max_x) = (extent.x().lo(), extent.x().hi());
let (min_y, max_y) = (extent.y().lo(), extent.y().hi());
- let span_x = rng.gen_range(0.01..max_span).min(max_x - min_x);
- let span_y = rng.gen_range(0.01..max_span).min(max_y - min_y);
+ let span_x = rng.random_range(0.01..max_span).min(max_x - min_x);
+ let span_y = rng.random_range(0.01..max_span).min(max_y - min_y);
- let start_x = rng.gen_range(min_x..=max_x - span_x);
- let start_y = rng.gen_range(min_y..=max_y - span_y);
+ let start_x = rng.random_range(min_x..=max_x - span_x);
+ let start_y = rng.random_range(min_y..=max_y - span_y);
BoundingBox::xy((start_x, start_x + span_x), (start_y, start_y + span_y))
}
diff --git a/rust/sedona-spatial-join/src/exec.rs
b/rust/sedona-spatial-join/src/exec.rs
index 1644f069..804a5d88 100644
--- a/rust/sedona-spatial-join/src/exec.rs
+++ b/rust/sedona-spatial-join/src/exec.rs
@@ -652,7 +652,7 @@ mod tests {
let bounds = Rect::new(Coord { x: 0.0, y: 0.0 }, Coord { x: 100.0, y:
100.0 });
let left_data = RandomPartitionedDataBuilder::new()
- .seed(1)
+ .seed(11584)
.num_partitions(2)
.batches_per_partition(2)
.rows_per_batch(30)
@@ -664,7 +664,7 @@ mod tests {
.build()?;
let right_data = RandomPartitionedDataBuilder::new()
- .seed(2)
+ .seed(54843)
.num_partitions(4)
.batches_per_partition(4)
.rows_per_batch(30)
diff --git a/rust/sedona-spatial-join/src/utils/bbox_sampler.rs
b/rust/sedona-spatial-join/src/utils/bbox_sampler.rs
index d823b506..498f3863 100644
--- a/rust/sedona-spatial-join/src/utils/bbox_sampler.rs
+++ b/rust/sedona-spatial-join/src/utils/bbox_sampler.rs
@@ -303,8 +303,8 @@ mod tests {
// Stage 1
for _ in 0..100 {
let bbox = BoundingBox::xy(
- (rng.gen::<f64>(), rng.gen::<f64>()),
- (rng.gen::<f64>(), rng.gen::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
);
sampler.add_bbox(&bbox);
count += 1;
@@ -314,8 +314,8 @@ mod tests {
// Stage 2
for _ in 0..9900 {
let bbox = BoundingBox::xy(
- (rng.gen::<f64>(), rng.gen::<f64>()),
- (rng.gen::<f64>(), rng.gen::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
);
sampler.add_bbox(&bbox);
count += 1;
@@ -325,8 +325,8 @@ mod tests {
// Stage 3
for _ in 0..5000 {
let bbox = BoundingBox::xy(
- (rng.gen::<f64>(), rng.gen::<f64>()),
- (rng.gen::<f64>(), rng.gen::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
);
sampler.add_bbox(&bbox);
count += 1;
@@ -336,8 +336,8 @@ mod tests {
for _ in 0..5000 {
let bbox = BoundingBox::xy(
- (rng.gen::<f64>(), rng.gen::<f64>()),
- (rng.gen::<f64>(), rng.gen::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
);
sampler.add_bbox(&bbox);
count += 1;
@@ -347,8 +347,8 @@ mod tests {
// Stage 4
for _ in 0..20000 {
let bbox = BoundingBox::xy(
- (-rng.gen::<f64>(), -rng.gen::<f64>()),
- (rng.gen::<f64>(), rng.gen::<f64>()),
+ (-rng.random::<f64>(), -rng.random::<f64>()),
+ (rng.random::<f64>(), rng.random::<f64>()),
);
sampler.add_bbox(&bbox);
count += 1;
@@ -374,8 +374,8 @@ mod tests {
// Add 10000 points uniformly distributed
for _ in 0..10000 {
- let x = rng.gen::<f64>() * 100.0;
- let y = rng.gen::<f64>() * 100.0;
+ let x = rng.random::<f64>() * 100.0;
+ let y = rng.random::<f64>() * 100.0;
let bbox = BoundingBox::xy((x, x), (y, y));
sampler.add_bbox(&bbox);
}
@@ -444,8 +444,8 @@ mod tests {
for _ in 0..50000 {
let bbox = BoundingBox::xy(
- (rng.gen::<f64>() * 100.0, rng.gen::<f64>() * 100.0),
- (rng.gen::<f64>() * 100.0, rng.gen::<f64>() * 100.0),
+ (rng.random::<f64>() * 100.0, rng.random::<f64>() * 100.0),
+ (rng.random::<f64>() * 100.0, rng.random::<f64>() * 100.0),
);
sampler.add_bbox(&bbox);
}
diff --git a/rust/sedona-testing/src/benchmark_util.rs
b/rust/sedona-testing/src/benchmark_util.rs
index ba86db9c..78504b83 100644
--- a/rust/sedona-testing/src/benchmark_util.rs
+++ b/rust/sedona-testing/src/benchmark_util.rs
@@ -19,10 +19,10 @@ use std::{fmt::Debug, sync::Arc, vec};
use arrow_array::{ArrayRef, Float64Array, Int64Array};
use arrow_schema::DataType;
-use datafusion_common::{Result, ScalarValue};
+use datafusion_common::{DataFusionError, Result, ScalarValue};
use datafusion_expr::{AggregateUDF, ScalarUDF};
use geo_types::Rect;
-use rand::{distributions::Uniform, rngs::StdRng, Rng, SeedableRng};
+use rand::{distr::Uniform, rngs::StdRng, Rng, SeedableRng};
use sedona_common::sedona_internal_err;
use sedona_geometry::types::GeometryTypeId;
@@ -402,7 +402,8 @@ impl BenchmarkArgSpec {
),
BenchmarkArgSpec::Int64(lo, hi) => {
let mut rng = self.rng(i);
- let dist = Uniform::new(lo, hi);
+ let dist =
+ Uniform::new(lo, hi).map_err(|e|
DataFusionError::External(Box::new(e)))?;
(0..num_batches)
.map(|_| -> Result<ArrayRef> {
let int64_array: Int64Array =
@@ -413,7 +414,8 @@ impl BenchmarkArgSpec {
}
BenchmarkArgSpec::Float64(lo, hi) => {
let mut rng = self.rng(i);
- let dist = Uniform::new(lo, hi);
+ let dist =
+ Uniform::new(lo, hi).map_err(|e|
DataFusionError::External(Box::new(e)))?;
(0..num_batches)
.map(|_| -> Result<ArrayRef> {
let float64_array: Float64Array =
@@ -424,7 +426,8 @@ impl BenchmarkArgSpec {
}
BenchmarkArgSpec::Int32(lo, hi) => {
let mut rng = self.rng(i);
- let dist = Uniform::new(lo, hi);
+ let dist =
+ Uniform::new(lo, hi).map_err(|e|
DataFusionError::External(Box::new(e)))?;
(0..num_batches)
.map(|_| -> Result<ArrayRef> {
let int32_array: arrow_array::Int32Array =
diff --git a/rust/sedona-testing/src/datagen.rs
b/rust/sedona-testing/src/datagen.rs
index 44818603..088bf220 100644
--- a/rust/sedona-testing/src/datagen.rs
+++ b/rust/sedona-testing/src/datagen.rs
@@ -27,14 +27,12 @@ use arrow_array::{ArrayRef, RecordBatch, RecordBatchReader};
use arrow_array::{BinaryArray, BinaryViewArray};
use arrow_array::{Float64Array, Int32Array};
use arrow_schema::{ArrowError, DataType, Field, Schema, SchemaRef};
-use datafusion_common::Result;
+use datafusion_common::{DataFusionError, Result};
use geo_types::{
Coord, Geometry, GeometryCollection, LineString, MultiLineString,
MultiPoint, MultiPolygon,
Point, Polygon, Rect,
};
-use rand::distributions::Uniform;
-use rand::rngs::StdRng;
-use rand::{Rng, SeedableRng};
+use rand::{distr::Uniform, rngs::StdRng, Rng, SeedableRng};
use sedona_common::sedona_internal_err;
use sedona_geometry::types::GeometryTypeId;
use sedona_schema::datatypes::{SedonaType, WKB_GEOMETRY};
@@ -389,21 +387,23 @@ impl RandomPartitionedDataBuilder {
.collect();
// Generate random distances between 0.0 and 100.0
- let distance_dist = Uniform::new(0.0, 100.0);
+ let distance_dist = Uniform::new(0.0, 100.0).expect("valid input to
Uniform::new()");
let distances: Vec<f64> = (0..self.rows_per_batch)
.map(|_| rng.sample(distance_dist))
.collect();
// Generate random geometries based on the geometry type
- let wkb_geometries: Vec<Option<Vec<u8>>> = (0..self.rows_per_batch)
- .map(|_| {
- if rng.sample(Uniform::new(0.0, 1.0)) < self.null_rate {
- None
+ let wkb_geometries = (0..self.rows_per_batch)
+ .map(|_| -> Result<Option<Vec<u8>>> {
+ if rng.sample(Uniform::new(0.0, 1.0).expect("valid input to
Uniform::new()"))
+ < self.null_rate
+ {
+ Ok(None)
} else {
- Some(generate_random_wkb(rng, &self.options))
+ Ok(Some(generate_random_wkb(rng, &self.options)?))
}
})
- .collect();
+ .collect::<Result<Vec<Option<Vec<u8>>>>>()?;
// Create Arrow arrays
let id_array = Arc::new(Int32Array::from(ids));
@@ -499,8 +499,11 @@ impl Default for RandomGeometryOptions {
}
/// Generate random geometry WKB bytes based on the geometry type
-fn generate_random_wkb<R: rand::Rng>(rng: &mut R, options:
&RandomGeometryOptions) -> Vec<u8> {
- let geometry = generate_random_geometry(rng, options);
+fn generate_random_wkb<R: rand::Rng>(
+ rng: &mut R,
+ options: &RandomGeometryOptions,
+) -> Result<Vec<u8>> {
+ let geometry = generate_random_geometry(rng, options)?;
// Convert geometry to WKB
let mut out: Vec<u8> = vec![];
@@ -511,167 +514,178 @@ fn generate_random_wkb<R: rand::Rng>(rng: &mut R,
options: &RandomGeometryOption
endianness: Endianness::LittleEndian,
},
)
- .unwrap();
- out
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
+ Ok(out)
}
fn generate_random_geometry<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> Geometry {
- match options.geom_type {
- GeometryTypeId::Point => Geometry::Point(generate_random_point(rng,
options)),
+) -> Result<Geometry> {
+ Ok(match options.geom_type {
+ GeometryTypeId::Point => Geometry::Point(generate_random_point(rng,
options)?),
GeometryTypeId::LineString => {
- Geometry::LineString(generate_random_linestring(rng, options))
+ Geometry::LineString(generate_random_linestring(rng, options)?)
}
- GeometryTypeId::Polygon =>
Geometry::Polygon(generate_random_polygon(rng, options)),
+ GeometryTypeId::Polygon =>
Geometry::Polygon(generate_random_polygon(rng, options)?),
GeometryTypeId::MultiPoint => {
- Geometry::MultiPoint(generate_random_multipoint(rng, options))
+ Geometry::MultiPoint(generate_random_multipoint(rng, options)?)
}
GeometryTypeId::MultiLineString => {
- Geometry::MultiLineString(generate_random_multilinestring(rng,
options))
+ Geometry::MultiLineString(generate_random_multilinestring(rng,
options)?)
}
GeometryTypeId::MultiPolygon => {
- Geometry::MultiPolygon(generate_random_multipolygon(rng, options))
+ Geometry::MultiPolygon(generate_random_multipolygon(rng, options)?)
}
GeometryTypeId::GeometryCollection => {
-
Geometry::GeometryCollection(generate_random_geometrycollection(rng, options))
+
Geometry::GeometryCollection(generate_random_geometrycollection(rng, options)?)
}
GeometryTypeId::Geometry => {
let mut copy_options = options.clone();
copy_options.geom_type = pick_random_geometry_type(rng);
- generate_random_geometry(rng, ©_options)
+ generate_random_geometry(rng, ©_options)?
}
- }
+ })
}
-fn generate_random_point<R: rand::Rng>(rng: &mut R, options:
&RandomGeometryOptions) -> Point {
- if rng.gen_bool(options.empty_rate) {
+fn generate_random_point<R: rand::Rng>(
+ rng: &mut R,
+ options: &RandomGeometryOptions,
+) -> Result<Point> {
+ if rng.random_bool(options.empty_rate) {
// This is a bit of a hack because geo-types doesn't support empty
point; however,
// this does work with respect to sending this directly to the WKB
reader and getting
// the WKB result we want
- Point::new(f64::NAN, f64::NAN)
+ Ok(Point::new(f64::NAN, f64::NAN))
} else {
// Generate random points within the specified bounds
- let x_dist = Uniform::new(options.bounds.min().x,
options.bounds.max().x);
- let y_dist = Uniform::new(options.bounds.min().y,
options.bounds.max().y);
+ let x_dist = Uniform::new(options.bounds.min().x,
options.bounds.max().x)
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
+ let y_dist = Uniform::new(options.bounds.min().y,
options.bounds.max().y)
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
let x = rng.sample(x_dist);
let y = rng.sample(y_dist);
- Point::new(x, y)
+ Ok(Point::new(x, y))
}
}
fn generate_random_linestring<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> LineString {
- if rng.gen_bool(options.empty_rate) {
- LineString::new(vec![])
+) -> Result<LineString> {
+ if rng.random_bool(options.empty_rate) {
+ Ok(LineString::new(vec![]))
} else {
- let (center_x, center_y, half_size) = generate_random_circle(rng,
options);
+ let (center_x, center_y, half_size) = generate_random_circle(rng,
options)?;
let vertices_dist = Uniform::new_inclusive(
options.vertices_per_linestring_range.0,
options.vertices_per_linestring_range.1,
- );
+ )
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
// Always sample in such a way that we end up with a valid linestring
let num_vertices = rng.sample(vertices_dist).max(2);
let coords =
- generate_circular_vertices(rng, center_x, center_y, half_size,
num_vertices, false);
- LineString::from(coords)
+ generate_circular_vertices(rng, center_x, center_y, half_size,
num_vertices, false)?;
+ Ok(LineString::from(coords))
}
}
-fn generate_random_polygon<R: rand::Rng>(rng: &mut R, options:
&RandomGeometryOptions) -> Polygon {
- if rng.gen_bool(options.empty_rate) {
- Polygon::new(LineString::new(vec![]), vec![])
+fn generate_random_polygon<R: rand::Rng>(
+ rng: &mut R,
+ options: &RandomGeometryOptions,
+) -> Result<Polygon> {
+ if rng.random_bool(options.empty_rate) {
+ Ok(Polygon::new(LineString::new(vec![]), vec![]))
} else {
- let (center_x, center_y, half_size) = generate_random_circle(rng,
options);
+ let (center_x, center_y, half_size) = generate_random_circle(rng,
options)?;
let vertices_dist = Uniform::new_inclusive(
options.vertices_per_linestring_range.0,
options.vertices_per_linestring_range.1,
- );
+ )
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
// Always sample in such a way that we end up with a valid Polygon
let num_vertices = rng.sample(vertices_dist).max(3);
let coords =
- generate_circular_vertices(rng, center_x, center_y, half_size,
num_vertices, true);
+ generate_circular_vertices(rng, center_x, center_y, half_size,
num_vertices, true)?;
let shell = LineString::from(coords);
let mut holes = Vec::new();
// Potentially add a hole based on probability
- let add_hole = rng.gen_bool(options.polygon_hole_rate);
- let hole_scale_factor_dist = Uniform::new(0.1, 0.5);
+ let add_hole = rng.random_bool(options.polygon_hole_rate);
+ let hole_scale_factor_dist = Uniform::new(0.1, 0.5).expect("Valid
input range");
let hole_scale_factor = rng.sample(hole_scale_factor_dist);
if add_hole {
let new_size = half_size * hole_scale_factor;
let mut coords =
- generate_circular_vertices(rng, center_x, center_y, new_size,
num_vertices, true);
+ generate_circular_vertices(rng, center_x, center_y, new_size,
num_vertices, true)?;
coords.reverse();
holes.push(LineString::from(coords));
}
- Polygon::new(shell, holes)
+ Ok(Polygon::new(shell, holes))
}
}
fn generate_random_multipoint<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> MultiPoint {
- if rng.gen_bool(options.empty_rate) {
- MultiPoint::new(vec![])
+) -> Result<MultiPoint> {
+ if rng.random_bool(options.empty_rate) {
+ Ok(MultiPoint::new(vec![]))
} else {
- let children = generate_random_children(rng, options,
generate_random_point);
- MultiPoint::new(children)
+ let children = generate_random_children(rng, options,
generate_random_point)?;
+ Ok(MultiPoint::new(children))
}
}
fn generate_random_multilinestring<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> MultiLineString {
- if rng.gen_bool(options.empty_rate) {
- MultiLineString::new(vec![])
+) -> Result<MultiLineString> {
+ if rng.random_bool(options.empty_rate) {
+ Ok(MultiLineString::new(vec![]))
} else {
- let children = generate_random_children(rng, options,
generate_random_linestring);
- MultiLineString::new(children)
+ let children = generate_random_children(rng, options,
generate_random_linestring)?;
+ Ok(MultiLineString::new(children))
}
}
fn generate_random_multipolygon<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> MultiPolygon {
- if rng.gen_bool(options.empty_rate) {
- MultiPolygon::new(vec![])
+) -> Result<MultiPolygon> {
+ if rng.random_bool(options.empty_rate) {
+ Ok(MultiPolygon::new(vec![]))
} else {
- let children = generate_random_children(rng, options,
generate_random_polygon);
- MultiPolygon::new(children)
+ let children = generate_random_children(rng, options,
generate_random_polygon)?;
+ Ok(MultiPolygon::new(children))
}
}
fn generate_random_geometrycollection<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> GeometryCollection {
- if rng.gen_bool(options.empty_rate) {
- GeometryCollection::new_from(vec![])
+) -> Result<GeometryCollection> {
+ if rng.random_bool(options.empty_rate) {
+ Ok(GeometryCollection::new_from(vec![]))
} else {
- let children = generate_random_children(rng, options,
generate_random_geometry);
- GeometryCollection::new_from(children)
+ let children = generate_random_children(rng, options,
generate_random_geometry)?;
+ Ok(GeometryCollection::new_from(children))
}
}
-fn generate_random_children<R: Rng, T, F: Fn(&mut R, &RandomGeometryOptions)
-> T>(
+fn generate_random_children<R: Rng, T, F: Fn(&mut R, &RandomGeometryOptions)
-> Result<T>>(
rng: &mut R,
options: &RandomGeometryOptions,
func: F,
-) -> Vec<T> {
+) -> Result<Vec<T>> {
let num_parts_dist =
- Uniform::new_inclusive(options.num_parts_range.0,
options.num_parts_range.1);
+ Uniform::new_inclusive(options.num_parts_range.0,
options.num_parts_range.1)
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
let num_parts = rng.sample(num_parts_dist);
// Constrain this feature to the size range indicated in the option
- let (center_x, center_y, half_width) = generate_random_circle(rng,
options);
+ let (center_x, center_y, half_width) = generate_random_circle(rng,
options)?;
let feature_bounds = Rect::new(
Coord {
x: center_x - half_width,
@@ -698,10 +712,10 @@ fn generate_random_children<R: Rng, T, F: Fn(&mut R,
&RandomGeometryOptions) ->
if options.geom_type == GeometryTypeId::GeometryCollection {
child_options.geom_type = pick_random_geometry_type(rng);
}
- children.push(func(rng, &child_options));
+ children.push(func(rng, &child_options)?);
}
- children
+ Ok(children)
}
fn pick_random_geometry_type<R: Rng>(rng: &mut R) -> GeometryTypeId {
@@ -712,30 +726,33 @@ fn pick_random_geometry_type<R: Rng>(rng: &mut R) ->
GeometryTypeId {
GeometryTypeId::MultiPoint,
GeometryTypeId::MultiLineString,
GeometryTypeId::MultiPolygon,
- ][rng.gen_range(0..6)]
+ ][rng.random_range(0..6)]
}
fn generate_random_circle<R: rand::Rng>(
rng: &mut R,
options: &RandomGeometryOptions,
-) -> (f64, f64, f64) {
+) -> Result<(f64, f64, f64)> {
// Generate random diamond polygons (rotated squares)
- let size_dist = Uniform::new(options.size_range.0, options.size_range.1);
+ let size_dist = Uniform::new(options.size_range.0, options.size_range.1)
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
let half_size = rng.sample(size_dist) / 2.0;
// Ensure diamond fits within bounds by constraining center position
let center_x_dist = Uniform::new(
options.bounds.min().x + half_size,
options.bounds.max().x - half_size,
- );
+ )
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
let center_y_dist = Uniform::new(
options.bounds.min().y + half_size,
options.bounds.max().y - half_size,
- );
+ )
+ .map_err(|e| DataFusionError::External(Box::new(e)))?;
let center_x = rng.sample(center_x_dist);
let center_y = rng.sample(center_y_dist);
- (center_x, center_y, half_size)
+ Ok((center_x, center_y, half_size))
}
fn generate_non_overlapping_sub_rectangles(num_parts: usize, bounds: &Rect) ->
Vec<Rect> {
@@ -774,11 +791,12 @@ fn generate_circular_vertices<R: rand::Rng>(
radius: f64,
num_vertices: usize,
closed: bool,
-) -> Vec<Coord> {
+) -> Result<Vec<Coord>> {
let mut out = Vec::new();
// Randomize starting angle (0 to 2 * PI)
- let start_angle_dist = Uniform::new(0.0, 2.0 * PI);
+ let start_angle_dist =
+ Uniform::new(0.0, 2.0 * PI).map_err(|e|
DataFusionError::External(Box::new(e)))?;
let mut angle: f64 = rng.sample(start_angle_dist);
let dangle = 2.0 * PI / (num_vertices as f64).max(3.0);
@@ -794,7 +812,7 @@ fn generate_circular_vertices<R: rand::Rng>(
out.push(out[0]);
}
- out
+ Ok(out)
}
#[cfg(test)]
@@ -831,7 +849,7 @@ mod tests {
};
for _ in 0..iterations {
- let wkb_bytes = generate_random_wkb(&mut rng, &options);
+ let wkb_bytes = generate_random_wkb(&mut rng,
&options).unwrap();
// Verify WKB is not empty and has reasonable size
assert!(!wkb_bytes.is_empty());
@@ -874,8 +892,8 @@ mod tests {
size_range,
..Default::default()
};
- let wkb1 = generate_random_wkb(&mut rng1, &options);
- let wkb2 = generate_random_wkb(&mut rng2, &options);
+ let wkb1 = generate_random_wkb(&mut rng1, &options).unwrap();
+ let wkb2 = generate_random_wkb(&mut rng2, &options).unwrap();
// Should generate identical results
assert_eq!(wkb1, wkb2);
@@ -1085,13 +1103,13 @@ mod tests {
let mut options = RandomGeometryOptions::new();
options.vertices_per_linestring_range = (3, 3);
for _ in 0..100 {
- let geom = generate_random_linestring(&mut rng, &options);
+ let geom = generate_random_linestring(&mut rng, &options).unwrap();
assert_eq!(geom.coords().count(), 3);
}
options.vertices_per_linestring_range = (50, 50);
for _ in 0..100 {
- let geom = generate_random_linestring(&mut rng, &options);
+ let geom = generate_random_linestring(&mut rng, &options).unwrap();
assert_eq!(geom.coords().count(), 50);
}
}
@@ -1103,13 +1121,13 @@ mod tests {
options.polygon_hole_rate = 0.0;
for _ in 0..100 {
- let geom = generate_random_polygon(&mut rng, &options);
+ let geom = generate_random_polygon(&mut rng, &options).unwrap();
assert_eq!(geom.interiors().len(), 0);
}
options.polygon_hole_rate = 1.0;
for _ in 0..100 {
- let geom = generate_random_polygon(&mut rng, &options);
+ let geom = generate_random_polygon(&mut rng, &options).unwrap();
assert!(!geom.interiors().is_empty());
}
}
@@ -1121,13 +1139,13 @@ mod tests {
options.num_parts_range = (3, 3);
for _ in 0..100 {
- let geom = generate_random_multipoint(&mut rng, &options);
+ let geom = generate_random_multipoint(&mut rng, &options).unwrap();
assert_eq!(geom.len(), 3);
}
options.num_parts_range = (10, 10);
for _ in 0..100 {
- let geom = generate_random_multipoint(&mut rng, &options);
+ let geom = generate_random_multipoint(&mut rng, &options).unwrap();
assert_eq!(geom.len(), 10);
}
}
@@ -1139,13 +1157,13 @@ mod tests {
options.num_parts_range = (3, 3);
for _ in 0..100 {
- let geom = generate_random_multilinestring(&mut rng, &options);
+ let geom = generate_random_multilinestring(&mut rng,
&options).unwrap();
assert_eq!(geom.num_line_strings(), 3);
}
options.num_parts_range = (10, 10);
for _ in 0..100 {
- let geom = generate_random_multilinestring(&mut rng, &options);
+ let geom = generate_random_multilinestring(&mut rng,
&options).unwrap();
assert_eq!(geom.num_line_strings(), 10);
}
}
@@ -1157,13 +1175,13 @@ mod tests {
options.num_parts_range = (3, 3);
for _ in 0..100 {
- let geom = generate_random_multipolygon(&mut rng, &options);
+ let geom = generate_random_multipolygon(&mut rng,
&options).unwrap();
assert_eq!(geom.num_polygons(), 3);
}
options.num_parts_range = (10, 10);
for _ in 0..100 {
- let geom = generate_random_multipolygon(&mut rng, &options);
+ let geom = generate_random_multipolygon(&mut rng,
&options).unwrap();
assert_eq!(geom.num_polygons(), 10);
}
}
@@ -1175,13 +1193,13 @@ mod tests {
options.num_parts_range = (3, 3);
for _ in 0..100 {
- let geom = generate_random_geometrycollection(&mut rng, &options);
+ let geom = generate_random_geometrycollection(&mut rng,
&options).unwrap();
assert_eq!(geom.len(), 3);
}
options.num_parts_range = (10, 10);
for _ in 0..100 {
- let geom = generate_random_geometrycollection(&mut rng, &options);
+ let geom = generate_random_geometrycollection(&mut rng,
&options).unwrap();
assert_eq!(geom.len(), 10);
}
}
@@ -1205,7 +1223,7 @@ mod tests {
options.empty_rate = 0.0;
for _ in 0..100 {
- let geom = generate_random_wkb(&mut rng, &options);
+ let geom = generate_random_wkb(&mut rng, &options).unwrap();
let wkb = wkb::reader::read_wkb(&geom).unwrap();
let analysis = analyze_geometry(&wkb).unwrap();
assert_eq!(analysis.geometry_type.geometry_type(), geom_type);
@@ -1231,7 +1249,7 @@ mod tests {
options.empty_rate = 0.0;
for _ in 0..100 {
- let geom = generate_random_wkb(&mut rng, &options);
+ let geom = generate_random_wkb(&mut rng, &options).unwrap();
let bounds = wkb_bounds_xy(&geom).unwrap();
assert!(!bounds.x().is_empty());
assert!(!bounds.y().is_empty());
@@ -1246,7 +1264,7 @@ mod tests {
options.empty_rate = 1.0;
for _ in 0..100 {
- let geom = generate_random_wkb(&mut rng, &options);
+ let geom = generate_random_wkb(&mut rng, &options).unwrap();
let bounds = wkb_bounds_xy(&geom).unwrap();
assert!(bounds.x().is_empty());
assert!(bounds.y().is_empty());
diff --git a/rust/sedona-testing/src/testers.rs
b/rust/sedona-testing/src/testers.rs
index 89cdd27f..cb56bbb3 100644
--- a/rust/sedona-testing/src/testers.rs
+++ b/rust/sedona-testing/src/testers.rs
@@ -119,6 +119,7 @@ impl AggregateUdfTester {
name: "",
is_distinct: false,
exprs: &exprs,
+ expr_fields: &[],
};
self.udf.accumulator(accumulator_args)
diff --git a/rust/sedona/Cargo.toml b/rust/sedona/Cargo.toml
index 9e031a93..aab77f2e 100644
--- a/rust/sedona/Cargo.toml
+++ b/rust/sedona/Cargo.toml
@@ -48,14 +48,13 @@ tokio = { workspace = true, features = ["rt-multi-thread"] }
rstest = { workspace = true }
[dependencies]
-abi_stable = { workspace = true }
arrow-schema = { workspace = true }
arrow-array = { workspace = true }
async-trait = { workspace = true }
aws-config = { version = "1.5.17", optional = true }
aws-credential-types = { version = "1.2.0", optional = true }
comfy-table = { workspace = true }
-datafusion = { workspace = true, default_features = false, features =
["parquet"] }
+datafusion = { workspace = true, default_features = false, features = ["sql",
"parquet"] }
datafusion-common = { workspace = true }
datafusion-expr = { workspace = true }
datafusion-ffi = { workspace = true }
diff --git a/rust/sedona/src/context.rs b/rust/sedona/src/context.rs
index 82947460..998881df 100644
--- a/rust/sedona/src/context.rs
+++ b/rust/sedona/src/context.rs
@@ -31,7 +31,7 @@ use async_trait::async_trait;
use datafusion::dataframe::DataFrameWriteOptions;
use datafusion::datasource::file_format::format_as_file_type;
use datafusion::{
- common::{plan_datafusion_err, plan_err},
+ common::plan_err,
error::{DataFusionError, Result},
execution::{context::DataFilePaths, runtime_env::RuntimeEnvBuilder,
SessionStateBuilder},
prelude::{DataFrame, SessionConfig, SessionContext},
@@ -222,8 +222,8 @@ impl SedonaContext {
/// statements
pub async fn multi_sql(&self, sql: &str) -> Result<Vec<DataFrame>> {
let task_ctx = self.ctx.task_ctx();
- let dialect_str =
&task_ctx.session_config().options().sql_parser.dialect;
- let dialect = ThreadSafeDialect::try_new(dialect_str)?;
+ let dialect = &task_ctx.session_config().options().sql_parser.dialect;
+ let dialect = ThreadSafeDialect::try_new(dialect)?;
let statements = dialect.parse(sql)?;
let mut results = Vec::with_capacity(statements.len());
@@ -509,12 +509,14 @@ struct ThreadSafeDialect {
unsafe impl Send for ThreadSafeDialect {}
impl ThreadSafeDialect {
- pub fn try_new(dialect_str: &str) -> Result<Self> {
- let dialect = dialect_from_str(dialect_str)
- .ok_or_else(|| plan_datafusion_err!("Unsupported SQL dialect:
{dialect_str}"))?;
- Ok(Self {
- inner: dialect.into(),
- })
+ pub fn try_new(dialect: &datafusion::config::Dialect) -> Result<Self> {
+ if let Some(box_dialect) = dialect_from_str(dialect) {
+ Ok(Self {
+ inner: box_dialect.into(),
+ })
+ } else {
+ plan_err!("Unsupported SQL dialect: {dialect}")
+ }
}
pub fn parse(&self, sql: &str) -> Result<VecDeque<Statement>> {
diff --git a/rust/sedona/src/random_geometry_provider.rs
b/rust/sedona/src/random_geometry_provider.rs
index 00b67dc9..82d1edba 100644
--- a/rust/sedona/src/random_geometry_provider.rs
+++ b/rust/sedona/src/random_geometry_provider.rs
@@ -314,7 +314,7 @@ fn builder_with_partition_sizes(
target_rows: usize,
) -> RandomPartitionedDataBuilder {
let rows_for_one_batch_per_partition = batch_size * partitions;
- let batches_per_partition = if target_rows %
rows_for_one_batch_per_partition == 0 {
+ let batches_per_partition = if
target_rows.is_multiple_of(rows_for_one_batch_per_partition) {
target_rows / rows_for_one_batch_per_partition
} else {
target_rows / rows_for_one_batch_per_partition + 1
diff --git a/sedona-cli/src/exec.rs b/sedona-cli/src/exec.rs
index f280516e..246baf2f 100644
--- a/sedona-cli/src/exec.rs
+++ b/sedona-cli/src/exec.rs
@@ -125,7 +125,7 @@ pub async fn exec_from_repl(
) -> rustyline::Result<()> {
let mut rl = Editor::new()?;
rl.set_helper(Some(CliHelper::new(
- &ctx.ctx
+ ctx.ctx
.task_ctx()
.session_config()
.options()
diff --git a/sedona-cli/src/helper.rs b/sedona-cli/src/helper.rs
index 4c19f7d5..f3b69ded 100644
--- a/sedona-cli/src/helper.rs
+++ b/sedona-cli/src/helper.rs
@@ -22,6 +22,7 @@ use std::borrow::Cow;
use crate::highlighter::{NoSyntaxHighlighter, SyntaxHighlighter};
+use datafusion::config::Dialect;
use datafusion::sql::parser::{DFParser, Statement};
use datafusion::sql::sqlparser::dialect::dialect_from_str;
@@ -34,33 +35,33 @@ use rustyline::{Context, Helper, Result};
pub struct CliHelper {
completer: FilenameCompleter,
- dialect: String,
+ dialect: datafusion::config::Dialect,
highlighter: Box<dyn Highlighter>,
}
impl CliHelper {
- pub fn new(dialect: &str, color: bool) -> Self {
+ pub fn new(dialect: Dialect, color: bool) -> Self {
let highlighter: Box<dyn Highlighter> = if !color {
Box::new(NoSyntaxHighlighter {})
} else {
- Box::new(SyntaxHighlighter::new(dialect))
+ Box::new(SyntaxHighlighter::new(dialect.as_ref()))
};
Self {
completer: FilenameCompleter::new(),
- dialect: dialect.into(),
+ dialect,
highlighter,
}
}
- pub fn set_dialect(&mut self, dialect: &str) {
- if dialect != self.dialect {
- self.dialect = dialect.to_string();
+ pub fn set_dialect(&mut self, dialect: &datafusion::config::Dialect) {
+ if dialect != &self.dialect {
+ self.dialect = *dialect;
}
}
fn validate_input(&self, input: &str) -> Result<ValidationResult> {
if let Some(sql) = input.strip_suffix(';') {
- let dialect = match dialect_from_str(&self.dialect) {
+ let dialect = match dialect_from_str(self.dialect) {
Some(dialect) => dialect,
None => {
return Ok(ValidationResult::Invalid(Some(format!(
@@ -97,7 +98,7 @@ impl CliHelper {
impl Default for CliHelper {
fn default() -> Self {
- Self::new("generic", false)
+ Self::new(Dialect::Generic, false)
}
}
@@ -286,7 +287,7 @@ mod tests {
);
// valid in postgresql dialect
- validator.set_dialect("postgresql");
+ validator.set_dialect(&Dialect::PostgreSQL);
let result = readline_direct(Cursor::new(r"select 1 # 2;".as_bytes()),
&validator)?;
assert!(matches!(result, ValidationResult::Valid(None)));