From fa16fd8945638e48d2dbfce1e1927c3c104d23ee Mon Sep 17 00:00:00 2001 From: Costi Ciudatu Date: Wed, 23 Jul 2025 15:56:03 +0300 Subject: [PATCH 1/3] [HSTACK] Build infrastructure --- ARTIFACTORY.md | 16 ++ Cargo.lock | 388 +++++++++++++++------------------- Cargo.toml | 36 +++- Dockerfile | 4 + Dockerfile-build-wheel.arm64 | 54 +++++ Dockerfile-build-wheel.x86_64 | 54 +++++ build-linux-arm64.sh | 1 + build-linux-x86_64.sh | 1 + build-linux.sh | 55 +++++ pyproject.toml | 3 +- 10 files changed, 389 insertions(+), 223 deletions(-) create mode 100644 ARTIFACTORY.md create mode 100644 Dockerfile create mode 100644 Dockerfile-build-wheel.arm64 create mode 100644 Dockerfile-build-wheel.x86_64 create mode 120000 build-linux-arm64.sh create mode 120000 build-linux-x86_64.sh create mode 100755 build-linux.sh diff --git a/ARTIFACTORY.md b/ARTIFACTORY.md new file mode 100644 index 000000000..37e8a34b6 --- /dev/null +++ b/ARTIFACTORY.md @@ -0,0 +1,16 @@ +# Publish to artifactory + +## MacOS binary +```shell +maturin publish --repository-url https://artifactory-uw2.adobeitc.com/artifactory/api/pypi/pypi-arrow-release/ --password $ARTIFACTORY_UW2_TOKEN --username $ARTIFACTORY_USER +``` + +## Linux ARM64 +```shell +./build-linux-arm64.sh +``` + +## Linux X86_64 +```shell +./build-linux-x86_64.sh +``` \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 2622ea20c..3a3b37edb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -640,9 +640,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.29" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "jobserver", "libc", @@ -676,25 +676,14 @@ dependencies = [ [[package]] name = "chrono-tz" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efdce149c370f133a071ca8ef6ea340b7b88748ab0810097a9e2976eaa34b4f3" +checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" dependencies = [ "chrono", - "chrono-tz-build", "phf", ] -[[package]] -name = "chrono-tz-build" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f10f8c9340e31fc120ff885fcdb54a0b48e474bbd77cab557f0c30a3e569402" -dependencies = [ - "parse-zoneinfo", - "phf_codegen", -] - [[package]] name = "cmake" version = "0.1.54" @@ -736,9 +725,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" +checksum = "b98d1483e98c9d67f341ab4b3915cfdc54740bd6f5cccc9226ee0535d86aa8fb" [[package]] name = "constant_time_eq" @@ -797,9 +786,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -878,9 +867,8 @@ dependencies = [ [[package]] name = "datafusion" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a11e19a7ccc5bb979c95c1dceef663eab39c9061b3bbf8d1937faf0f03bf41f" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "arrow-ipc", @@ -920,7 +908,7 @@ dependencies = [ "object_store", "parking_lot", "parquet", - "rand 0.9.1", + "rand 0.9.2", "regex", "sqlparser", "tempfile", @@ -933,9 +921,8 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94985e67cab97b1099db2a7af11f31a45008b282aba921c1e1d35327c212ec18" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -959,9 +946,8 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e002df133bdb7b0b9b429d89a69aa77b35caeadee4498b2ce1c7c23a99516988" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -982,9 +968,8 @@ dependencies = [ [[package]] name = "datafusion-common" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13242fc58fd753787b0a538e5ae77d356cb9d0656fa85a591a33c5f106267f6" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "ahash", "apache-avro", @@ -999,17 +984,18 @@ dependencies = [ "object_store", "parquet", "paste", + "prost", "recursive", "sqlparser", + "substrait", "tokio", "web-time", ] [[package]] name = "datafusion-common-runtime" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2239f964e95c3a5d6b4a8cde07e646de8995c1396a7fd62c6e784f5341db499" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "futures", "log", @@ -1018,9 +1004,8 @@ dependencies = [ [[package]] name = "datafusion-datasource" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cf792579bc8bf07d1b2f68c2d5382f8a63679cce8fbebfd4ba95742b6e08864" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-compression", @@ -1043,7 +1028,7 @@ dependencies = [ "log", "object_store", "parquet", - "rand 0.9.1", + "rand 0.9.2", "tempfile", "tokio", "tokio-util", @@ -1054,9 +1039,8 @@ dependencies = [ [[package]] name = "datafusion-datasource-avro" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de733d231abb0fba663ff60fd37bf7171fa8b2e46e8a99e41362001821d116e" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "apache-avro", "arrow", @@ -1079,9 +1063,8 @@ dependencies = [ [[package]] name = "datafusion-datasource-csv" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc114f9a1415174f3e8d2719c371fc72092ef2195a7955404cfe6b2ba29a706" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -1104,9 +1087,8 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d88dd5e215c420a52362b9988ecd4cefd71081b730663d4f7d886f706111fc75" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -1129,9 +1111,8 @@ dependencies = [ [[package]] name = "datafusion-datasource-parquet" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33692acdd1fbe75280d14f4676fe43f39e9cb36296df56575aa2cac9a819e4cf" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -1154,21 +1135,19 @@ dependencies = [ "object_store", "parking_lot", "parquet", - "rand 0.9.1", + "rand 0.9.2", "tokio", ] [[package]] name = "datafusion-doc" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0e7b648387b0c1937b83cb328533c06c923799e73a9e3750b762667f32662c0" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" [[package]] name = "datafusion-execution" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9609d83d52ff8315283c6dad3b97566e877d8f366fab4c3297742f33dcd636c7" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "dashmap", @@ -1178,16 +1157,15 @@ dependencies = [ "log", "object_store", "parking_lot", - "rand 0.9.1", + "rand 0.9.2", "tempfile", "url", ] [[package]] name = "datafusion-expr" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75230cd67f650ef0399eb00f54d4a073698f2c0262948298e5299fc7324da63" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "chrono", @@ -1198,6 +1176,7 @@ dependencies = [ "datafusion-functions-window-common", "datafusion-physical-expr-common", "indexmap", + "log", "paste", "recursive", "serde_json", @@ -1206,9 +1185,8 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70fafb3a045ed6c49cfca0cd090f62cf871ca6326cc3355cb0aaf1260fa760b6" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "datafusion-common", @@ -1219,9 +1197,8 @@ dependencies = [ [[package]] name = "datafusion-ffi" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257de77f836e9bad3e0274d4ffc88555ebf559ae30d4e9c674b9809104c1cc3b" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "abi_stable", "arrow", @@ -1241,9 +1218,8 @@ dependencies = [ [[package]] name = "datafusion-functions" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf9a9cf655265861a20453b1e58357147eab59bdc90ce7f2f68f1f35104d3bb" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "arrow-buffer", @@ -1261,7 +1237,7 @@ dependencies = [ "itertools 0.14.0", "log", "md-5", - "rand 0.9.1", + "rand 0.9.2", "regex", "sha2", "unicode-segmentation", @@ -1270,9 +1246,8 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f07e49733d847be0a05235e17b884d326a2fd402c97a89fe8bcf0bfba310005" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "ahash", "arrow", @@ -1291,9 +1266,8 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4512607e10d72b0b0a1dc08f42cb5bd5284cb8348b7fea49dc83409493e32b1b" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "ahash", "arrow", @@ -1304,9 +1278,8 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab331806e34f5545e5f03396e4d5068077395b1665795d8f88c14ec4f1e0b7a" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "arrow-ord", @@ -1325,9 +1298,8 @@ dependencies = [ [[package]] name = "datafusion-functions-table" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ac2c0be983a06950ef077e34e0174aa0cb9e346f3aeae459823158037ade37" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -1341,9 +1313,8 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f3d92731de384c90906941d36dcadf6a86d4128409a9c5cd916662baed5f53" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "datafusion-common", @@ -1359,9 +1330,8 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c679f8bf0971704ec8fd4249fcbb2eb49d6a12cc3e7a840ac047b4928d3541b5" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -1369,9 +1339,8 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2821de7cb0362d12e75a5196b636a59ea3584ec1e1cc7dc6f5e34b9e8389d251" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "datafusion-expr", "quote", @@ -1380,14 +1349,16 @@ dependencies = [ [[package]] name = "datafusion-optimizer" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1594c7a97219ede334f25347ad8d57056621e7f4f35a0693c8da876e10dd6a53" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "chrono", "datafusion-common", "datafusion-expr", + "datafusion-functions", + "datafusion-functions-aggregate", + "datafusion-functions-nested", "datafusion-physical-expr", "indexmap", "itertools 0.14.0", @@ -1399,9 +1370,8 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6da0f2412088d23f6b01929dedd687b5aee63b19b674eb73d00c3eb3c883b7" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "ahash", "arrow", @@ -1421,9 +1391,8 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb0dbd9213078a593c3fe28783beaa625a4e6c6a6c797856ee2ba234311fb96" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "ahash", "arrow", @@ -1435,9 +1404,8 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d140854b2db3ef8ac611caad12bfb2e1e1de827077429322a6188f18fc0026a" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "datafusion-common", @@ -1454,9 +1422,8 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46cbdf21a01206be76d467f325273b22c559c744a012ead5018dfe79597de08" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "ahash", "arrow", @@ -1484,9 +1451,8 @@ dependencies = [ [[package]] name = "datafusion-proto" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3fc7a2744332c2ef8804274c21f9fa664b4ca5889169250a6fd6b649ee5d16c" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "chrono", @@ -1500,9 +1466,8 @@ dependencies = [ [[package]] name = "datafusion-proto-common" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "800add86852f12e3d249867425de2224c1e9fb7adc2930460548868781fbeded" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "datafusion-common", @@ -1536,9 +1501,8 @@ dependencies = [ [[package]] name = "datafusion-session" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a72733766ddb5b41534910926e8da5836622316f6283307fd9fb7e19811a59c" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "async-trait", @@ -1560,9 +1524,8 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5162338cdec9cc7ea13a0e6015c361acad5ec1d88d83f7c86301f789473971f" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "arrow", "bigdecimal", @@ -1577,9 +1540,8 @@ dependencies = [ [[package]] name = "datafusion-substrait" -version = "48.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6029c08002772fb2c38a191d21a8b03af78750f42d9b896222f6b0e16c84cf" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" dependencies = [ "async-recursion", "async-trait", @@ -1993,11 +1955,10 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ - "base64 0.22.1", "bytes", "futures-channel", "futures-core", @@ -2005,11 +1966,9 @@ dependencies = [ "http", "http-body", "hyper", - "ipnet", "libc", - "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.0", "tokio", "tower-service", "tracing", @@ -2170,9 +2129,9 @@ checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags", "cfg-if", @@ -2185,16 +2144,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "itertools" version = "0.13.0" @@ -2456,6 +2405,12 @@ dependencies = [ "libmimalloc-sys", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2568,9 +2523,9 @@ dependencies = [ [[package]] name = "object_store" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781f96d79ed0f961a7021424ab01840efbda64ae7a505aaea195efc91eaaec4" +checksum = "efc4f07659e11cd45a341cd24d71e683e3be65d9ff1f8150061678fe60437496" dependencies = [ "async-trait", "base64 0.22.1", @@ -2588,7 +2543,7 @@ dependencies = [ "parking_lot", "percent-encoding", "quick-xml", - "rand 0.9.1", + "rand 0.9.2", "reqwest", "ring", "rustls-pemfile", @@ -2684,15 +2639,6 @@ dependencies = [ "zstd", ] -[[package]] -name = "parse-zoneinfo" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" -dependencies = [ - "regex", -] - [[package]] name = "paste" version = "1.0.15" @@ -2766,38 +2712,18 @@ dependencies = [ [[package]] name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" dependencies = [ - "phf_generator", "phf_shared", ] -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - [[package]] name = "phf_shared" -version = "0.11.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" dependencies = [ "siphasher", ] @@ -3028,9 +2954,9 @@ checksum = "5a651516ddc9168ebd67b24afd085a718be02f8858fe406591b013d101ce2f40" [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" dependencies = [ "memchr", "serde", @@ -3049,7 +2975,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2", + "socket2 0.5.10", "thiserror 2.0.12", "tokio", "tracing", @@ -3065,7 +2991,7 @@ dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash", "rustls", @@ -3086,7 +3012,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -3119,9 +3045,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -3187,9 +3113,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" dependencies = [ "bitflags", ] @@ -3231,9 +3157,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "regress" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ef7fa9ed0256d64a688a3747d0fef7a88851c18a5e1d57f115f38ec2e09366" +checksum = "145bb27393fe455dd64d6cbc8d059adfa392590a45eadf079c01b11857e7b010" dependencies = [ "hashbrown 0.15.4", "memchr", @@ -3250,9 +3176,8 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +version = "0.12.15" +source = "git+https://github.com/hstack/reqwest.git?branch=main#8a0bfd85c57b7792a780fa30a05d6980fa41e807" dependencies = [ "base64 0.22.1", "bytes", @@ -3265,13 +3190,17 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", + "ipnet", "js-sys", "log", + "mime", + "once_cell", "percent-encoding", "pin-project-lite", "quinn", "rustls", "rustls-native-certs", + "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", @@ -3281,13 +3210,13 @@ dependencies = [ "tokio-rustls", "tokio-util", "tower", - "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", + "windows-registry", ] [[package]] @@ -3333,22 +3262,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" dependencies = [ "once_cell", "ring", @@ -3391,9 +3320,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "ring", "rustls-pki-types", @@ -3540,9 +3469,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "itoa", "memchr", @@ -3644,6 +3573,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "sqlparser" version = "0.55.0" @@ -3901,7 +3840,7 @@ dependencies = [ "mio", "pin-project-lite", "slab", - "socket2", + "socket2 0.5.10", "tokio-macros", "windows-sys 0.52.0", ] @@ -3955,24 +3894,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - [[package]] name = "tower-layer" version = "0.3.3" @@ -4372,7 +4293,7 @@ dependencies = [ "windows-interface", "windows-link", "windows-result", - "windows-strings", + "windows-strings 0.4.2", ] [[package]] @@ -4403,6 +4324,17 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +dependencies = [ + "windows-result", + "windows-strings 0.3.1", + "windows-targets 0.53.2", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -4412,6 +4344,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-strings" version = "0.4.2" @@ -4737,3 +4678,8 @@ dependencies = [ "cc", "pkg-config", ] + +[[patch.unused]] +name = "deltalake" +version = "0.28.0" +source = "git+https://github.com/hstack/delta-rs.git?branch=main-48#4b632ac3e07887bab8fce8b92c20a0d4d36216a5" diff --git a/Cargo.toml b/Cargo.toml index b66c53301..f073fe06d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,5 +61,39 @@ name = "datafusion_python" crate-type = ["cdylib", "rlib"] [profile.release] -lto = true +lto = false codegen-units = 1 + +[patch.crates-io] +datafusion = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-catalog = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-catalog-listing = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-common = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-common-runtime = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-datasource = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-datasource-avro = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-datasource-csv = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-datasource-json = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-datasource-parquet = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-execution = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-expr = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-expr-common = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-ffi = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions-aggregate = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions-aggregate-common = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions-nested = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions-table = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions-window = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-functions-window-common = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-optimizer = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-physical-expr = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-physical-expr-common = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-physical-optimizer = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-physical-plan = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-proto = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-proto-common = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-session = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-sql = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +datafusion-substrait = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +reqwest = { git = 'https://github.com/hstack/reqwest.git', branch = 'main' } diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..bcc350b4b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM scratch + +COPY datafusion-44.0.0-cp38-abi3-manylinux_2_28_aarch64.whl / + diff --git a/Dockerfile-build-wheel.arm64 b/Dockerfile-build-wheel.arm64 new file mode 100644 index 000000000..f561b4518 --- /dev/null +++ b/Dockerfile-build-wheel.arm64 @@ -0,0 +1,54 @@ +# syntax=docker/dockerfile:1 + +FROM quay.io/pypa/manylinux_2_28_aarch64 AS base + +WORKDIR /root + +RUN <> ~/.ssh/known_hosts + ssh-keyscan github.com >> ~/.ssh/known_hosts +EOF + +RUN --mount=type=bind,source=src,target=src,readwrite \ + --mount=type=bind,source=python,target=python,readwrite \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + --mount=type=bind,source=build.rs,target=build.rs \ + --mount=type=bind,source=Cargo.toml,target=Cargo.toml \ + --mount=type=bind,source=Cargo.lock,target=Cargo.lock \ + --mount=type=bind,source=README.md,target=README.md \ + --mount=type=bind,source=LICENSE.txt,target=LICENSE.txt \ + --mount=type=cache,mode=0777,target=/root/target \ + --mount=type=cache,mode=0777,target=/usr/local/cargo/registry/ \ + --mount=type=ssh,mode=0666 \ + <> ~/.ssh/known_hosts + ssh-keyscan github.com >> ~/.ssh/known_hosts +EOF + +RUN --mount=type=bind,source=src,target=src,readwrite \ + --mount=type=bind,source=python,target=python,readwrite \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + --mount=type=bind,source=build.rs,target=build.rs \ + --mount=type=bind,source=Cargo.toml,target=Cargo.toml \ + --mount=type=bind,source=Cargo.lock,target=Cargo.lock \ + --mount=type=bind,source=README.md,target=README.md \ + --mount=type=bind,source=LICENSE.txt,target=LICENSE.txt \ + --mount=type=cache,mode=0777,target=/root/target \ + --mount=type=cache,mode=0777,target=/usr/local/cargo/registry/ \ + --mount=type=ssh,mode=0666 \ + <&2 echo "Should be invoked via one of the $root_dir/build-linux-.sh symlinks" + exit 1 +} +platform="${script#build-linux-}" +case $platform in + arm64) + pyplatform=aarch64 + ;; + *) + pyplatform=$platform + ;; +esac + +version=$(grep -w '^version' "$root_dir/pyproject.toml" | cut -d\" -f2) +sanitized_version=$(echo $version | tr '+' _) + +img_tag=docker-cja-arrow-dev.dr-uw2.adobeitc.com/datafusion-python:$sanitized_version-$platform + +docker build \ + --ssh default \ + --progress=plain \ + --platform linux/$platform \ + -f Dockerfile-build-wheel.$platform \ + -t $img_tag \ + "$root_dir" + +id=$(docker create --platform linux/$platform $img_tag) +wheel=datafusion-$version-cp39-abi3-manylinux_2_28_$pyplatform.whl +docker cp $id:$wheel . +docker rm -v $id + +which jfrog || brew install jfrog-cli + +## Artifactory UW2 +jfrog rt upload --url https://artifactory-uw2.adobeitc.com/artifactory \ + --user ${ARTIFACTORY_USER:-$ARTIFACTORY_USERNAME} \ + --password ${ARTIFACTORY_UW2_TOKEN:-$ARTIFACTORY_API_TOKEN} \ + $wheel pypi-arrow-release/datafusion/$version/ && rm -v $wheel + +## Artifactory Corp +#jfrog rt upload --url https://artifactory.corp.adobe.com/artifactory \ +# --user ${ARTIFACTORY_USER:-$ARTIFACTORY_USERNAME} \ +# --password ${ARTIFACTORY_CORP_TOKEN:-$ARTIFACTORY_API_TOKEN} \ +# $wheel pypi-arrow-release/datafusion/$version/ + diff --git a/pyproject.toml b/pyproject.toml index 728cedb2d..a856507fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,8 @@ classifiers = [ "Programming Language :: Rust", ] dependencies = ["pyarrow>=11.0.0", "typing-extensions;python_version<'3.13'"] -dynamic = ["version"] +#dynamic = ["version"] +version = "48.0.0+adobe.1" [project.urls] homepage = "https://datafusion.apache.org/python" From bf4f12bf9765088a65d72a7b4c5511d6454320ff Mon Sep 17 00:00:00 2001 From: Costi Ciudatu Date: Wed, 23 Jul 2025 16:02:23 +0300 Subject: [PATCH 2/3] [HSTACK] Delta table support --- Cargo.lock | 1576 ++++++++++++++++++++++++++++++++-- Cargo.toml | 3 + python/datafusion/context.py | 3 + src/context.rs | 22 + src/physical_plan.rs | 15 +- 5 files changed, 1547 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a3b37edb..ad9ed9b32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,7 +14,7 @@ dependencies = [ "core_extensions", "crossbeam-channel", "generational-arena", - "libloading", + "libloading 0.7.4", "lock_api", "parking_lot", "paste", @@ -130,6 +130,56 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -156,8 +206,8 @@ dependencies = [ "serde_bytes", "serde_json", "snap", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "thiserror 1.0.69", "typed-builder", "uuid", @@ -307,6 +357,7 @@ dependencies = [ "arrow-schema", "flatbuffers", "lz4_flex", + "zstd", ] [[package]] @@ -492,6 +543,394 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "aws-config" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02a18fd934af6ae7ca52410d4548b98eb895aab0f1ea417d168d85db1434a141" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "hex", + "http 1.3.1", + "ring", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "aws-credential-types" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68c2194a190e1efc999612792e25b1ab3abfefe4306494efaaabc25933c0cbe" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + +[[package]] +name = "aws-lc-rs" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "aws-runtime" +version = "1.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2090e664216c78e766b6bac10fe74d2f451c02441d43484cd76ac9a295075f7" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid", +] + +[[package]] +name = "aws-sdk-dynamodb" +version = "1.79.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e30c5374787c7ec96b290e39a1b565c9508fee443dabcabf903ff157598fab" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-sso" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13118ad30741222f67b1a18e5071385863914da05124652b38e172d6d3d9ce31" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-ssooidc" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f879a8572b4683a8f84f781695bebf2f25cf11a81a2693c31fc0e0215c2c1726" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-sts" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e9c3c24e36183e2f698235ed38dcfbbdff1d09b9232dc866c4be3011e0b47e" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfb9021f581b71870a17eac25b52335b82211cdc092e02b6876b2bcefa61666" +dependencies = [ + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.3.1", + "percent-encoding", + "sha2", + "time", + "tracing", +] + +[[package]] +name = "aws-smithy-async" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e190749ea56f8c42bf15dd76c65e14f8f765233e6df9b0506d9d934ebef867c" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "aws-smithy-http" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c82ba4cab184ea61f6edaafc1072aad3c2a17dcf4c0fce19ac5694b90d8b5f" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-http-client" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.27", + "h2 0.4.11", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.6.0", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.7", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.29", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.61.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a16e040799d29c17412943bdbf488fd75db04112d0c0d4b9290bacf5ae0014b9" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-observability" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9364d5989ac4dd918e5cc4c4bdcc61c9be17dcd2586ea7f69e348fc7c6cab393" +dependencies = [ + "aws-smithy-runtime-api", +] + +[[package]] +name = "aws-smithy-query" +version = "0.60.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-runtime" +version = "1.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "660f70d9d8af6876b4c9aa8dcb0dbaf0f89b04ee9a4455bea1b4ba03b15f26f6" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-client", + "aws-smithy-observability", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "pin-project-lite", + "pin-utils", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38280ac228bc479f347fcfccf4bf4d22d68f3bb4629685cb591cabd856567bbc" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.3.1", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d498595448e43de7f4296b7b7a18a8a02c61ec9349128c80a368f7c3b4ab11a8" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.60.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db87b96cb1b16c024980f133968d52882ca0daaee3a086c6decc500f6c99728" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "1.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a322fec39e4df22777ed3ad8ea868ac2f94cd15e1a55f6ee8d8d6305057689a" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version", + "tracing", +] + +[[package]] +name = "backon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302eaff5357a264a2c42f127ecb8bac761cf99749fc3dc95677e2743991f99e7" +dependencies = [ + "fastrand", + "tokio", +] + [[package]] name = "backtrace" version = "0.3.75" @@ -519,6 +958,16 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + [[package]] name = "bigdecimal" version = "0.4.8" @@ -533,6 +982,29 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.104", + "which", +] + [[package]] name = "bitflags" version = "2.9.1" @@ -597,6 +1069,12 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "bytemuck" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" + [[package]] name = "byteorder" version = "1.5.0" @@ -609,6 +1087,16 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + [[package]] name = "bzip2" version = "0.4.4" @@ -649,6 +1137,15 @@ dependencies = [ "shlex", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.1" @@ -669,8 +1166,10 @@ checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-link", ] @@ -684,6 +1183,17 @@ dependencies = [ "phf", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading 0.8.8", +] + [[package]] name = "cmake" version = "0.1.54" @@ -693,6 +1203,12 @@ dependencies = [ "cc", ] +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "comfy-table" version = "7.1.4" @@ -735,6 +1251,25 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "convert_case" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -845,6 +1380,41 @@ dependencies = [ "memchr", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.104", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.104", +] + [[package]] name = "dary_heap" version = "0.3.7" @@ -910,7 +1480,7 @@ dependencies = [ "parquet", "rand 0.9.2", "regex", - "sqlparser", + "sqlparser 0.55.0", "tempfile", "tokio", "url", @@ -986,7 +1556,7 @@ dependencies = [ "paste", "prost", "recursive", - "sqlparser", + "sqlparser 0.55.0", "substrait", "tokio", "web-time", @@ -1180,7 +1750,7 @@ dependencies = [ "paste", "recursive", "serde_json", - "sqlparser", + "sqlparser 0.55.0", ] [[package]] @@ -1484,6 +2054,8 @@ dependencies = [ "datafusion-ffi", "datafusion-proto", "datafusion-substrait", + "deltalake", + "env_logger", "futures", "log", "mimalloc", @@ -1535,25 +2107,199 @@ dependencies = [ "log", "recursive", "regex", - "sqlparser", + "sqlparser 0.55.0", +] + +[[package]] +name = "datafusion-substrait" +version = "48.0.0" +source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" +dependencies = [ + "async-recursion", + "async-trait", + "chrono", + "datafusion", + "itertools 0.14.0", + "object_store", + "pbjson-types", + "prost", + "substrait", + "tokio", + "url", +] + +[[package]] +name = "delta_kernel" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f06f3676832e713e44f65804cebf82f46962d3e126f64f3251eb5fbeb0ad94e4" +dependencies = [ + "arrow", + "bytes", + "chrono", + "delta_kernel_derive", + "futures", + "indexmap", + "itertools 0.14.0", + "object_store", + "parquet", + "reqwest", + "roaring", + "rustc_version", + "serde", + "serde_json", + "strum 0.27.2", + "thiserror 2.0.12", + "tokio", + "tracing", + "url", + "uuid", + "z85", +] + +[[package]] +name = "delta_kernel_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059e70a67ae0c827a0e7f393eb05db2985533b3b612f8b33243433853570db45" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "deltalake" +version = "0.28.0" +source = "git+https://github.com/hstack/delta-rs.git?branch=main#1c7e5c8f23afc4966781ef2833dccaea1cf95da6" +dependencies = [ + "delta_kernel", + "deltalake-aws", + "deltalake-azure", + "deltalake-core", +] + +[[package]] +name = "deltalake-aws" +version = "0.11.0" +source = "git+https://github.com/hstack/delta-rs.git?branch=main#1c7e5c8f23afc4966781ef2833dccaea1cf95da6" +dependencies = [ + "async-trait", + "aws-config", + "aws-credential-types", + "aws-sdk-dynamodb", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-runtime-api", + "backon", + "bytes", + "chrono", + "deltalake-core", + "futures", + "maplit", + "object_store", + "regex", + "thiserror 2.0.12", + "tokio", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "deltalake-azure" +version = "0.11.0" +source = "git+https://github.com/hstack/delta-rs.git?branch=main#1c7e5c8f23afc4966781ef2833dccaea1cf95da6" +dependencies = [ + "async-trait", + "bytes", + "deltalake-core", + "futures", + "object_store", + "regex", + "thiserror 2.0.12", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "deltalake-core" +version = "0.28.0" +source = "git+https://github.com/hstack/delta-rs.git?branch=main#1c7e5c8f23afc4966781ef2833dccaea1cf95da6" +dependencies = [ + "arrow", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "async-trait", + "bytes", + "cfg-if", + "chrono", + "dashmap", + "datafusion", + "datafusion-expr", + "datafusion-physical-expr", + "datafusion-physical-plan", + "datafusion-proto", + "delta_kernel", + "deltalake-derive", + "either", + "futures", + "humantime", + "indexmap", + "itertools 0.14.0", + "maplit", + "num-bigint", + "num-traits", + "num_cpus", + "object_store", + "parking_lot", + "parquet", + "percent-encoding", + "pin-project-lite", + "rand 0.8.5", + "regex", + "serde", + "serde_json", + "sqlparser 0.56.0", + "strum 0.27.2", + "thiserror 2.0.12", + "tokio", + "tracing", + "url", + "urlencoding", + "uuid", + "validator", +] + +[[package]] +name = "deltalake-derive" +version = "0.28.0" +source = "git+https://github.com/hstack/delta-rs.git?branch=main#1c7e5c8f23afc4966781ef2833dccaea1cf95da6" +dependencies = [ + "convert_case", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "datafusion-substrait" -version = "48.0.0" -source = "git+https://github.com/hstack/datafusion.git?branch=main#7ced8d0588483b678b982bdafdbbb59d01fec686" +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ - "async-recursion", - "async-trait", - "chrono", - "datafusion", - "itertools 0.14.0", - "object_store", - "pbjson-types", - "prost", - "substrait", - "tokio", - "url", + "powerfmt", ] [[package]] @@ -1578,6 +2324,12 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "dyn-clone" version = "1.0.19" @@ -1590,6 +2342,38 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -1651,6 +2435,21 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -1660,6 +2459,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" version = "0.3.31" @@ -1807,6 +2612,25 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.11" @@ -1818,7 +2642,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http", + "http 1.3.1", "indexmap", "slab", "tokio", @@ -1864,12 +2688,47 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.3.1" @@ -1881,6 +2740,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -1888,7 +2758,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -1899,8 +2769,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.3.1", + "http-body 1.0.1", "pin-project-lite", ] @@ -1910,12 +2780,42 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "humantime" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.6.0" @@ -1925,9 +2825,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.11", + "http 1.3.1", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -1936,20 +2836,52 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "hyper-rustls" version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http", - "hyper", + "http 1.3.1", + "hyper 1.6.0", "hyper-util", - "rustls", - "rustls-native-certs", + "rustls 0.23.29", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.2", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", "tower-service", ] @@ -1963,9 +2895,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http", - "http-body", - "hyper", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", "libc", "pin-project-lite", "socket2 0.6.0", @@ -2084,6 +3016,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.0.3" @@ -2144,6 +3082,21 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -2168,6 +3121,30 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jiff" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "jobserver" version = "0.1.33" @@ -2188,6 +3165,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "lexical-core" version = "1.0.5" @@ -2292,6 +3281,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +dependencies = [ + "cfg-if", + "windows-targets 0.53.2", +] + [[package]] name = "libm" version = "0.2.15" @@ -2317,6 +3316,12 @@ dependencies = [ "zlib-rs", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -2371,6 +3376,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "md-5" version = "0.10.6" @@ -2411,6 +3422,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2437,6 +3454,33 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework 2.11.1", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "num" version = "0.4.3" @@ -2471,6 +3515,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -2512,6 +3562,16 @@ dependencies = [ "libm", ] +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "object" version = "0.36.7" @@ -2533,11 +3593,11 @@ dependencies = [ "chrono", "form_urlencoded", "futures", - "http", + "http 1.3.1", "http-body-util", "httparse", "humantime", - "hyper", + "hyper 1.6.0", "itertools 0.14.0", "md-5", "parking_lot", @@ -2546,7 +3606,7 @@ dependencies = [ "rand 0.9.2", "reqwest", "ring", - "rustls-pemfile", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", @@ -2560,10 +3620,42 @@ dependencies = [ ] [[package]] -name = "once_cell" -version = "1.21.3" +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] name = "openssl-probe" @@ -2571,6 +3663,18 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "ordered-float" version = "2.10.1" @@ -2580,6 +3684,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + [[package]] name = "parking_lot" version = "0.12.4" @@ -2752,6 +3862,15 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "potential_utf" version = "0.1.2" @@ -2761,6 +3880,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -2780,6 +3905,28 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "proc-macro2" version = "1.0.95" @@ -2973,8 +4120,8 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", - "rustls", + "rustc-hash 2.1.1", + "rustls 0.23.29", "socket2 0.5.10", "thiserror 2.0.12", "tokio", @@ -2993,8 +4140,8 @@ dependencies = [ "lru-slab", "rand 0.9.2", "ring", - "rustc-hash", - "rustls", + "rustc-hash 2.1.1", + "rustls 0.23.29", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -3181,33 +4328,38 @@ source = "git+https://github.com/hstack/reqwest.git?branch=main#8a0bfd85c57b7792 dependencies = [ "base64 0.22.1", "bytes", + "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.11", + "http 1.3.1", + "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.6.0", + "hyper-rustls 0.27.7", + "hyper-tls", "hyper-util", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", "quinn", - "rustls", - "rustls-native-certs", - "rustls-pemfile", + "rustls 0.23.29", + "rustls-native-certs 0.8.1", + "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", + "system-configuration", "tokio", - "tokio-rustls", + "tokio-native-tls", + "tokio-rustls 0.26.2", "tokio-util", "tower", "tower-service", @@ -3239,12 +4391,28 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" +[[package]] +name = "roaring" +version = "0.10.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b" +dependencies = [ + "bytemuck", + "byteorder", +] + [[package]] name = "rustc-demangle" version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -3260,6 +4428,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + [[package]] name = "rustix" version = "1.0.8" @@ -3269,24 +4450,49 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.9.4", "windows-sys 0.60.2", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.23.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" dependencies = [ + "aws-lc-rs", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.4", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework 2.11.1", +] + [[package]] name = "rustls-native-certs" version = "0.8.1" @@ -3296,7 +4502,16 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.2.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", ] [[package]] @@ -3318,12 +4533,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -3389,6 +4615,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + [[package]] name = "security-framework" version = "3.2.0" @@ -3396,7 +4645,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -3533,6 +4782,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +dependencies = [ + "libc", +] + [[package]] name = "simdutf8" version = "0.1.5" @@ -3594,6 +4852,16 @@ dependencies = [ "sqlparser_derive", ] +[[package]] +name = "sqlparser" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e68feb51ffa54fc841e086f58da543facfe3d7ae2a60d69b0a8cbbd30d16ae8d" +dependencies = [ + "log", + "recursive", +] + [[package]] name = "sqlparser_derive" version = "0.3.0" @@ -3630,12 +4898,27 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros 0.27.2", +] + [[package]] name = "strum_macros" version = "0.26.4" @@ -3649,6 +4932,18 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "substrait" version = "0.56.0" @@ -3723,6 +5018,27 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "target-lexicon" version = "0.13.2" @@ -3738,7 +5054,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -3793,6 +5109,36 @@ dependencies = [ "ordered-float", ] +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -3838,7 +5184,9 @@ dependencies = [ "io-uring", "libc", "mio", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "slab", "socket2 0.5.10", "tokio-macros", @@ -3856,13 +5204,33 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls", + "rustls 0.23.29", "tokio", ] @@ -3912,6 +5280,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4088,14 +5457,27 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.17.0" @@ -4104,16 +5486,59 @@ checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ "getrandom 0.3.3", "js-sys", + "rand 0.9.2", "serde", "wasm-bindgen", ] +[[package]] +name = "validator" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0b4a29d8709210980a09379f27ee31549b73292c87ab9899beee1c0d3be6303" +dependencies = [ + "idna", + "once_cell", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", +] + +[[package]] +name = "validator_derive" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac855a2ce6f843beb229757e6e570a42e837bcb15e5f449dd48d5747d41bf77" +dependencies = [ + "darling", + "once_cell", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "walkdir" version = "2.5.0" @@ -4252,6 +5677,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + [[package]] name = "winapi" version = "0.3.9" @@ -4532,6 +5969,12 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + [[package]] name = "xz2" version = "0.1.7" @@ -4565,6 +6008,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "z85" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3a41ce106832b4da1c065baa4c31cf640cf965fa1483816402b7f6b96f0a64" + [[package]] name = "zerocopy" version = "0.8.26" @@ -4678,8 +6127,3 @@ dependencies = [ "cc", "pkg-config", ] - -[[patch.unused]] -name = "deltalake" -version = "0.28.0" -source = "git+https://github.com/hstack/delta-rs.git?branch=main-48#4b632ac3e07887bab8fce8b92c20a0d4d36216a5" diff --git a/Cargo.toml b/Cargo.toml index f073fe06d..c9eb4550a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,6 +51,8 @@ futures = "0.3" object_store = { version = "0.12.1", features = ["aws", "gcp", "azure", "http"] } url = "2" log = "0.4.27" +deltalake = { version = "0.28.0", features = ["datafusion", "azure", "s3"] } +env_logger = "0.11.7" [build-dependencies] prost-types = "0.13.1" # keep in line with `datafusion-substrait` @@ -96,4 +98,5 @@ datafusion-proto-common = { git = 'https://github.com/hstack/datafusion.git', br datafusion-session = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } datafusion-sql = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } datafusion-substrait = { git = 'https://github.com/hstack/datafusion.git', branch = 'main' } +deltalake = { git = 'https://github.com/hstack/delta-rs.git', branch = 'main' } reqwest = { git = 'https://github.com/hstack/reqwest.git', branch = 'main' } diff --git a/python/datafusion/context.py b/python/datafusion/context.py index bce51d644..301147d51 100644 --- a/python/datafusion/context.py +++ b/python/datafusion/context.py @@ -586,6 +586,9 @@ def register_listing_table( file_sort_order_raw, ) + def register_delta_table(self, name: str, table_uri: str, storage_opts: dict[str, str] = {}): + self.ctx.register_delta_table(name, table_uri, storage_opts) + def sql(self, query: str, options: SQLOptions | None = None) -> DataFrame: """Create a :py:class:`~datafusion.DataFrame` from SQL query text. diff --git a/src/context.rs b/src/context.rs index 36133a33d..409f7d818 100644 --- a/src/context.rs +++ b/src/context.rs @@ -320,6 +320,13 @@ impl PySessionContext { } else { RuntimeEnvBuilder::default() }; + deltalake::azure::register_handlers(None); + deltalake::aws::register_handlers(None); + let _ = env_logger::try_init(); + + let config = config.set_bool("datafusion.sql_parser.enable_ident_normalization", false); + + let runtime = Arc::new(runtime_env_builder.build()?); let session_state = SessionStateBuilder::new() .with_config(config) @@ -875,6 +882,21 @@ impl PySessionContext { Ok(()) } + pub fn register_delta_table( + &self, + name: &str, + table_uri: &str, + storage_opts: HashMap, + py: Python, + ) -> PyResult<()> { + deltalake::ensure_initialized(); + let table = deltalake::open_table_with_storage_options(table_uri, storage_opts); + let table = wait_for_future(py, table)?.map_err(py_datafusion_err)?; + self.ctx.register_table(name, Arc::new(table)).map_err(py_datafusion_err)?; + Ok(()) + } + + #[pyo3(signature = (name="datafusion"))] pub fn catalog(&self, name: &str) -> PyResult { let catalog = self.ctx.catalog(name).ok_or(PyKeyError::new_err(format!( diff --git a/src/physical_plan.rs b/src/physical_plan.rs index 49db643e1..8f0e731af 100644 --- a/src/physical_plan.rs +++ b/src/physical_plan.rs @@ -16,10 +16,10 @@ // under the License. use datafusion::physical_plan::{displayable, ExecutionPlan, ExecutionPlanProperties}; -use datafusion_proto::physical_plan::{AsExecutionPlan, DefaultPhysicalExtensionCodec}; +use datafusion_proto::physical_plan::{AsExecutionPlan, PhysicalExtensionCodec}; use prost::Message; use std::sync::Arc; - +use deltalake::delta_datafusion::DeltaPhysicalCodec; use pyo3::{exceptions::PyRuntimeError, prelude::*, types::PyBytes}; use crate::{context::PySessionContext, errors::PyDataFusionResult}; @@ -59,10 +59,9 @@ impl PyExecutionPlan { } pub fn to_proto<'py>(&'py self, py: Python<'py>) -> PyDataFusionResult> { - let codec = DefaultPhysicalExtensionCodec {}; let proto = datafusion_proto::protobuf::PhysicalPlanNode::try_from_physical_plan( self.plan.clone(), - &codec, + codec(), )?; let bytes = proto.encode_to_vec(); @@ -82,8 +81,7 @@ impl PyExecutionPlan { )) })?; - let codec = DefaultPhysicalExtensionCodec {}; - let plan = proto_plan.try_into_physical_plan(&ctx.ctx, &ctx.ctx.runtime_env(), &codec)?; + let plan = proto_plan.try_into_physical_plan(&ctx.ctx, &ctx.ctx.runtime_env(), codec())?; Ok(Self::new(plan)) } @@ -97,6 +95,11 @@ impl PyExecutionPlan { } } +pub(crate) fn codec() -> &'static dyn PhysicalExtensionCodec { + static CODEC: DeltaPhysicalCodec = DeltaPhysicalCodec {}; + &CODEC +} + impl From for Arc { fn from(plan: PyExecutionPlan) -> Arc { plan.plan.clone() From 0f76af7e538201bc71885a33c0b6e2442e9799d0 Mon Sep 17 00:00:00 2001 From: Costi Ciudatu Date: Wed, 23 Jul 2025 16:03:08 +0300 Subject: [PATCH 3/3] [HSTACK] Distributed plan --- python/datafusion/dataframe.py | 6 ++ src/dataframe.rs | 180 ++++++++++++++++++++++++++++++++- src/lib.rs | 1 + 3 files changed, 184 insertions(+), 3 deletions(-) diff --git a/python/datafusion/dataframe.py b/python/datafusion/dataframe.py index 61cb09438..87abc91a9 100644 --- a/python/datafusion/dataframe.py +++ b/python/datafusion/dataframe.py @@ -1078,6 +1078,12 @@ def count(self) -> int: """ return self.df.count() + def distributed_plan(self): + return self.df.distributed_plan() + + def plan_sql(self): + return self.df.plan_sql() + @deprecated("Use :py:func:`unnest_columns` instead.") def unnest_column(self, column: str, preserve_nulls: bool = True) -> DataFrame: """See :py:func:`unnest_columns`.""" diff --git a/src/dataframe.rs b/src/dataframe.rs index ab4749e35..ba7021781 100644 --- a/src/dataframe.rs +++ b/src/dataframe.rs @@ -16,7 +16,9 @@ // under the License. use std::collections::HashMap; +use std::cmp::{max, min}; use std::ffi::CString; +use std::ops::IndexMut; use std::sync::Arc; use arrow::array::{new_null_array, RecordBatch, RecordBatchIterator, RecordBatchReader}; @@ -28,26 +30,35 @@ use arrow::pyarrow::FromPyArrow; use datafusion::arrow::datatypes::Schema; use datafusion::arrow::pyarrow::{PyArrowType, ToPyArrow}; use datafusion::arrow::util::pretty; -use datafusion::common::UnnestOptions; +use datafusion::common::{DFSchema, Statistics, UnnestOptions}; +use datafusion::common::stats::Precision; +use datafusion::common::tree_node::{Transformed, TreeNode}; use datafusion::config::{CsvOptions, ParquetColumnOptions, ParquetOptions, TableParquetOptions}; use datafusion::dataframe::{DataFrame, DataFrameWriteOptions}; +use datafusion::datasource::physical_plan::FileScanConfig; +use datafusion::datasource::source::{DataSource, DataSourceExec}; use datafusion::datasource::TableProvider; use datafusion::error::DataFusionError; use datafusion::execution::SendableRecordBatchStream; use datafusion::parquet::basic::{BrotliLevel, Compression, GzipLevel, ZstdLevel}; +use datafusion::physical_plan::ExecutionPlan; use datafusion::prelude::*; use datafusion_ffi::table_provider::FFI_TableProvider; +use datafusion::sql::unparser::plan_to_sql; +use datafusion_proto::physical_plan::AsExecutionPlan; +use datafusion_proto::protobuf::PhysicalPlanNode; use futures::{StreamExt, TryStreamExt}; +use prost::Message; use pyo3::exceptions::PyValueError; use pyo3::prelude::*; use pyo3::pybacked::PyBackedStr; -use pyo3::types::{PyCapsule, PyList, PyTuple, PyTupleMethods}; +use pyo3::types::{PyBytes, PyCapsule, PyDict, PyList, PyString, PyTuple, PyTupleMethods}; use tokio::task::JoinHandle; use crate::catalog::PyTable; use crate::errors::{py_datafusion_err, to_datafusion_err, PyDataFusionError}; use crate::expr::sort_expr::to_sort_expressions; -use crate::physical_plan::PyExecutionPlan; +use crate::physical_plan::{codec, PyExecutionPlan}; use crate::record_batch::PyRecordBatchStream; use crate::sql::logical::PyLogicalPlan; use crate::utils::{ @@ -57,6 +68,7 @@ use crate::{ errors::PyDataFusionResult, expr::{sort_expr::PySortExpr, PyExpr}, }; +use crate::common::df_schema::PyDFSchema; // https://github.com/apache/datafusion-python/pull/1016#discussion_r1983239116 // - we have not decided on the table_provider approach yet @@ -992,6 +1004,168 @@ impl PyDataFrame { let df = self.df.as_ref().clone().fill_null(scalar_value, cols)?; Ok(Self::new(df)) } + + fn distributed_plan(&self, py: Python<'_>) -> PyResult { + let future_plan = DistributedPlan::try_new(self.df.as_ref()); + wait_for_future(py, future_plan)?.map_err(py_datafusion_err) + } + + fn plan_sql(&self, py: Python<'_>) -> PyResult { + let logical_plan = self.df.logical_plan(); + + let sql = plan_to_sql(logical_plan).map_err(py_datafusion_err)?; + Ok(PyString::new(py, sql.to_string().as_ref()).into()) + } +} + +#[pyclass(get_all)] +#[derive(Debug, Clone)] +pub struct DistributedPlan { + min_size: usize, + physical_plan: PyExecutionPlan, +} + +#[pymethods] +impl DistributedPlan { + #[new] + fn unmarshal(state: Bound) -> PyResult { + let ctx = SessionContext::new(); + let serialized_plan = state + .get_item("plan")? + .expect("missing key `plan` from state"); + let serialized_plan = serialized_plan.downcast::()?.as_bytes(); + let min_size = state + .get_item("min_size")? + .expect("missing key `min_size` from state") + .extract::()?; + let plan = deserialize_plan(serialized_plan, &ctx)?; + Ok(Self { + min_size, + physical_plan: PyExecutionPlan::new(plan), + }) + } + + fn partition_count(&self) -> usize { + self.physical_plan.partition_count() + } + + fn num_bytes(&self) -> Option { + self.stats_field(|stats| stats.total_byte_size) + } + + fn num_rows(&self) -> Option { + self.stats_field(|stats| stats.num_rows) + } + + fn schema(&self) -> PyResult { + DFSchema::try_from(self.plan().schema()) + .map(PyDFSchema::from) + .map_err(py_datafusion_err) + } + + fn set_desired_parallelism(&mut self, desired_parallelism: usize) -> PyResult<()> { + let updated_plan = self + .plan() + .clone() + .transform_up(|node| { + if let Some(exec) = node.as_any().downcast_ref::() { + // Remove redundant ranges from partition files because FileScanConfig refuses to repartition + // if any file has a range defined (even when the range actually covers the entire file). + // The EnforceDistribution optimizer rule adds ranges for both full and partial files, + // so this tries to revert that in order to trigger a repartition when no files are actually split. + // TODO: check whether EnforceDistribution is still adding redundant ranges and remove this + // workaround if no longer needed. + if let Some(file_scan) = + exec.data_source().as_any().downcast_ref::() + { + let mut range_free_file_scan = file_scan.clone(); + let mut total_size: usize = 0; + for group in range_free_file_scan.file_groups.iter_mut() { + for group_idx in 0..group.len() { + let file = group.index_mut(group_idx); + if let Some(range) = &file.range { + total_size += (range.end - range.start) as usize; + if range.start == 0 && range.end == file.object_meta.size as i64 + { + file.range = None; // remove redundant range + } + } else { + total_size += file.object_meta.size as usize; + } + + } + } + let min_size_buckets = max(1, total_size.div_ceil(self.min_size)); + let partitions = min(min_size_buckets, desired_parallelism); + let ordering = range_free_file_scan.eq_properties().output_ordering(); + if let Some(repartitioned) = + range_free_file_scan.repartitioned(partitions, 1, ordering)? + { + return Ok(Transformed::yes(Arc::new(DataSourceExec::new( + repartitioned, + )))); + } + } + } + Ok(Transformed::no(node)) + }) + .map_err(py_datafusion_err)? + .data; + self.physical_plan = PyExecutionPlan::new(updated_plan); + Ok(()) + } +} + +impl DistributedPlan { + async fn try_new(df: &DataFrame) -> Result { + let (mut session_state, logical_plan) = df.clone().into_parts(); + let min_size = session_state + .config_options() + .optimizer + .repartition_file_min_size; + // Create the physical plan with a single partition, to ensure that no files are split into ranges. + // Otherwise, any subsequent repartition attempt would fail (see the comment in `set_desired_parallelism`) + session_state + .config_mut() + .options_mut() + .execution + .target_partitions = 1; + let physical_plan = session_state.create_physical_plan(&logical_plan).await?; + let physical_plan = PyExecutionPlan::new(physical_plan); + Ok(Self { + min_size, + physical_plan, + }) + } + + fn plan(&self) -> &Arc { + &self.physical_plan.plan + } + + fn stats_field(&self, field: fn(Statistics) -> Precision) -> Option { + if let Ok(stats) = self.plan().partition_statistics(None) { + match field(stats) { + Precision::Exact(n) => Some(n), + _ => None, + } + } else { + None + } + } +} + +fn deserialize_plan( + serialized_plan: &[u8], + ctx: &SessionContext, +) -> PyResult> { + deltalake::ensure_initialized(); + let node = PhysicalPlanNode::decode(serialized_plan) + .map_err(|e| DataFusionError::External(Box::new(e))) + .map_err(py_datafusion_err)?; + let plan = node + .try_into_physical_plan(ctx, ctx.runtime_env().as_ref(), codec()) + .map_err(py_datafusion_err)?; + Ok(plan) } /// Print DataFrame diff --git a/src/lib.rs b/src/lib.rs index 29d3f41da..b50c00632 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -129,6 +129,7 @@ fn _internal(py: Python, m: Bound<'_, PyModule>) -> PyResult<()> { #[cfg(feature = "substrait")] setup_substrait_module(py, &m)?; + m.add_class::()?; Ok(()) }