diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index e7abb023..81762025 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -41,6 +41,7 @@ jobs: - 'sqlite' - 'mysql' - 'flight' + - 'adbc' steps: - uses: actions/checkout@v5 @@ -113,6 +114,12 @@ jobs: sudo apt-get install -y unixodbc-dev sudo apt-get install -y libsqlite3-dev + - name: Install ADBC drivers + run: | + curl -LsSf https://dbc.columnar.tech/install.sh | sh + dbc install sqlite + dbc install duckdb + - name: Run tests run: make test diff --git a/Cargo.lock b/Cargo.lock index d3b35942..2a8aeaff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,19 +51,45 @@ dependencies = [ ] [[package]] -name = "addr2line" -version = "0.24.2" +name = "adbc_core" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b891479797b5588e320f7fd3caf15faba311cf8f8a76911195b6a3d55304eb" +dependencies = [ + "arrow-array", + "arrow-schema", +] + +[[package]] +name = "adbc_driver_manager" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844df935978b736a83ac34fc60b81ef06d792389ba00e37e2c0e3db09986512e" +dependencies = [ + "adbc_core", + "adbc_ffi", + "arrow-array", + "arrow-schema", + "libloading 0.8.9", + "toml", +] + +[[package]] +name = "adbc_ffi" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "c30e0f28a8363a76a8ec802934223ea5811ea658308c7403c8beb9aa86fa808f" dependencies = [ - "gimli", + "adbc_core", + "arrow-array", + "arrow-schema", ] [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "ahash" @@ -84,7 +110,7 @@ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "const-random", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -127,7 +153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.1", + "bitflags 2.10.0", "cc", "cesu8", "jni", @@ -158,9 +184,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -173,9 +199,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -188,22 +214,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -235,9 +261,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26b57282a08ae92f727497805122fec964c6245cfa0e13f0e75452eaf3bc41f" +checksum = "6e833808ff2d94ed40d9379848a950d995043c7fb3e81a30b383f4c6033821cc" dependencies = [ "arrow-arith", "arrow-array", @@ -257,9 +283,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cebf38ca279120ff522f4954b81a39527425b6e9f615e6b72842f4de1ffe02b8" +checksum = "ad08897b81588f60ba983e3ca39bda2b179bdd84dced378e7df81a5313802ef8" dependencies = [ "arrow-array", "arrow-buffer", @@ -271,9 +297,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744109142cdf8e7b02795e240e20756c2a782ac9180d4992802954a8f871c0de" +checksum = "8548ca7c070d8db9ce7aa43f37393e4bfcf3f2d3681df278490772fd1673d08d" dependencies = [ "ahash 0.8.12", "arrow-buffer", @@ -282,15 +308,15 @@ dependencies = [ "chrono", "chrono-tz", "half", - "hashbrown 0.15.3", + "hashbrown 0.16.0", "num", ] [[package]] name = "arrow-buffer" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601bb103c4c374bcd1f62c66bcea67b42a2ee91a690486c37d4c180236f11ccc" +checksum = "e003216336f70446457e280807a73899dd822feaf02087d31febca1363e2fccc" dependencies = [ "bytes", "half", @@ -299,9 +325,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed61d9d73eda8df9e3014843def37af3050b5080a9acbe108f045a316d5a0be" +checksum = "919418a0681298d3a77d1a315f625916cb5678ad0d74b9c60108eb15fd083023" dependencies = [ "arrow-array", "arrow-buffer", @@ -320,9 +346,9 @@ dependencies = [ [[package]] name = "arrow-csv" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95b96ce0c06b4d33ac958370db8c0d31e88e54f9d6e08b0353d18374d9f991" +checksum = "bfa9bf02705b5cf762b6f764c65f04ae9082c7cfc4e96e0c33548ee3f67012eb" dependencies = [ "arrow-array", "arrow-cast", @@ -335,9 +361,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43407f2c6ba2367f64d85d4603d6fb9c4b92ed79d2ffd21021b37efa96523e12" +checksum = "a5c64fff1d142f833d78897a772f2e5b55b36cb3e6320376f0961ab0db7bd6d0" dependencies = [ "arrow-buffer", "arrow-schema", @@ -347,9 +373,9 @@ dependencies = [ [[package]] name = "arrow-flight" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c66c5e4a7aedc2bfebffeabc2116d76adb22e08d230b968b995da97f8b11ca" +checksum = "8c8b0ba0784d56bc6266b79f5de7a24b47024e7b3a0045d2ad4df3d9b686099f" dependencies = [ "arrow-arith", "arrow-array", @@ -374,9 +400,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4b0487c4d2ad121cbc42c4db204f1509f8618e589bc77e635e9c40b502e3b90" +checksum = "1d3594dcddccc7f20fd069bc8e9828ce37220372680ff638c5e00dea427d88f5" dependencies = [ "arrow-array", "arrow-buffer", @@ -390,9 +416,9 @@ dependencies = [ [[package]] name = "arrow-json" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d747573390905905a2dc4c5a61a96163fe2750457f90a04ee2a88680758c79" +checksum = "88cf36502b64a127dc659e3b305f1d993a544eab0d48cce704424e62074dc04b" dependencies = [ "arrow-array", "arrow-buffer", @@ -401,7 +427,7 @@ dependencies = [ "arrow-schema", "chrono", "half", - "indexmap 2.11.3", + "indexmap 2.12.0", "lexical-core", "memchr", "num", @@ -412,23 +438,23 @@ dependencies = [ [[package]] name = "arrow-odbc" -version = "20.0.1" +version = "20.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f745d509e3e5182a8cb6ef65f8691ab519ffbf1385ed6f26572094f1bfea5f" +checksum = "76f553963d7af427aaa65ad12689ee30981d405afae4ec82c110e0a71d97bbcc" dependencies = [ "arrow", "atoi", "chrono", "log", "odbc-api", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "arrow-ord" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142a147dceb59d057bad82400f1693847c80dca870d008bf7b91caf902810ae" +checksum = "3c8f82583eb4f8d84d4ee55fd1cb306720cddead7596edce95b50ee418edf66f" dependencies = [ "arrow-array", "arrow-buffer", @@ -439,9 +465,9 @@ dependencies = [ [[package]] name = "arrow-pyarrow" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9038de599df1b81f63b42220e2b6cd6fd4f09af333858cd320db9bef5ac757" +checksum = "7d924b32e96f8bb74d94cd82bd97b313c432fcb0ea331689ef9e7c6b8be4b258" dependencies = [ "arrow-array", "arrow-data", @@ -451,9 +477,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac6620667fccdab4204689ca173bd84a15de6bb6b756c3a8764d4d7d0c2fc04" +checksum = "9d07ba24522229d9085031df6b94605e0f4b26e099fb7cdeec37abd941a73753" dependencies = [ "arrow-array", "arrow-buffer", @@ -464,20 +490,20 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa93af9ff2bb80de539e6eb2c1c8764abd0f4b73ffb0d7c82bf1f9868785e66" +checksum = "b3aa9e59c611ebc291c28582077ef25c97f1975383f1479b12f3b9ffee2ffabe" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "serde", "serde_json", ] [[package]] name = "arrow-select" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8b2e0052cd20d36d64f32640b68a5ab54d805d24a473baee5d52017c85536c" +checksum = "8c41dbbd1e97bfcaee4fcb30e29105fb2c75e4d82ae4de70b792a5d3f66b2e7a" dependencies = [ "ahash 0.8.12", "arrow-array", @@ -489,9 +515,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2155e26e17f053c8975c546fc70cf19c00542f9abf43c23a88a46ef7204204f" +checksum = "53f5183c150fbc619eede22b861ea7c0eebed8eaac0333eaa7f6da5205fd504d" dependencies = [ "arrow-array", "arrow-buffer", @@ -561,7 +587,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -572,7 +598,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -592,15 +618,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "axum" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" dependencies = [ "axum-core", "bytes", @@ -614,8 +640,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "sync_wrapper", "tower", "tower-layer", @@ -624,9 +649,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", @@ -635,27 +660,11 @@ dependencies = [ "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", ] -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.22.1" @@ -686,9 +695,9 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" +checksum = "560f42649de9fa436b73517378a147ec21f6c997a546581df4b4b31677828934" dependencies = [ "autocfg", "libm", @@ -705,9 +714,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -786,7 +795,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tower-service", @@ -826,14 +835,14 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "brotli" -version = "8.0.1" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -870,9 +879,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-unit" @@ -930,9 +939,9 @@ dependencies = [ [[package]] name = "bzip2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ "libbz2-rs-sys", ] @@ -953,7 +962,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "log", "polling", "rustix 0.38.44", @@ -969,10 +978,11 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.25" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -986,9 +996,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -1007,28 +1017,17 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[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", + "phf 0.12.1", ] [[package]] @@ -1071,7 +1070,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1092,11 +1091,12 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.4" +version = "7.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +checksum = "e0d05af1e006a2407bedef5af410552494ce5be9090444dbbcb57258c1af3d56" dependencies = [ - "unicode-segmentation", + "strum 0.26.3", + "strum_macros 0.26.4", "unicode-width", ] @@ -1143,9 +1143,12 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" +checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" +dependencies = [ + "typewit", +] [[package]] name = "constant_time_eq" @@ -1205,18 +1208,18 @@ dependencies = [ [[package]] name = "core_extensions" -version = "1.5.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c71dc07c9721607e7a16108336048ee978c3a8b129294534272e8bac96c0ee" +checksum = "42bb5e5d0269fd4f739ea6cedaf29c16d81c27a7ce7582008e90eb50dcd57003" dependencies = [ "core_extensions_proc_macros", ] [[package]] name = "core_extensions_proc_macros" -version = "1.5.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f3b219d28b6e3b4ac87bc1fc522e0803ab22e055da177bff0068c4150c61a6" +checksum = "533d38ecd2709b7608fb8e18e4504deb99e9a72879e6aa66373a76d8dc4259ea" [[package]] name = "cpufeatures" @@ -1229,9 +1232,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", ] @@ -1262,9 +1265,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" @@ -1278,21 +1281,21 @@ dependencies = [ [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -1324,7 +1327,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1335,7 +1338,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1360,16 +1363,16 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "datafusion" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "481d0c1cad7606cee11233abcdff8eec46e43dd25abda007db6d5d26ae8483c4" +checksum = "fc6759cf9ef57c5c469e4027ac4b4cfa746e06a0f5472c2b922b6a403c2a64c4" dependencies = [ "arrow", "arrow-ipc", "arrow-schema", "async-trait", "bytes", - "bzip2 0.6.0", + "bzip2 0.6.1", "chrono", "datafusion-catalog", "datafusion-catalog-listing", @@ -1416,9 +1419,9 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70327e81ab3a1f5832d8b372d55fa607851d7cea6d1f8e65ff0c98fcc32d222" +checksum = "8a1c48fc7e6d62590d45f7be7c531980b8ff091d1ab113a9ddf465bef41e4093" dependencies = [ "arrow", "async-trait", @@ -1442,9 +1445,9 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268819e6bb20ba70a664abddc20deac604f30d3267f8c91847064542a8c0720c" +checksum = "3db1266da115de3ab0b2669fc027d96cf0ff777deb3216d52c74b528446ccdd6" dependencies = [ "arrow", "async-trait", @@ -1465,9 +1468,9 @@ dependencies = [ [[package]] name = "datafusion-common" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054873d5563f115f83ef4270b560ac2ce4de713905e825a40cac49d6ff348254" +checksum = "ad4eb2a48ca10fa1e1a487a28a5bf080e31efac2d4bf12bb7e92c2d9ea4f35e5" dependencies = [ "ahash 0.8.12", "arrow", @@ -1476,7 +1479,7 @@ dependencies = [ "chrono", "half", "hashbrown 0.14.5", - "indexmap 2.11.3", + "indexmap 2.12.0", "libc", "log", "object_store", @@ -1491,9 +1494,9 @@ dependencies = [ [[package]] name = "datafusion-common-runtime" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a1d1bc69aaaadb8008b65329ed890b33e845dc063225c190f77b20328fbe1d" +checksum = "a0422ee64d5791599c46b786063e695f7699fadd3a12ad25038cb3094d05886a" dependencies = [ "futures", "log", @@ -1502,15 +1505,15 @@ dependencies = [ [[package]] name = "datafusion-datasource" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d855160469020982880fd9bd0962e033d2f4728f56f85a83d8c90785638b6519" +checksum = "904c2e1089b3ccf10786f2dae12bc560fda278e4194a8917c5844d2e8c212818" dependencies = [ "arrow", "async-compression", "async-trait", "bytes", - "bzip2 0.6.0", + "bzip2 0.6.1", "chrono", "datafusion-common", "datafusion-common-runtime", @@ -1539,9 +1542,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-csv" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec3aa7575378d23aae96b955b5233bea6f9d461648174f6ccc8f3c160f2b7a7" +checksum = "8336a805c42ef4e359daaad142ddc53649f23c7e934c117d8516816afe6b7a3d" dependencies = [ "arrow", "async-trait", @@ -1564,9 +1567,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00cfb8f33e2864eeb3188b6818acf5546d56a5a487d423cce9b684a554caabfa" +checksum = "c691b1565e245ea369bc8418b472a75ea84c2ad2deb61b1521cfa38319a9cd47" dependencies = [ "arrow", "async-trait", @@ -1589,9 +1592,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-parquet" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3bfb48fb4ff42ac1485a12ea56434eaab53f7da8f00b2443b1a3d35a0b6d10" +checksum = "f9f7576ceb5974c5f6874d7f2a5ebfeb58960a920da64017def849e0352fe2d8" dependencies = [ "arrow", "async-trait", @@ -1622,15 +1625,15 @@ dependencies = [ [[package]] name = "datafusion-doc" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbf41013cf55c2369b5229594898e8108c8a1beeb49d97feb5e0cce9933eb8f" +checksum = "9dde7c10244f3657fc01eef8247c0b2b20eae4cf6439a0ebb27322f32026d6b8" [[package]] name = "datafusion-execution" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fd0c1ffe3885687758f985ed548184bf63b17b2a7a5ae695de422ad6432118" +checksum = "5143fc795cef959b6d5271b2e8f1120382fe929fc4bd027c7d7b993f5352ef7e" dependencies = [ "arrow", "async-trait", @@ -1648,9 +1651,9 @@ dependencies = [ [[package]] name = "datafusion-expr" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fe6411218a9dab656437b1e69b00a470a7a2d7db087867a366c145eb164a7" +checksum = "63e826296bc5f5d0af3e39c1af473d4091ac6a152a5be2f80c256f0182938428" dependencies = [ "arrow", "async-trait", @@ -1661,7 +1664,7 @@ dependencies = [ "datafusion-functions-aggregate-common", "datafusion-functions-window-common", "datafusion-physical-expr-common", - "indexmap 2.11.3", + "indexmap 2.12.0", "paste", "recursive", "serde_json", @@ -1670,13 +1673,13 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a45bee7d2606bfb41ceb1d904ba7cecf69bd5a6f8f3e6c57c3f5a83d84bdd97" +checksum = "9096732d0d8862d1950ca70324fe91f9dee3799eeb0db53ef452bdb573484db6" dependencies = [ "arrow", "datafusion-common", - "indexmap 2.11.3", + "indexmap 2.12.0", "itertools", "paste", ] @@ -1696,9 +1699,9 @@ dependencies = [ [[package]] name = "datafusion-ffi" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff957c0553df58b70904608cc0047d4489fc566191b7fb00e9fe5a52cafa0ef" +checksum = "a4bef25e2b86d9921f7a98b1a86bfb50cebe2fd97f3a9b96c85ce475e9ef78b0" dependencies = [ "abi_stable", "arrow", @@ -1718,9 +1721,9 @@ dependencies = [ [[package]] name = "datafusion-functions" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7e1c532ff9d14f291160bca23e55ffd4899800301dd2389786c2f02d76904a" +checksum = "3f362c78ac283e64fd3976e060c1a8a57d5f4dcf844a6b6bd2eb320640a1572e" dependencies = [ "arrow", "arrow-buffer", @@ -1747,9 +1750,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05d47426645aef1e73b1a034c75ab2401bc504175feb191accbe211ec24a342" +checksum = "22e2a80a80145a796ae3f02eb724ac516178556aec864fe89f6ab3741a4cd249" dependencies = [ "ahash 0.8.12", "arrow", @@ -1768,9 +1771,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c99f648b2b1743de0c1c19eef07e8cc5a085237f172b2e20bf6934e0a804e4" +checksum = "d7dcca2fe7c33409e9ab3f950366aa4cba5db6175a09599fdb658ad9f2cc4296" dependencies = [ "ahash 0.8.12", "arrow", @@ -1781,9 +1784,9 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4227782023f4fb68d3d5c5eb190665212f43c9a0b437553e4b938b379aff6cf6" +checksum = "d1b298733377f3ec8c2868c75b5555b15396d9c13e36c5fda28e80feee34e3ed" dependencies = [ "arrow", "arrow-ord", @@ -1803,9 +1806,9 @@ dependencies = [ [[package]] name = "datafusion-functions-table" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d902b1769f69058236e89f04f3bff2cf62f24311adb7bf3c6c3e945c9451076" +checksum = "2fa4a380ca362eb0fbd33093e8ca6b7a31057616c7e6ee999b87a4ad3c7c0b3f" dependencies = [ "arrow", "async-trait", @@ -1819,9 +1822,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8ee43974c92eb9920fe8e97e0fab48675e93b062abcb48bef4c1d4305b6ee4" +checksum = "9068fc85b8e187c706427794d79bb7ee91132b6b192cb7b18e650a5f7c5c1340" dependencies = [ "arrow", "datafusion-common", @@ -1837,9 +1840,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e149d36cdd44fb425dc815c5fac55025aa9a592dd65cb3c421881096292c02" +checksum = "b2f80ec56e177d166269556649be817a382a374642872df4ca48cf9be3d09b3a" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -1847,20 +1850,20 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c9faa0cdefb6e6e756482b846397b5c2d84d369e30b009472b9ab9b1430fbd" +checksum = "c4868fe261ba01e462033eff141e90453b7630722cad6420fddd81ebb786f6e2" dependencies = [ "datafusion-expr", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "datafusion-optimizer" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16a4f7059302ad1de6e97ab0eebb5c34405917b1f80806a30a66e38ad118251" +checksum = "40ed8c51b5c37c057e5c7d5945ed807f1cecfba003bdb1a4c3036595dda287c7" dependencies = [ "arrow", "chrono", @@ -1868,7 +1871,7 @@ dependencies = [ "datafusion-expr", "datafusion-expr-common", "datafusion-physical-expr", - "indexmap 2.11.3", + "indexmap 2.12.0", "itertools", "log", "recursive", @@ -1878,9 +1881,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bb87a605d8ce9672d5347c0293c12211b0c03923fc12fbdc665fe76e6f9e01" +checksum = "f678f5734147446e1adbee63be4b244c8f0e9cbd5c41525004ace3730190d03e" dependencies = [ "ahash 0.8.12", "arrow", @@ -1891,7 +1894,7 @@ dependencies = [ "datafusion-physical-expr-common", "half", "hashbrown 0.14.5", - "indexmap 2.11.3", + "indexmap 2.12.0", "itertools", "log", "parking_lot", @@ -1901,9 +1904,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-adapter" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da3a7429a555dd5ff0bec4d24bd5532ec43876764088da635cad55b2f178dc2" +checksum = "086877d4eca538e9cd1f28b917db0036efe0ad8b4fb7c702f520510672032c8d" dependencies = [ "arrow", "datafusion-common", @@ -1916,9 +1919,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "845eb44ef1e04d2a15c6d955cb146b40a41814a7be4377f0a541857d3e257d6f" +checksum = "f5c5d17f6a4f28f9849ee3449bb9b83406a718e4275c218bf37ca247ee123779" dependencies = [ "ahash 0.8.12", "arrow", @@ -1930,9 +1933,9 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b9b648ee2785722c79eae366528e52e93ece6808aef9297cf8e5521de381da" +checksum = "ab9fb8b3fba2634d444e0177862797dc1231e0e20bc4db291a15d39c0d4136c3" dependencies = [ "arrow", "datafusion-common", @@ -1950,9 +1953,9 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6688d17b78104e169d7069749832c20ff50f112be853d2c058afe46c889064" +checksum = "d5086cb2e579270173ff0eb38d60ba2a081f1d422a743fa673f6096920950eb5" dependencies = [ "ahash 0.8.12", "arrow", @@ -1971,7 +1974,7 @@ dependencies = [ "futures", "half", "hashbrown 0.14.5", - "indexmap 2.11.3", + "indexmap 2.12.0", "itertools", "log", "parking_lot", @@ -1981,9 +1984,9 @@ dependencies = [ [[package]] name = "datafusion-proto" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521cd45740788e751bf59b25d2879d162b157a45fb9b5fa2ec03034923f3658a" +checksum = "87c686bfd29ec5362fe229247ef03a0beb063b50e307bf72d0f1a80b9d90f8b8" dependencies = [ "arrow", "chrono", @@ -1997,9 +2000,9 @@ dependencies = [ [[package]] name = "datafusion-proto-common" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15ede0e0f1e51d5b5bea1a196db35e00aa3cae9e58cc12df3cc900e36328437" +checksum = "1972d37680d48d4f6167b535e0a23ea9f814a21e1359d0bd5c30d1345b95aef9" dependencies = [ "arrow", "datafusion-common", @@ -2008,9 +2011,9 @@ dependencies = [ [[package]] name = "datafusion-pruning" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a893a46c56f5f190085e13949eb8ec163672c7ec2ac33bdb82c84572e71ca73" +checksum = "1f84b866d906118c320459f30385048aeedbe36ac06973d3e4fa0cc5d60d722c" dependencies = [ "arrow", "arrow-schema", @@ -2026,9 +2029,9 @@ dependencies = [ [[package]] name = "datafusion-session" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b62684c7a1db6121a8c83100209cffa1e664a8d9ced87e1a32f8cdc2fff3c2" +checksum = "3820062b9dd2846954eeb844ff9fe3662977b7d2d74947647c779fabfa502508" dependencies = [ "arrow", "async-trait", @@ -2050,15 +2053,15 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "50.0.0" +version = "50.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09cff94b8242843e1da5d069e9d2cfc53807f1f00b1c0da78c297f47c21456e" +checksum = "375232baa851b2e9d09fcbe8906141a0ec6e0e058addc5565e0d3d790bb9d51d" dependencies = [ "arrow", "bigdecimal", "datafusion-common", "datafusion-expr", - "indexmap 2.11.3", + "indexmap 2.12.0", "log", "recursive", "regex", @@ -2069,6 +2072,8 @@ dependencies = [ name = "datafusion-table-providers" version = "0.8.1" dependencies = [ + "adbc_core", + "adbc_driver_manager", "anyhow", "arrow", "arrow-array", @@ -2114,6 +2119,7 @@ dependencies = [ "prost 0.13.5", "prost 0.14.1", "r2d2", + "r2d2_adbc", "rand 0.9.2", "regex", "reqwest", @@ -2158,12 +2164,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -2191,7 +2197,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2200,7 +2206,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.8", + "libloading 0.8.9", ] [[package]] @@ -2245,14 +2251,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", ] @@ -2277,12 +2283,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2311,16 +2317,22 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + [[package]] name = "fixedbitset" version = "0.5.7" @@ -2329,19 +2341,19 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flatbuffers" -version = "25.2.10" +version = "25.9.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1045398c1bfd89168b5fd3f1fc11f6e70b34f6f66300c87d44d3de849463abf1" +checksum = "09b6620799e7340ebd9968d2e0708eb82cf1971e9a16821e2091b6d6e475eed5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "rustc_version", ] [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ "crc32fast", "libz-rs-sys", @@ -2388,7 +2400,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2489,7 +2501,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2539,9 +2551,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -2549,9 +2561,9 @@ dependencies = [ [[package]] name = "geo-types" -version = "0.7.16" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ddb1950450d67efee2bbc5e429c68d052a822de3aad010d28b351fbb705224" +checksum = "75a4dcd69d35b2c87a7c83bce9af69fd65c9d68d3833a0ded568983928f3fc99" dependencies = [ "approx", "num-traits", @@ -2567,7 +2579,7 @@ dependencies = [ "log", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -2594,39 +2606,33 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "h2" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -2634,7 +2640,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.11.3", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -2643,13 +2649,14 @@ dependencies = [ [[package]] name = "half" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", "num-traits", + "zerocopy", ] [[package]] @@ -2673,15 +2680,21 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hashlink" version = "0.9.1" @@ -2705,9 +2718,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -2772,19 +2785,20 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", @@ -2792,6 +2806,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -2814,9 +2829,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.6" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http", "hyper", @@ -2859,9 +2874,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64", "bytes", @@ -2875,7 +2890,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.1", "system-configuration", "tokio", "tower-service", @@ -2900,9 +2915,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3058,31 +3073,34 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.3" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.16.0", "serde", "serde_core", ] [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "inherent" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c38228f24186d9cc68c729accb4d413be9eaed6ad07ff79e0270d9e56f3de13" +checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3103,17 +3121,6 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" -[[package]] -name = "io-uring" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "libc", -] - [[package]] name = "ipconfig" version = "0.3.2" @@ -3144,9 +3151,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -3187,19 +3194,19 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -3211,7 +3218,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" dependencies = [ - "indexmap 2.11.3", + "indexmap 2.12.0", ] [[package]] @@ -3222,9 +3229,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lexical-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b765c31809609075565a70b4b71402281283aeda7ecaf4818ac14a7b2ade8958" +checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" dependencies = [ "lexical-parse-float", "lexical-parse-integer", @@ -3235,66 +3242,59 @@ dependencies = [ [[package]] name = "lexical-parse-float" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de6f9cb01fb0b08060209a057c048fcbab8717b4c1ecd2eac66ebfe39a65b0f2" +checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" dependencies = [ "lexical-parse-integer", "lexical-util", - "static_assertions", ] [[package]] name = "lexical-parse-integer" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72207aae22fc0a121ba7b6d479e42cbfea549af1479c3f3a4f12c70dd66df12e" +checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" dependencies = [ "lexical-util", - "static_assertions", ] [[package]] name = "lexical-util" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a82e24bf537fd24c177ffbbdc6ebcc8d54732c35b50a3f28cc3f4e4c949a0b3" -dependencies = [ - "static_assertions", -] +checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" [[package]] name = "lexical-write-float" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5afc668a27f460fb45a81a757b6bf2f43c2d7e30cb5a2dcd3abf294c78d62bd" +checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" dependencies = [ "lexical-util", "lexical-write-integer", - "static_assertions", ] [[package]] name = "lexical-write-integer" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "629ddff1a914a836fb245616a7888b62903aae58fa771e1d83943035efa0f978" +checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" dependencies = [ "lexical-util", - "static_assertions", ] [[package]] name = "libbz2-rs-sys" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775bf80d5878ab7c2b1080b5351a48b2f737d9f6f8b383574eebcc22be0dfccb" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libduckdb-sys" @@ -3324,12 +3324,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.0", + "windows-link 0.2.1", ] [[package]] @@ -3340,13 +3340,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "libc", - "redox_syscall 0.5.12", + "redox_syscall 0.5.18", ] [[package]] @@ -3362,9 +3362,9 @@ dependencies = [ [[package]] name = "libz-rs-sys" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" dependencies = [ "zlib-rs", ] @@ -3394,9 +3394,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -3406,11 +3406,10 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -3426,7 +3425,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f8cc7106155f10bdf99a6f379688f543ad6596a415375b36a59a054ceda1198" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.5", ] [[package]] @@ -3440,11 +3439,11 @@ dependencies = [ [[package]] name = "lz4_flex" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" dependencies = [ - "twox-hash 1.6.3", + "twox-hash", ] [[package]] @@ -3485,9 +3484,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memoffset" @@ -3506,22 +3505,23 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -3537,9 +3537,9 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "termcolor", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -3564,30 +3564,30 @@ dependencies = [ "serde", "serde_json", "socket2 0.5.10", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-native-tls", "tokio-util", - "twox-hash 2.1.0", + "twox-hash", "url", ] [[package]] name = "mysql_common" -version = "0.35.4" +version = "0.35.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0ec195e788c95f36b7cf88127d538465fc2f7773e6e47af01834738eab0aee" +checksum = "fbb9f371618ce723f095c61fbcdc36e8936956d2b62832f9c7648689b338e052" dependencies = [ "base64", "bigdecimal", - "bitflags 2.9.1", + "bitflags 2.10.0", "btoi", "byteorder", "bytes", "chrono", "crc32fast", "flate2", - "getrandom 0.3.3", + "getrandom 0.3.4", "mysql-common-derive", "num-bigint", "num-traits", @@ -3597,7 +3597,7 @@ dependencies = [ "serde_json", "sha1", "sha2", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", "uuid", ] @@ -3625,7 +3625,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys", @@ -3655,7 +3655,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3740,23 +3740,24 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3781,7 +3782,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "libc", "objc2", @@ -3797,7 +3798,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "objc2", "objc2-core-location", @@ -3821,7 +3822,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "objc2", "objc2-foundation", @@ -3863,7 +3864,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "dispatch", "libc", @@ -3888,7 +3889,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "objc2", "objc2-foundation", @@ -3900,7 +3901,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "objc2", "objc2-foundation", @@ -3923,7 +3924,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "objc2", "objc2-cloud-kit", @@ -3955,27 +3956,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "objc2", "objc2-core-location", "objc2-foundation", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "object_store" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc4f07659e11cd45a341cd24d71e683e3be65d9ff1f8150061678fe60437496" +checksum = "4c1be0c6c22ec0817cdc77d3842f721a17fd30ab6965001415b5402a74e6b740" dependencies = [ "async-trait", "bytes", @@ -3986,7 +3978,7 @@ dependencies = [ "itertools", "parking_lot", "percent-encoding", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "url", @@ -3997,23 +3989,23 @@ dependencies = [ [[package]] name = "odbc-api" -version = "19.0.0" +version = "19.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88c4070344f8f56fb4a2a5db1bb203dd7529c86a4f8dd59d895147ccc16af87" +checksum = "f017d3949731e436bc1bb9a1fbc34197c2f39c588cdcb60d21adb1f8dd3b8514" dependencies = [ "atoi", "log", "odbc-sys", - "thiserror 2.0.16", + "thiserror 2.0.17", "widestring", "winit", ] [[package]] name = "odbc-sys" -version = "0.27.0" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acb069b57ebbad5234fb7197af7ee0c40daceb3946a86fa8d3f7a38393bf2770" +checksum = "bd7e3c4b5b7bbd3e7bd01dc00cb4614f2445591cad1f6f18a7e16d7f98c392e9" [[package]] name = "once_cell" @@ -4023,17 +4015,17 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -4050,7 +4042,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4061,9 +4053,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -4091,9 +4083,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -4101,22 +4093,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.12", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] name = "parquet" -version = "56.1.0" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b56b41d1bd36aae415e42f91cae70ee75cf6cba74416b14dce3e958d5990ec" +checksum = "f0dbd48ad52d7dccf8ea1b90a3ddbfaea4f69878dd7683e51c507d4bc52b5b27" dependencies = [ "ahash 0.8.12", "arrow-array", @@ -4133,7 +4125,7 @@ dependencies = [ "flate2", "futures", "half", - "hashbrown 0.15.3", + "hashbrown 0.16.0", "lz4_flex", "num", "num-bigint", @@ -4145,19 +4137,10 @@ dependencies = [ "snap", "thrift", "tokio", - "twox-hash 2.1.0", + "twox-hash", "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" @@ -4166,12 +4149,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64", - "serde", + "serde_core", ] [[package]] @@ -4182,50 +4165,49 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", - "hashbrown 0.15.3", - "indexmap 2.11.3", + "hashbrown 0.15.5", + "indexmap 2.12.0", "serde", ] [[package]] name = "phf" -version = "0.11.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" dependencies = [ - "phf_shared", + "phf_shared 0.12.1", ] [[package]] -name = "phf_codegen" -version = "0.11.3" +name = "phf" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_generator", - "phf_shared", + "phf_shared 0.13.1", + "serde", ] [[package]] -name = "phf_generator" -version = "0.11.3" +name = "phf_shared" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" dependencies = [ - "phf_shared", - "rand 0.8.5", + "siphasher", ] [[package]] name = "phf_shared" -version = "0.11.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ "siphasher", ] @@ -4247,7 +4229,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4270,30 +4252,29 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polling" -version = "3.8.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.7", - "tracing", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "postgres-native-tls" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f39498473c92f7b6820ae970382c1d83178a3454c618161cb772e8598d9f6f" +checksum = "ac73153d92e4bde922bd6f1dfba7f1ab8132266c031153b55e20a1521cd36d49" dependencies = [ "native-tls", "tokio", @@ -4303,9 +4284,9 @@ dependencies = [ [[package]] name = "postgres-protocol" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" +checksum = "fbef655056b916eb868048276cfd5d6a7dea4f81560dfd047f97c8c6fe3fcfd4" dependencies = [ "base64", "byteorder", @@ -4321,25 +4302,25 @@ dependencies = [ [[package]] name = "postgres-types" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" +checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" dependencies = [ "bytes", "chrono", "fallible-iterator 0.2.0", "geo-types", "postgres-protocol", - "serde", + "serde_core", "serde_json", "uuid", ] [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -4361,9 +4342,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] @@ -4387,14 +4368,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "8e0f6df8eaa422d97d72edcd152e1451618fed47fabbdbd5a8864167b1d4aff7" dependencies = [ "unicode-ident", ] @@ -4429,7 +4410,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4442,7 +4423,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4456,9 +4437,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" +checksum = "e66fcd288453b748497d8fb18bccc83a16b0518e3906d4b8df0a8d42d93dbb1c" dependencies = [ "cc", ] @@ -4529,7 +4510,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4542,23 +4523,23 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "r2d2" @@ -4571,6 +4552,15 @@ dependencies = [ "scheduled-thread-pool", ] +[[package]] +name = "r2d2_adbc" +version = "0.1.0" +source = "git+https://github.com/adbc-drivers/r2d2-adbc.git#853d6430f0cabbacdae51b4b7377219d961d9f27" +dependencies = [ + "adbc_core", + "r2d2", +] + [[package]] name = "radium" version = "0.7.0" @@ -4633,7 +4623,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -4659,7 +4649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4673,18 +4663,38 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ - "bitflags 2.9.1", + "proc-macro2", + "quote", + "syn 2.0.107", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -4694,9 +4704,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -4705,9 +4715,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "relative-path" @@ -4741,9 +4751,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.21" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8cea6b35bcceb099f30173754403d2eba0a5dc18cea3630fccd88251909288" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64", "bytes", @@ -4781,9 +4791,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "ring" @@ -4853,7 +4863,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.106", + "syn 2.0.107", "unicode-ident", ] @@ -4863,7 +4873,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "fallible-iterator 0.3.0", "fallible-streaming-iterator", "hashlink", @@ -4873,9 +4883,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.38.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8975fc98059f365204d635119cf9c5a60ae67b841ed49b5422a9a7e56cdfac0" +checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282" dependencies = [ "arrayvec", "borsh", @@ -4888,12 +4898,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc_version" version = "0.4.1" @@ -4909,7 +4913,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4918,22 +4922,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "log", "once_cell", @@ -4946,14 +4950,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.2.0", + "security-framework 3.5.1", ] [[package]] @@ -4967,9 +4971,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -4978,9 +4982,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -5005,11 +5009,11 @@ checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5021,6 +5025,30 @@ dependencies = [ "parking_lot", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -5057,8 +5085,8 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.106", - "thiserror 2.0.16", + "syn 2.0.107", + "thiserror 2.0.17", ] [[package]] @@ -5075,7 +5103,7 @@ checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5093,7 +5121,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -5102,11 +5130,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -5115,9 +5143,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -5125,9 +5153,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "seq-macro" @@ -5162,7 +5190,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5173,7 +5201,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5197,7 +5225,16 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", +] + +[[package]] +name = "serde_spanned" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +dependencies = [ + "serde_core", ] [[package]] @@ -5214,17 +5251,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.3", - "serde", - "serde_derive", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", "serde_json", "time", ] @@ -5266,6 +5304,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "simdutf8" version = "0.1.5" @@ -5286,18 +5330,15 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "smol_str" @@ -5326,7 +5367,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5347,12 +5388,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5372,7 +5413,7 @@ dependencies = [ "r2d2", "rust_decimal", "smallvec", - "strum", + "strum 0.25.0", ] [[package]] @@ -5394,20 +5435,20 @@ checksum = "da5fc6819faabb412da764b99d3b713bb55083c11e7e0c00144d386cd6a1939c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cddb07e32ddb770749da91081d8d0ac3a16f1a569a18b20348cd371f5dead06b" +checksum = "e1f8b29fb42aafcea4edeeb6b2f2d7ecd0d969c48b4cf0d2e64aafc471dd6e59" dependencies = [ "cc", "cfg-if", @@ -5445,9 +5486,15 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "strum_macros", + "strum_macros 0.25.3", ] +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + [[package]] name = "strum_macros" version = "0.25.3" @@ -5458,7 +5505,20 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.107", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.107", ] [[package]] @@ -5480,9 +5540,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -5506,7 +5566,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5515,7 +5575,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -5549,21 +5609,21 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" +checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.7", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -5594,7 +5654,7 @@ checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5608,11 +5668,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -5623,28 +5683,27 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -5660,9 +5719,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -5675,15 +5734,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -5710,9 +5769,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -5725,32 +5784,29 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5765,9 +5821,9 @@ dependencies = [ [[package]] name = "tokio-postgres" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" +checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" dependencies = [ "async-trait", "byteorder", @@ -5778,12 +5834,12 @@ dependencies = [ "log", "parking_lot", "percent-encoding", - "phf", + "phf 0.13.1", "pin-project-lite", "postgres-protocol", "postgres-types", "rand 0.9.2", - "socket2 0.5.10", + "socket2 0.6.1", "tokio", "tokio-util", "whoami", @@ -5802,9 +5858,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -5834,23 +5890,55 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.11.3", + "indexmap 2.12.0", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ "winnow", ] +[[package]] +name = "toml_writer" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" + [[package]] name = "tonic" version = "0.13.1" @@ -5891,7 +5979,7 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "indexmap 2.11.3", + "indexmap 2.12.0", "pin-project-lite", "slab", "sync_wrapper", @@ -5908,7 +5996,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "bytes", "futures-util", "http", @@ -5945,20 +6033,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -6062,19 +6150,9 @@ checksum = "e78122066b0cb818b8afd08f7ed22f7fdbc3e90815035726f0840d0d26c0747a" [[package]] name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - -[[package]] -name = "twox-hash" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" [[package]] name = "typed-arena" @@ -6084,9 +6162,15 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "typewit" +version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71" [[package]] name = "unicode-bidi" @@ -6096,9 +6180,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-normalization" @@ -6123,9 +6207,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unindent" @@ -6171,11 +6255,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -6219,17 +6303,17 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -6240,35 +6324,36 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -6279,9 +6364,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6289,31 +6374,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -6335,34 +6420,34 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.0", + "webpki-roots 1.0.3", ] [[package]] name = "webpki-roots" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] [[package]] name = "whoami" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ - "redox_syscall 0.5.12", + "libredox", "wasite", "web-sys", ] [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -6382,11 +6467,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6397,60 +6482,60 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.1.1", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link 0.1.1", - "windows-result", - "windows-strings", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -6459,7 +6544,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link 0.1.1", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -6468,7 +6562,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link 0.1.1", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -6507,6 +6610,24 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -6555,18 +6676,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -6589,9 +6711,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -6613,9 +6735,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -6637,9 +6759,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -6649,9 +6771,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -6673,9 +6795,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -6697,9 +6819,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -6721,9 +6843,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -6745,9 +6867,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" @@ -6757,7 +6879,7 @@ checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" dependencies = [ "android-activity", "atomic-waker", - "bitflags 2.9.1", + "bitflags 2.10.0", "block2", "calloop", "cfg_aliases", @@ -6791,9 +6913,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -6809,13 +6931,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "wkt" @@ -6846,12 +6965,12 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.0.7", + "rustix 1.1.2", ] [[package]] @@ -6860,7 +6979,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "dlib", "log", "once_cell", @@ -6902,28 +7021,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -6943,15 +7062,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" @@ -6966,9 +7085,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -6983,14 +7102,14 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "zlib-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" [[package]] name = "zstd" @@ -7012,9 +7131,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index d67ecdce..fec90afa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,3 +47,5 @@ datafusion-physical-expr = { version = "50" } datafusion-physical-plan = { version = "50" } datafusion-table-providers = { path = "core" } duckdb = { version = "=1.3.1", package = "spiceai_duckdb_fork" } # Forked to add support for duckdb_scan_arrow, pending: https://github.com/duckdb/duckdb-rs/pull/488 +adbc_core = { version = "0.20.0" } +adbc_driver_manager = { version = "0.20.0" } \ No newline at end of file diff --git a/Makefile b/Makefile index 92ab867f..a66e0748 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ all: .PHONY: test test: - cargo test --features clickhouse-federation,duckdb-federation,flight,mysql-federation,postgres-federation,sqlite-federation -p datafusion-table-providers --lib + cargo test --features clickhouse-federation,duckdb-federation,flight,mysql-federation,postgres-federation,sqlite-federation,adbc-federation -p datafusion-table-providers --lib .PHONY: lint lint: @@ -11,4 +11,4 @@ lint: .PHONY: test-integration test-integration: - RUST_LOG=debug cargo test --test integration --no-default-features --features postgres,sqlite,mysql,flight,clickhouse -- --nocapture + RUST_LOG=debug cargo test --test integration --no-default-features --features postgres,sqlite,mysql,flight,clickhouse,adbc -- --nocapture diff --git a/core/Cargo.toml b/core/Cargo.toml index c8e5efb9..68be30ca 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -100,6 +100,9 @@ trust-dns-resolver = "0.23.2" url = "2.5.4" uuid = { version = "1.18", optional = true } rust_decimal = { version = "1.38.0", features = ["db-postgres"] } +adbc_driver_manager = { workspace = true, version = "0.20.0", optional = true } +adbc_core = { workspace = true, version = "0.20.0", optional = true } +r2d2_adbc = { git = "https://github.com/adbc-drivers/r2d2-adbc.git", optional = true } [dev-dependencies] anyhow = "1.0" @@ -155,6 +158,15 @@ postgres-federation = ["postgres", "federation"] sqlite = ["dep:rusqlite", "dep:tokio-rusqlite", "dep:arrow-schema"] sqlite-federation = ["sqlite", "federation"] sqlite-bundled = ["sqlite", "rusqlite/bundled"] +adbc = [ + "dep:adbc_driver_manager", + "dep:adbc_core", + "dep:r2d2_adbc", + "dep:async-stream", + "dep:arrow-schema", + "dep:r2d2", +] +adbc-federation = ["adbc", "federation"] # docs.rs-specific configuration [package.metadata.docs.rs] @@ -187,3 +199,8 @@ required-features = ["clickhouse"] name = "sqlite_insert_benchmark" path = "../benches/sqlite_insert_benchmark.rs" required-features = ["sqlite"] + +[[example]] +name = "adbc" +path = "examples/adbc_duckdb.rs" +required-features = ["adbc"] \ No newline at end of file diff --git a/core/examples/adbc_duckdb.rs b/core/examples/adbc_duckdb.rs new file mode 100644 index 00000000..c71cd975 --- /dev/null +++ b/core/examples/adbc_duckdb.rs @@ -0,0 +1,58 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use datafusion::sql::TableReference; +use datafusion::prelude::SessionContext; +use adbc_core::{Driver, LOAD_FLAG_DEFAULT}; +use adbc_core::options::{AdbcVersion, OptionDatabase}; +use adbc_driver_manager::{ManagedDriver}; +use datafusion_table_providers::{ + adbc::AdbcTableFactory, sql::db_connection_pool::adbcpool::ADBCPool, +}; +use std::sync::Arc; + +#[tokio::main] +async fn main() { + let mut driver = ManagedDriver::load_from_name( + "duckdb", + None, + AdbcVersion::V110, + LOAD_FLAG_DEFAULT, + None, + ).unwrap(); + let db = driver. + new_database_with_opts([(OptionDatabase::Uri, "core/examples/duckdb_example.db".into())]) + .unwrap(); + + let adbc_pool = Arc::new( + ADBCPool::new(db, None).expect("Failed to create ADBC pool"), + ); + + let table_factory = AdbcTableFactory::new(adbc_pool.clone()); + + let ctx = SessionContext::new(); + + ctx.register_table( + "companies_v2", + table_factory + .table_provider(TableReference::bare("companies"), None) + .await + .expect("Failed to register table provider"), + ) + .expect("Failed to register table"); + + let df = ctx + .sql("SELECT * FROM datafusion.public.companies_v2") + .await + .expect("select failed"); + df.show().await.expect("show failed"); +} diff --git a/core/src/adbc.rs b/core/src/adbc.rs new file mode 100644 index 00000000..3dc1c369 --- /dev/null +++ b/core/src/adbc.rs @@ -0,0 +1,179 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::{ + adbc::write::{ADBCTableWriterBuilder, AdbcDataSink}, + sql::db_connection_pool::{ + self, + adbcpool::ADBCPool, + dbconnection::{adbcconn::AdbcDbConnection, get_schema, DbConnection}, + DbConnectionPool, + }, +}; + +use adbc_core::{Database, Connection}; +use arrow::array::RecordBatch; +use datafusion::sql::unparser::dialect::Dialect; +use datafusion::{ + catalog::Session, + datasource::{sink::DataSinkExec, TableProvider}, + logical_expr::dml::InsertOp, + physical_plan::ExecutionPlan, + sql::TableReference, +}; +use r2d2_adbc::AdbcConnectionManager; +use snafu::prelude::*; +use std::sync::Arc; + +use self::sql_table::AdbcDBTable; + +mod sql_table; +mod write; + +#[derive(Debug, Snafu)] +pub enum Error { + #[snafu(display("DbConnectionError: {source}"))] + DbConnectionError { + source: db_connection_pool::dbconnection::GenericError, + }, + + #[snafu(display("Unable to downcast DbConnection to AdbcDbConnection"))] + UnableToDowncastDbConnection {}, + + #[snafu(display("DbConnectionPoolError: {source}"))] + DbConnectionPoolError { source: db_connection_pool::Error }, + + #[snafu(display("A read provider is required to create an ADBCTableWriter"))] + MissingReadProvider, + + #[snafu(display("A pool is required to create an ADBCTableWriter"))] + MissingPool, + + #[snafu(display("A table reference is required to create an ADBCTableWriter"))] + MissingTableReference, +} + +type Result = std::result::Result; +type DynAdbcConnectionPool = dyn DbConnectionPool>, RecordBatch> + + Send + + Sync; + +pub struct AdbcTableFactory +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + pool: Arc>, +} + +impl AdbcTableFactory +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + #[must_use] + pub fn new(pool: Arc>) -> Self { + Self { pool } + } + + pub async fn create_from( + &self, + _state: &dyn Session, + input: Arc, + table_reference: TableReference, + ) -> datafusion::error::Result> { + let schema = input.schema(); + Ok(Arc::new(DataSinkExec::new( + input, + Arc::new(AdbcDataSink::new( + Arc::clone(&self.pool), + table_reference, + InsertOp::Append, + schema, + )), + None, + ))) + } + + pub async fn table_provider( + &self, + table_reference: TableReference, + dialect: Option>, + ) -> Result, Box> { + let pool = Arc::clone(&self.pool); + let conn = Arc::clone(&pool).connect().await?; + let schema = get_schema(conn, &table_reference).await?; + let dyn_pool: Arc> = pool; + + let table_provider = Arc::new(AdbcDBTable::new_with_schema( + &dyn_pool, + Arc::clone(&schema), + table_reference.clone(), + dialect, + )); + + Ok(table_provider) + } + + pub async fn read_write_table_provider( + &self, + table_reference: TableReference, + dialect: Option>, + ) -> Result, Box> { + let read_provider = Self::table_provider(self, table_reference.clone(), dialect).await?; + + let table_writer_builder = ADBCTableWriterBuilder::new() + .with_pool(Arc::clone(&self.pool)) + .with_table_reference(table_reference) + .with_read_provider(Arc::clone(&read_provider)); + + Ok(Arc::new(table_writer_builder.build()?)) + } +} + +pub struct ADBC +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + table_name: String, + pool: Arc>, +} + +impl ADBC +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + #[must_use] + pub fn table_name(&self) -> &str { + &self.table_name + } + + pub fn pool(&self) -> Arc> { + Arc::clone(&self.pool) + } + + pub fn adbc_conn( + db_connection: &mut Box< + dyn DbConnection< + r2d2::PooledConnection>, + RecordBatch, + >, + >, + ) -> Result<&mut AdbcDbConnection> { + db_connection + .as_any_mut() + .downcast_mut::>() + .context(UnableToDowncastDbConnectionSnafu) + } +} diff --git a/core/src/adbc/sql_table.rs b/core/src/adbc/sql_table.rs new file mode 100644 index 00000000..a03ae137 --- /dev/null +++ b/core/src/adbc/sql_table.rs @@ -0,0 +1,191 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::sql::db_connection_pool::DbConnectionPool; + +use async_trait::async_trait; +use futures::TryStreamExt; + +use std::any::Any; +use std::sync::Arc; +use crate::sql::sql_provider_datafusion::{ + get_stream, to_execution_error, Result as SqlResult, SqlExec, SqlTable, +}; + +use datafusion::catalog::Session; +use datafusion::{ + arrow::datatypes::SchemaRef, + datasource::TableProvider, + error::Result as DataFusionResult, + execution::TaskContext, + logical_expr::{Expr, TableProviderFilterPushDown, TableType}, + physical_plan::{ + stream::RecordBatchStreamAdapter, DisplayAs, DisplayFormatType, ExecutionPlan, + PlanProperties, SendableRecordBatchStream, + }, + sql::{unparser::dialect::Dialect, TableReference}, +}; + + +pub struct AdbcDBTable { + pub(crate) base_table: SqlTable, +} + +impl std::fmt::Debug for AdbcDBTable { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_struct("AdbcDBTable") + .field("base_table", &self.base_table) + .finish() + } +} + +impl AdbcDBTable { + pub fn new_with_schema( + pool: &Arc + Send + Sync>, + schema: impl Into, + table_reference: impl Into, + dialect: Option>, + ) -> Self { + let mut base_table = SqlTable::new_with_schema("adbc", pool, schema, table_reference); + + if let Some(d) = dialect { + base_table = base_table.with_dialect(d); + } + Self { base_table } + } + + fn create_physical_plan( + &self, + projection: Option<&Vec>, + schema: &SchemaRef, + sql: String, + ) -> DataFusionResult> { + Ok(Arc::new(AdbcSqlExec::new( + projection, + schema, + self.base_table.clone_pool(), + sql, + )?)) + } +} + +#[async_trait] +impl TableProvider for AdbcDBTable { + fn as_any(&self) -> &dyn Any { + self + } + + fn schema(&self) -> SchemaRef { + self.base_table.schema() + } + + fn table_type(&self) -> TableType { + self.base_table.table_type() + } + + fn supports_filters_pushdown( + &self, + filters: &[&Expr], + ) -> DataFusionResult> { + self.base_table.supports_filters_pushdown(filters) + } + + async fn scan( + &self, + _state: &dyn Session, + projection: Option<&Vec>, + filters: &[Expr], + limit: Option, + ) -> DataFusionResult> { + let sql = self.base_table.scan_to_sql(projection, filters, limit)?; + return self.create_physical_plan(projection, &self.schema(), sql); + } +} + +#[derive(Clone)] +struct AdbcSqlExec { + base_exec: SqlExec, +} + +impl AdbcSqlExec { + fn new( + projection: Option<&Vec>, + schema: &SchemaRef, + pool: Arc + Send + Sync>, + sql: String, + ) -> DataFusionResult { + let base_exec = SqlExec::new(projection, schema, pool, sql)?; + Ok(Self { base_exec }) + } + + fn sql(&self) -> SqlResult { + let sql = self.base_exec.sql()?; + Ok(sql) + } +} + +impl std::fmt::Debug for AdbcSqlExec { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "AdbcSqlExec sql={}", self.sql().unwrap_or_default()) + } +} + +impl DisplayAs for AdbcSqlExec { + fn fmt_as(&self, _t: DisplayFormatType, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "AdbcSqlExec sql={}", self.sql().unwrap_or_default()) + } +} + +impl ExecutionPlan for AdbcSqlExec { + fn name(&self) -> &'static str { + "AdbcSqlExec" + } + + fn as_any(&self) -> &dyn Any { + self + } + + fn schema(&self) -> SchemaRef { + self.base_exec.schema() + } + + fn properties(&self) -> &PlanProperties { + self.base_exec.properties() + } + + fn children(&self) -> Vec<&Arc> { + self.base_exec.children() + } + + fn with_new_children( + self: Arc, + _children: Vec>, + ) -> DataFusionResult> { + Ok(self) + } + + fn execute( + &self, + _partition: usize, + _context: Arc, + ) -> DataFusionResult { + let sql = self.sql().map_err(to_execution_error)?; + tracing::debug!("AdbcSqlExec sql: {sql}"); + + let schema = self.schema(); + + let fut = get_stream(self.base_exec.clone_pool(), sql, Arc::clone(&schema)); + + let stream = futures::stream::once(fut).try_flatten(); + Ok(Box::pin(RecordBatchStreamAdapter::new(schema, stream))) + } +} diff --git a/core/src/adbc/write.rs b/core/src/adbc/write.rs new file mode 100644 index 00000000..c45b8f44 --- /dev/null +++ b/core/src/adbc/write.rs @@ -0,0 +1,382 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::{any::Any, fmt, sync::Arc}; +use crate::adbc::{ADBC}; +use crate::util::retriable_error::{check_and_mark_retriable_error, to_retriable_data_write_error}; +use crate::sql::db_connection_pool::adbcpool::ADBCPool; +use adbc_core::options::{IngestMode, OptionStatement, OptionValue}; +use adbc_core::{ + Database, Optionable, Connection, Statement, +}; +use async_trait::async_trait; +use datafusion::physical_plan::metrics::MetricsSet; +use futures::StreamExt; +use datafusion::error::DataFusionError; +use datafusion::common::not_impl_err; +use datafusion::{ + arrow::datatypes::SchemaRef, + catalog::Session, + datasource::{TableProvider, sink::{DataSink, DataSinkExec}}, + execution::TaskContext, + logical_expr::{ + dml::InsertOp, Expr, TableType}, + physical_plan::{ + DisplayAs, DisplayFormatType, ExecutionPlan, SendableRecordBatchStream, + }, + sql::{TableReference} +}; +use tokio::sync::mpsc::{self, Receiver, Sender}; +use tokio::task::JoinHandle; +use arrow::array::{RecordBatchReader, RecordBatch}; +use arrow_schema::ArrowError; +use snafu::{ResultExt}; + +#[derive(Default)] +pub struct ADBCTableWriterBuilder +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + read_provider: Option>, + pool: Option>>, + table_reference: Option, +} + +impl ADBCTableWriterBuilder +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + #[must_use] + pub fn new() -> Self { + Self { + read_provider: None, + pool: None, + table_reference: None, + } + } + + #[must_use] + pub fn with_read_provider(mut self, read_provider: Arc) -> Self { + self.read_provider = Some(read_provider); + self + } + + #[must_use] + pub fn with_pool(mut self, pool: Arc>) -> Self { + self.pool = Some(pool); + self + } + + #[must_use] + pub fn with_table_reference(mut self, table_reference: TableReference) -> Self { + self.table_reference = Some(table_reference); + self + } + + pub fn build(self) -> super::Result> { + let Some(read_provider) = self.read_provider else { + return Err(super::Error::MissingReadProvider); + }; + + let Some(pool) = self.pool else { + return Err(super::Error::MissingPool); + }; + + let Some(table_reference) = self.table_reference else { + return Err(super::Error::MissingTableReference); + }; + + Ok(ADBCTableWriter { + read_provider, + pool, + table_reference, + }) + } +} + +#[derive(Clone)] +pub struct ADBCTableWriter +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + pub read_provider: Arc, + pool: Arc>, + table_reference: TableReference, +} + +impl std::fmt::Debug for ADBCTableWriter +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ADBCTableWriter") + .field("table_reference", &self.table_reference) + .finish() + } +} + +#[async_trait] +impl TableProvider for ADBCTableWriter +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + fn as_any(&self) -> &dyn Any { + self + } + + fn schema(&self) -> SchemaRef { + self.read_provider.schema() + } + + fn table_type(&self) -> TableType { + TableType::Base + } + + async fn scan( + &self, + state: &dyn Session, + project: Option<&Vec>, + filters: &[Expr], + limit: Option, + ) -> datafusion::error::Result> { + self.read_provider + .scan(state, project, filters, limit) + .await + } + + async fn insert_into( + &self, + _state: &dyn Session, + input: Arc, + op: InsertOp, + ) -> datafusion::error::Result> { + Ok(Arc::new(DataSinkExec::new( + input, + Arc::new(AdbcDataSink::new( + Arc::clone(&self.pool), + self.table_reference.clone(), + op, + self.schema(), + )), + None, + ))) + } +} + + +#[derive(Clone)] +pub(crate) struct AdbcDataSink +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + pool: Arc>, + table_reference: TableReference, + overwrite: InsertOp, + schema: SchemaRef, +} + +impl std::fmt::Debug for AdbcDataSink +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_struct("AdbcDataSink") + .field("table_reference", &self.table_reference) + .field("overwrite", &self.overwrite) + .field("schema", &self.schema) + .finish() + } +} + +impl DisplayAs for AdbcDataSink +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + fn fmt_as(&self, _t: DisplayFormatType, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!( + f, + "AdbcDataSink table_reference={}, overwrite={:?}, schema={:?}", + self.table_reference, self.overwrite, self.schema + ) + } +} + +#[async_trait] +impl DataSink for AdbcDataSink +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + fn as_any(&self) -> &dyn Any { + self + } + + fn metrics(&self) -> Option { + None + } + + fn schema(&self) -> &SchemaRef { + &self.schema + } + + async fn write_all( + &self, + mut data: SendableRecordBatchStream, + _context: &Arc, + ) -> datafusion::common::Result { + let pool = Arc::clone(&self.pool); + let table_ref = self.table_reference.clone(); + let overwrite = self.overwrite; + + let (batch_tx, batch_rx): (Sender, Receiver) = mpsc::channel(100); + + let schema = data.schema(); + + let adbc_write_handle: JoinHandle> = + tokio::task::spawn_blocking(move || { + bulk_insert(pool, &table_ref, batch_rx, schema, overwrite) + }); + + while let Some(batch) = data.next().await { + let batch = batch.map_err(check_and_mark_retriable_error)?; + + if let Err(send_error) = batch_tx.send(batch).await { + match adbc_write_handle.await { + Err(join_error) => { + return Err(DataFusionError::Execution(format!( + "ADBC write task join error: {}, original send error: {}", + join_error, send_error + ))); + } + Ok(Err(datafusion_error)) => { + return Err(datafusion_error); + } + _ => { + return Err(DataFusionError::Execution(format!( + "Unable to send RecordBatch to ADBC writer: {send_error}" + ))); + } + }; + } + } + + drop(batch_tx); + + match adbc_write_handle.await { + Ok(result) => result, + Err(join_error) => Err(DataFusionError::Execution(format!( + "Error writing using ADBC: {join_error}" + ))), + } + } +} + +impl AdbcDataSink +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + pub(crate) fn new( + pool: Arc>, + table_reference: TableReference, + overwrite: InsertOp, + schema: SchemaRef, + ) -> Self { + Self { + pool, + table_reference, + overwrite, + schema, + } + } +} + +fn bulk_insert( + pool: Arc>, + table_ref: &TableReference, + batch_rx: Receiver, + schema: SchemaRef, + overwrite: InsertOp, +) -> datafusion::common::Result +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + let mut db_conn = pool + .connect_sync() + .context(super::DbConnectionPoolSnafu) + .map_err(to_retriable_data_write_error)?; + + let adbc_conn = ADBC::adbc_conn(&mut db_conn) + .map_err(to_retriable_data_write_error)?; + + let conn_mx = adbc_conn.conn.lock().unwrap(); + let mut conn = conn_mx.borrow_mut(); + let mut stmt = conn.new_statement() + .map_err(to_retriable_data_write_error)?; + + stmt.set_option(OptionStatement::TargetTable, OptionValue::String(table_ref.to_string())) + .map_err(to_retriable_data_write_error)?; + + match overwrite { + InsertOp::Append => + stmt.set_option(OptionStatement::IngestMode, IngestMode::CreateAppend.into()) + .map_err(to_retriable_data_write_error)?, + InsertOp::Overwrite => + stmt.set_option(OptionStatement::IngestMode, IngestMode::Replace.into()) + .map_err(to_retriable_data_write_error)?, + InsertOp::Replace => + not_impl_err!("upsert is not implemented for ADBC data sink") + .map_err(to_retriable_data_write_error)?, + } + + stmt.bind_stream( + Box::new(RecordBatchReaderFromStream::new(batch_rx, schema)), + ).map_err(to_retriable_data_write_error)?; + + let count = stmt.execute_update().map_err(to_retriable_data_write_error)?; + Ok(count.unwrap_or(-1) as u64) +} + + +struct RecordBatchReaderFromStream { + stream: Receiver, + schema: SchemaRef, +} + +impl RecordBatchReaderFromStream { + fn new(stream: Receiver, schema: SchemaRef) -> Self { + Self { stream, schema } + } +} + +impl Iterator for RecordBatchReaderFromStream { + type Item = Result; + + fn next(&mut self) -> Option { + self.stream.blocking_recv().map(Ok) + } +} + +impl RecordBatchReader for RecordBatchReaderFromStream { + fn schema(&self) -> SchemaRef { + Arc::clone(&self.schema) + } +} diff --git a/core/src/duckdb/creator.rs b/core/src/duckdb/creator.rs index b0b02147..eae09357 100644 --- a/core/src/duckdb/creator.rs +++ b/core/src/duckdb/creator.rs @@ -297,6 +297,7 @@ impl TableManager { /// Inserts data from this table into the target table. #[tracing::instrument(level = "debug", skip_all)] + #[allow(dead_code)] pub(crate) fn insert_into( &self, table: &TableManager, diff --git a/core/src/lib.rs b/core/src/lib.rs index 2dc546ce..7d53dde3 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -21,6 +21,8 @@ pub mod odbc; pub mod postgres; #[cfg(feature = "sqlite")] pub mod sqlite; +#[cfg(feature = "adbc")] +pub mod adbc; #[derive(Debug, Snafu)] pub enum Error { diff --git a/core/src/sql/db_connection_pool/adbcpool.rs b/core/src/sql/db_connection_pool/adbcpool.rs new file mode 100644 index 00000000..b28268af --- /dev/null +++ b/core/src/sql/db_connection_pool/adbcpool.rs @@ -0,0 +1,249 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use adbc_core::{Connection, Database}; +use arrow::array::RecordBatch; +use async_trait::async_trait; +use r2d2_adbc::AdbcConnectionManager; +use secrecy::{ExposeSecret, SecretString}; +use sha2::{Digest, Sha256}; +use snafu::{prelude::*, ResultExt}; +use std::collections::HashMap; +use std::sync::Arc; + +use crate::sql::db_connection_pool::dbconnection::{ + adbcconn::AdbcDbConnection, DbConnection, SyncDbConnection, +}; + +use super::{DbConnectionPool, JoinPushDown, Result}; + +#[derive(Debug, Snafu)] +pub enum Error { + #[snafu(display("ADBC Database initialization failed.\n{source}"))] + AdbcInitializationError { source: adbc_core::error::Error }, + + #[snafu(display("ADBC Connection failed to execute.\n{source}"))] + ConnectionExecutionError { source: adbc_core::error::Error }, + + #[snafu(display( + "ADBC connection failed.\n{source}\nAdjust the connection pool parameters or sufficient capacity." + ))] + ConnectionPoolError { source: r2d2::Error }, +} + +pub struct AdbcConnectionPoolBuilder +where + D: Database + Send, + D::ConnectionType: Connection + Send + Sync, +{ + database: D, + connection_options: Option>, + max_size: Option, + min_idle: Option, +} + +pub fn hash_db_options( + driver: &str, + db_options: &HashMap, + conn_options: &HashMap, +) -> String { + let mut hasher = Sha256::new(); + hasher.update(driver.as_bytes()); + db_options.iter().for_each(|(key, value)| { + hasher.update(key.as_bytes()); + hasher.update(value.expose_secret().as_bytes()); + }); + conn_options.iter().for_each(|(key, value)| { + hasher.update(key.as_bytes()); + hasher.update(value.as_bytes()); + }); + hasher.finalize().iter().fold(String::new(), |mut hash, b| { + hash.push_str(&format!("{b:02x}")); + hash + }) +} + +impl AdbcConnectionPoolBuilder +where + D: Database + Send, + D::ConnectionType: Connection + Send + Sync, +{ + pub fn new(database: D) -> Self { + Self { + database, + connection_options: None, + max_size: None, + min_idle: None, + } + } + + pub fn with_conn_options>( + mut self, + connection_options: I, + ) -> Self { + if let Some(existing) = &mut self.connection_options { + existing.extend(connection_options); + } else { + self.connection_options = Some(connection_options.into_iter().collect()); + } + + self + } + + pub fn with_max_size(mut self, size: Option) -> Self { + self.max_size = size; + self + } + + pub fn with_min_idle(mut self, size: Option) -> Self { + self.min_idle = size; + self + } + + pub fn build(self) -> Result> { + let mut pool_builder = r2d2::Pool::builder(); + + if let Some(size) = self.max_size { + pool_builder = pool_builder.max_size(size); + } + if self.min_idle.is_some() { + pool_builder = pool_builder.min_idle(self.min_idle); + } + + // let opts = ; + let database = self.database; + let manager: AdbcConnectionManager; + if let Some(opts) = self.connection_options { + manager = AdbcConnectionManager::with_options(database, opts); + } else { + manager = AdbcConnectionManager::new(database); + } + let pool = Arc::new(pool_builder.build(manager).context(ConnectionPoolSnafu)?); + Ok(ADBCPool { pool }) + } +} + +#[derive(Clone)] +pub struct ADBCPool +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + pool: Arc>>, +} + +impl std::fmt::Debug for ADBCPool +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "ADBCPool") + } +} + +impl ADBCPool +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + pub fn new(db: D, conn_options: Option>) -> Result { + let builder = AdbcConnectionPoolBuilder::new(db); + let builder = if let Some(opts) = conn_options { + builder.with_conn_options(opts) + } else { + builder + }; + builder.build() + } + + pub fn connect_sync( + self: Arc, + ) -> Result>, RecordBatch>>> + { + let pool = Arc::clone(&self.pool); + let conn: r2d2::PooledConnection> = + pool.get().context(ConnectionPoolSnafu)?; + + Ok(Box::new(AdbcDbConnection::new(conn))) + } +} + +#[async_trait] +impl DbConnectionPool>, RecordBatch> + for ADBCPool +where + D: Database + Send + 'static, + D::ConnectionType: Connection + Send + Sync, +{ + async fn connect( + &self, + ) -> Result>, RecordBatch>>> + { + let pool = Arc::clone(&self.pool); + let conn: r2d2::PooledConnection> = + pool.get().context(ConnectionPoolSnafu)?; + + Ok(Box::new(AdbcDbConnection::new(conn))) + } + + fn join_push_down(&self) -> JoinPushDown { + // TODO: make this configurable + JoinPushDown::Disallow + } +} + +#[cfg(test)] +mod test { + use super::*; + use adbc_core::options::{AdbcVersion, OptionDatabase}; + use adbc_core::{Driver, LOAD_FLAG_DEFAULT}; + use adbc_driver_manager::{ManagedDatabase, ManagedDriver}; + + fn get_db() -> ManagedDatabase { + let mut driver = ManagedDriver::load_from_name( + "duckdb", + None, + AdbcVersion::V110, + LOAD_FLAG_DEFAULT, + None, + ) + .unwrap(); + + driver + .new_database_with_opts([(OptionDatabase::Other("path".to_string()), ":memory:".into())]) + .unwrap() + } + + #[tokio::test] + async fn test_adbc_connection_pool() { + let pool = + ADBCPool::new(get_db(), None).expect("ADBC Connection pool to be created"); + + let conn = pool + .connect() + .await + .expect("ADBC Connection should be established"); + + let conn = conn + .as_sync() + .expect("ADBC Connection should be synchronous"); + + conn.execute("CREATE TABLE test (a INTEGER, b VARCHAR)", &[]) + .expect("Table should be created"); + conn.execute("INSERT INTO test VALUES (1, 'a')", &[]) + .expect("Data should be inserted"); + + conn.query_arrow("SELECT * FROM test", &[], None) + .expect("Query should succeed"); + } +} diff --git a/core/src/sql/db_connection_pool/dbconnection.rs b/core/src/sql/db_connection_pool/dbconnection.rs index b1867a3d..94590026 100644 --- a/core/src/sql/db_connection_pool/dbconnection.rs +++ b/core/src/sql/db_connection_pool/dbconnection.rs @@ -17,6 +17,8 @@ pub mod odbcconn; pub mod postgresconn; #[cfg(feature = "sqlite")] pub mod sqliteconn; +#[cfg(feature = "adbc")] +pub mod adbcconn; pub type GenericError = Box; type Result = std::result::Result; diff --git a/core/src/sql/db_connection_pool/dbconnection/adbcconn.rs b/core/src/sql/db_connection_pool/dbconnection/adbcconn.rs new file mode 100644 index 00000000..b29facd4 --- /dev/null +++ b/core/src/sql/db_connection_pool/dbconnection/adbcconn.rs @@ -0,0 +1,338 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use adbc_core::Statement; +use adbc_core::{Connection, Database}; +use async_stream::stream; +use datafusion::physical_plan::stream::RecordBatchStreamAdapter; +use std::any::Any; +use std::cell::RefCell; + +use adbc_core::options::ObjectDepth; +use arrow::array::{AsArray, RecordBatch, RecordBatchReader, RecordBatchIterator}; +use arrow_schema::SchemaRef; +use datafusion::error::DataFusionError; +use datafusion::execution::SendableRecordBatchStream; +use datafusion::sql::TableReference; +use r2d2_adbc::AdbcConnectionManager; +use snafu::{prelude::*, ResultExt}; +use std::marker::Send; +use std::marker::Sync; +use std::sync::{Arc, Mutex}; +use tokio::sync::mpsc::Sender; + +use crate::sql::db_connection_pool::runtime::run_sync_with_tokio; + +use super::DbConnection; +use super::Result; +use super::SyncDbConnection; + +#[derive(Debug, Snafu)] +pub enum Error { + #[snafu(display("ADBC Error: {source}"))] + AdbcError { source: adbc_core::error::Error }, + + #[snafu(display( + "An unexpected error occurred.\n{message}\nVerify the configuration and try again" + ))] + ChannelError { message: String }, +} + +pub struct AdbcDbConnection +where + D: Database + Send + 'static, + D::ConnectionType: Send + Sync, +{ + pub conn: Arc>>>>, +} + +impl DbConnection>, RecordBatch> + for AdbcDbConnection +where + D: Database + Send + 'static, + D::ConnectionType: Send + Sync, +{ + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { + self + } + + fn as_sync( + &self, + ) -> Option<&dyn SyncDbConnection>, RecordBatch>> + { + Some(self) + } +} + +fn blocking_channel_send(channel: &Sender, item: T) -> Result<()> { + match channel.blocking_send(item) { + Ok(()) => Ok(()), + Err(e) => Err(Error::ChannelError { + message: format!("{e}"), + } + .into()), + } +} + +impl SyncDbConnection>, RecordBatch> + for AdbcDbConnection +where + D: Database + Send + 'static, + D::ConnectionType: Send + Sync, +{ + fn new(conn: r2d2::PooledConnection>) -> Self { + AdbcDbConnection { + conn: Arc::new(Mutex::new(RefCell::new(conn))), + } + } + + fn tables(&self, schema: &str) -> Result, super::Error> { + let conn_mx = self.conn.lock().unwrap(); + let conn = conn_mx.borrow(); + let result = conn + .get_objects(ObjectDepth::Tables, None, Some(schema), None, None, None) + .boxed() + .context(super::UnableToGetTablesSnafu)?; + + let mut tables = vec![]; + for batch in result { + // Process each batch to extract table names + // + // Schema is as follows: + // 0: CATALOG_NAME + // 1: list + // + // DB_SCHEMA_SCHEMA is as follows: + // 0: SCHEMA_NAME + // 1: list + // + // TABLE_INFO is as follows: + // 0: TABLE_NAME + // 1: TABLE_TYPE + // 2: list + // 3: list + // + // so we need to drill down to the table names + let b = batch.boxed().context(super::UnableToGetTablesSnafu)?; + b.column(1).as_list::().iter().for_each(|value| { + if let Some(db_schema_schema) = value { + db_schema_schema + .as_struct() + .column(1) + .as_list::() + .iter() + .for_each(|table_info| { + if let Some(table_struct) = table_info { + tables.extend( + table_struct + .as_struct() + .column(0) + .as_string::() + .iter() + .flatten() + .map(|name| name.to_string()), + ); + } + }) + } + }) + } + + Ok(tables) + } + + fn schemas(&self) -> Result, super::Error> { + let conn_mx = self.conn.lock().unwrap(); + let conn = conn_mx.borrow(); + + let result = conn + .get_objects(ObjectDepth::Schemas, None, None, None, None, None) + .boxed() + .context(super::UnableToGetSchemaSnafu)?; + + let mut schemas = vec![]; + for batch in result { + // Process each batch to extract schema names + // + // Schema is as follows: + // 0: CATALOG_NAME + // 1: list + // + // DB_SCHEMA_SCHEMA is as follows: + // 0: SCHEMA_NAME + // 1: list + // + // so we need to drill down to the schema names + let b = batch.boxed().context(super::UnableToGetSchemaSnafu)?; + b.column(1).as_list::().iter().for_each(|value| { + if let Some(db_schema_schema) = value { + db_schema_schema + .as_struct() + .column(0) + .as_string::() + .iter() + .flatten() + .for_each(|name| schemas.push(name.to_string())); + } + }); + } + Ok(schemas) + } + + fn get_schema(&self, table_reference: &TableReference) -> Result { + let conn_mx = self.conn.lock().unwrap(); + let conn = conn_mx.borrow(); + + let schema = conn + .get_table_schema( + table_reference.catalog(), + table_reference.schema(), + table_reference.table(), + ) + .boxed() + .context(super::UnableToGetSchemaSnafu)?; + + Ok(Arc::new(schema)) + } + + fn query_arrow( + &self, + sql: &str, + params: &[RecordBatch], + _projected_schema: Option, + ) -> Result { + let (batch_tx, mut batch_rx) = tokio::sync::mpsc::channel::(4); + + let create_stream = || -> Result { + let schema: SchemaRef; + { + let conn_mx = self.conn.lock().unwrap(); + let mut conn = conn_mx.borrow_mut(); + let mut stmt = conn + .new_statement() + .boxed() + .context(super::UnableToQueryArrowSnafu)?; + stmt.set_sql_query(sql)?; + + match stmt.execute_schema() { + Ok(s) => schema = s.into(), + // not all drivers implement execute_schema, so fall back to executing + // with LIMIT 0 to get the schema. + Err(_) => { + stmt.set_sql_query(format!( + "WITH fetch_schema AS ({sql}) SELECT * FROM fetch_schema LIMIT 0" + ))?; + let result = stmt + .execute() + .boxed() + .context(super::UnableToQueryArrowSnafu)?; + schema = result.schema(); + } + } + } + + let cloned_conn = Arc::clone(&self.conn); + + let sql_owned = sql.to_string(); + let params_owned = params.to_vec(); + + let join_handle = tokio::task::spawn_blocking(move || { + let conn_mx = cloned_conn.lock().unwrap(); + let mut conn = conn_mx.borrow_mut(); + let mut stmt = conn + .new_statement() + .boxed() + .context(super::UnableToQueryArrowSnafu)?; + stmt.set_sql_query(&sql_owned)?; + + match params_owned.len() { + 0 => {} + 1 => stmt.bind(params_owned[0].clone())?, + _ => { + let param_schema = params_owned[0].schema(); + let reader = RecordBatchIterator::new( + params_owned.into_iter().map(Ok), + param_schema, + ); + + stmt.bind_stream(Box::new(reader))?; + } + } + + let results = stmt + .execute() + .boxed() + .context(super::UnableToQueryArrowSnafu)?; + for batch in results { + let b = batch.boxed().context(super::UnableToQueryArrowSnafu)?; + blocking_channel_send(&batch_tx, b)?; + } + Ok::<_, Box>(()) + }); + + let output_stream = stream! { + while let Some(batch) = batch_rx.recv().await { + yield Ok(batch); + } + + match join_handle.await { + Ok(Ok(())) => {}, + Ok(Err(task_error)) => { + yield Err(DataFusionError::Execution(format!( + "Failed to execute ADBC query: {task_error}" + ))) + }, + Err(join_error) => { + yield Err(DataFusionError::Execution(format!( + "Failed to execute ADBC query: {join_error}" + ))) + }, + } + }; + + Ok(Box::pin(RecordBatchStreamAdapter::new( + schema, + output_stream, + ))) + }; + + run_sync_with_tokio(create_stream) + } + + fn execute(&self, sql: &str, params: &[RecordBatch]) -> Result { + let conn_mx = self.conn.lock().unwrap(); + let mut conn = conn_mx.borrow_mut(); + let mut stmt = conn.new_statement().context(AdbcSnafu)?; + stmt.set_sql_query(sql)?; + + let params_owned = params.to_vec(); + match params.len() { + 0 => {} + 1 => stmt.bind(params_owned[0].clone())?, + _ => { + let param_schema = params_owned[0].schema(); + let reader = + RecordBatchIterator::new(params_owned.into_iter().map(Ok), param_schema); + + stmt.bind_stream(Box::new(reader))?; + } + } + + let count: Option = stmt.execute_update().context(AdbcSnafu)?; + + Ok(count.unwrap_or(-1) as u64) + } +} diff --git a/core/src/sql/db_connection_pool/mod.rs b/core/src/sql/db_connection_pool/mod.rs index 9fa98bfc..535110e9 100644 --- a/core/src/sql/db_connection_pool/mod.rs +++ b/core/src/sql/db_connection_pool/mod.rs @@ -17,6 +17,8 @@ pub mod postgrespool; pub mod runtime; #[cfg(feature = "sqlite")] pub mod sqlitepool; +#[cfg(feature = "adbc")] +pub mod adbcpool; pub type Error = Box; type Result = std::result::Result; diff --git a/core/tests/adbc/mod.rs b/core/tests/adbc/mod.rs new file mode 100644 index 00000000..037d483f --- /dev/null +++ b/core/tests/adbc/mod.rs @@ -0,0 +1,154 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::arrow_record_batch_gen::*; +use adbc_core::options::{AdbcVersion, OptionDatabase, OptionValue}; +use adbc_core::{Driver, LOAD_FLAG_DEFAULT}; +use adbc_driver_manager::{ManagedDatabase, ManagedDriver}; +use arrow::array::RecordBatch; +use arrow_schema::SchemaRef; +use datafusion::physical_plan::collect; +use datafusion::{catalog::memory::MemorySourceConfig, prelude::SessionContext}; + +#[cfg(feature = "adbc-federation")] +use datafusion_federation::schema_cast::record_convert::try_cast_to; + +use datafusion_table_providers::{ + adbc::AdbcTableFactory, sql::db_connection_pool::adbcpool::ADBCPool, +}; +use rstest::rstest; +use std::sync::Arc; + +fn get_db(driver_name: &str) -> ManagedDatabase { + let mut driver = ManagedDriver::load_from_name( + driver_name, + None, + AdbcVersion::V110, + LOAD_FLAG_DEFAULT, + None, + ) + .unwrap(); + + driver + .new_database_with_opts( + [( + OptionDatabase::Uri, + OptionValue::String(":memory:".to_string()), + )], + ) + .unwrap() +} + +async fn arrow_adbc_round_trip( + arrow_record: RecordBatch, + _source_schema: SchemaRef, + table_name: &str, +) { + let adbc_pool = + Arc::new(ADBCPool::new(get_db("sqlite"), None).expect("Failed to create ADBC pool")); + + let table_factory = AdbcTableFactory::new(adbc_pool.clone()); + let ctx = SessionContext::new(); + let mem_exec = MemorySourceConfig::try_new_exec( + &[vec![arrow_record.clone()]], + arrow_record.schema(), + None, + ) + .expect("Failed to create memory source execution plan"); + + let create_plan = table_factory + .create_from(&ctx.state(), mem_exec, table_name.into()) + .await + .expect("Failed to create table"); + + let _ = collect(create_plan, ctx.task_ctx()) + .await + .expect("Table creation failed"); + + let table_provider = table_factory + .table_provider(table_name.into(), None) + .await + .expect("Failed to register table provider"); + ctx.register_table(table_name, Arc::clone(&table_provider)) + .expect("Failed to register table"); + + let select_sql = format!("SELECT * FROM {table_name}"); + let df = ctx + .sql(&select_sql) + .await + .expect("DataFrame should be created from query"); + + let record_batch = df.collect().await.expect("RecordBatch should be collected"); + + #[cfg(feature = "adbc-federation")] + let casted_record = try_cast_to(record_batch[0].clone(), _source_schema).unwrap(); + + tracing::debug!("Original Arrow Record Batch: {:?}", arrow_record.columns()); + tracing::debug!( + "Adbc returned Record Batch: {:?}", + record_batch[0].columns() + ); + + // Check results + assert_eq!(record_batch.len(), 1); + assert_eq!(record_batch[0].num_rows(), arrow_record.num_rows()); + assert_eq!(record_batch[0].num_columns(), arrow_record.num_columns()); + #[cfg(feature = "adbc-federation")] + assert_eq!(casted_record, arrow_record); +} + +#[rstest] +#[case::binary(get_arrow_binary_record_batch(), "binary")] +#[case::int(get_arrow_int_record_batch(), "int")] +#[case::float(get_arrow_float_record_batch(), "float")] +#[case::utf8(get_arrow_utf8_record_batch(), "utf8")] +#[ignore] // sqlite does not support Time32 / Time64 +#[case::time(get_arrow_time_record_batch(), "time")] +#[case::timestamp(get_arrow_timestamp_record_batch(), "timestamp")] +#[ignore] // sqlite does not support Date32 / Date64 +#[case::date(get_arrow_date_record_batch(), "date")] +#[ignore] // sqlite does not support Struct type +#[case::struct_type(get_arrow_struct_record_batch(), "struct")] +#[ignore] // sqlite does not support Decimal256 +#[case::decimal(get_arrow_decimal_record_batch(), "decimal")] +#[ignore] +// Interval(DayTime) is not supported: / "Conversion Error: Could not convert Interval to Microsecond" +#[case::interval(get_arrow_interval_record_batch(), "interval")] +#[ignore] // TimeUnit::Nanosecond is not correctly supported; written values are zeros +#[case::duration(get_arrow_duration_record_batch(), "duration")] +#[ignore] // sqlite does not support List type +#[case::list(get_arrow_list_record_batch(), "list")] +#[case::null(get_arrow_null_record_batch(), "null")] +#[ignore] // sqlite does not support list type +#[case::list_of_structs(get_arrow_list_of_structs_record_batch(), "list_of_structs")] +#[ignore] // sqlite does not support list type +#[case::list_of_fixed_size_lists( + get_arrow_list_of_fixed_size_lists_record_batch(), + "list_of_fixed_size_lists" +)] +#[ignore] // sqlite does not support list type +#[case::list_of_lists(get_arrow_list_of_lists_record_batch(), "list_of_lists")] +#[ignore] // sqlite does not support map type +#[case::map(get_arrow_map_record_batch(), "map")] +#[case::dictionary(get_arrow_dictionary_array_record_batch(), "dictionary")] +#[test_log::test(tokio::test)] +async fn test_arrow_adbc_roundtrip( + #[case] arrow_result: (RecordBatch, SchemaRef), + #[case] table_name: &str, +) { + arrow_adbc_round_trip( + arrow_result.0, + arrow_result.1, + &format!("{table_name}_types"), + ) + .await; +} diff --git a/core/tests/integration.rs b/core/tests/integration.rs index c3c5516a..02dd2041 100644 --- a/core/tests/integration.rs +++ b/core/tests/integration.rs @@ -14,6 +14,8 @@ mod mysql; mod postgres; #[cfg(feature = "sqlite")] mod sqlite; +#[cfg(feature = "adbc")] +mod adbc; fn container_registry() -> String { std::env::var("CONTAINER_REGISTRY") diff --git a/python/Cargo.toml b/python/Cargo.toml index 9064ef99..0855e2dc 100644 --- a/python/Cargo.toml +++ b/python/Cargo.toml @@ -36,7 +36,7 @@ default = [ "mysql", "postgres", "odbc", - "flight", + "flight", ] clickhouse = ["datafusion-table-providers/clickhouse-federation"] duckdb = ["dep:duckdb", "datafusion-table-providers/duckdb-federation"]