diff --git a/Cargo.lock b/Cargo.lock index 2ac88a06c..e86c98731 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,7 +45,7 @@ dependencies = [ "actix-service", "actix-tls", "actix-utils", - "base64", + "base64 0.22.1", "bitflags 2.10.0", "brotli", "bytes", @@ -81,7 +81,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -218,7 +218,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -229,7 +229,7 @@ checksum = "456348ed9dcd72a13a1f4a660449fafdecee9ac8205552e286809eb5b0b29bd3" dependencies = [ "actix-utils", "actix-web", - "base64", + "base64 0.22.1", "futures-core", "futures-util", "log", @@ -281,7 +281,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ac4d6e04e97fe707286509b4f338e99c5fb7249c770e1da074af5e27faa96b3" dependencies = [ "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -483,9 +483,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d441fdda254b65f3e9025910eb2c2066b6295d9c8ed409522b8d2ace1ff8574c" +checksum = "61d285d16bce7d0be61912f7928342b673067b6b7d7ef6cc179258ba7de1fecf" dependencies = [ "arrow-arith", "arrow-array", @@ -504,9 +504,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced5406f8b720cc0bc3aa9cf5758f93e8593cda5490677aa194e4b4b383f9a59" +checksum = "757ef1836251e88222542a7da2623bc1c9cb9e20afefa6db2c41e79991cd91d4" dependencies = [ "arrow-array", "arrow-buffer", @@ -518,9 +518,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772bd34cacdda8baec9418d80d23d0fb4d50ef0735685bd45158b83dfeb6e62d" +checksum = "bc9a4a4b2b5ecd0e04df03471661cb61f28bed3c7fd50994715129b01b2edb97" dependencies = [ "ahash", "arrow-buffer", @@ -529,7 +529,7 @@ dependencies = [ "chrono", "chrono-tz", "half", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "num-complex", "num-integer", "num-traits", @@ -537,21 +537,21 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898f4cf1e9598fdb77f356fdf2134feedfd0ee8d5a4e0a5f573e7d0aec16baa4" +checksum = "c12b576ef18c1deb80925a248b25ad84f419198d791b8e293fc6aaa60441fe90" dependencies = [ "bytes", "half", - "num-bigint", + "num-bigint 0.5.1", "num-traits", ] [[package]] name = "arrow-cast" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0127816c96533d20fc938729f48c52d3e48f99717e7a0b5ade77d742510736d" +checksum = "68338a9096a5dc9bc11927c58c43a8526d96bf6abd2012ef6c0c9f505991cc79" dependencies = [ "arrow-array", "arrow-buffer", @@ -560,7 +560,7 @@ dependencies = [ "arrow-schema", "arrow-select", "atoi", - "base64", + "base64 0.23.1", "chrono", "comfy-table", "half", @@ -571,9 +571,9 @@ dependencies = [ [[package]] name = "arrow-csv" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca025bd0f38eeecb57c2153c0123b960494138e6a957bbda10da2b25415209fe" +checksum = "25011b52b346407d497ef0030e12b45e4f2d0cc279efc09c4f3d09106db30e36" dependencies = [ "arrow-array", "arrow-cast", @@ -586,9 +586,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d10beeab2b1c3bb0b53a00f7c944a178b622173a5c7bcabc3cb45d90238df4" +checksum = "723fe4aeed7604e00b9883a465af4ff0a0e6c44c03e41a68c3d1cbc403e0e44d" dependencies = [ "arrow-buffer", "arrow-schema", @@ -599,16 +599,17 @@ dependencies = [ [[package]] name = "arrow-flight" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302b2e036335f3f04d65dad3f74ff1f2aae6dc671d6aa04dc6b61193761e16fb" +checksum = "2bebfacc9d71f0728f6774164e4d4254b5e504d2b46812d0512d8290ec119a64" dependencies = [ "arrow-array", "arrow-buffer", "arrow-cast", + "arrow-data", "arrow-ipc", "arrow-schema", - "base64", + "base64 0.23.1", "bytes", "futures", "prost 0.14.1", @@ -619,9 +620,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "609a441080e338147a84e8e6904b6da482cefb957c5cdc0f3398872f69a315d0" +checksum = "149437b14371f5b9ec60f5ddc751483ae99d7a7072653c0075e5e469156eea7b" dependencies = [ "arrow-array", "arrow-buffer", @@ -635,15 +636,16 @@ dependencies = [ [[package]] name = "arrow-json" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ead0914e4861a531be48fe05858265cf854a4880b9ed12618b1d08cba9bebc8" +checksum = "f18b9123ccfec418a663f821c9a034af339711678c11ffe00d3ec07da5ff9f7e" dependencies = [ "arrow-array", "arrow-buffer", "arrow-cast", - "arrow-data", + "arrow-ord", "arrow-schema", + "arrow-select", "chrono", "half", "indexmap", @@ -659,9 +661,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a7ba279b20b52dad300e68cfc37c17efa65e68623169076855b3a9e941ca5" +checksum = "e6c08dff0686cf23ca4f562803f191ccbeb726dbae6309cd4b4aaf65e0f2c979" dependencies = [ "arrow-array", "arrow-buffer", @@ -672,9 +674,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14fe367802f16d7668163ff647830258e6e0aeea9a4d79aaedf273af3bdcd3e" +checksum = "bbec439386df71ad570e6758a946111322b9e9dc8db83b5527321f0b4c9119c2" dependencies = [ "arrow-array", "arrow-buffer", @@ -685,9 +687,9 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30a1365d7a7dc50cc847e54154e6af49e4c4b0fddc9f607b687f29212082743" +checksum = "e6fed2ca0d1eade57e811cbe73b98ad50cc08a1183e13b2d2aa43a7df593f40e" dependencies = [ "serde", "serde_core", @@ -696,9 +698,9 @@ dependencies = [ [[package]] name = "arrow-select" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78694888660a9e8ac949853db393af2a8b8fc82c19ce333132dfa2e72cc1a7fe" +checksum = "466b19cf75130b891dc1b23a84b343c714c62c64c9c62e365c76aa0ff90a53fb" dependencies = [ "ahash", "arrow-array", @@ -710,9 +712,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e04a01f8bb73ce54437514c5fd3ee2aa3e8abe4c777ee5cc55853b1652f79e" +checksum = "c838a25bb3691e919e0f617616ac51a4ff8517a952e29ca133cf0c22b2ce65b1" dependencies = [ "arrow-array", "arrow-buffer", @@ -751,7 +753,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -851,7 +853,7 @@ dependencies = [ "aws-sdk-sts", "aws-sigv4", "aws-types", - "base64", + "base64 0.22.1", "chrono", "futures", "thiserror 1.0.69", @@ -1125,7 +1127,7 @@ checksum = "221eaa237ddf1ca79b60d1372aad77e47f9c0ea5b3ce5099da8c61d027dc77b3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1256,6 +1258,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64-simd" version = "0.8.0" @@ -1280,7 +1288,7 @@ checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" dependencies = [ "autocfg", "libm", - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits", ] @@ -1300,7 +1308,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 2.0.117", ] [[package]] @@ -1311,7 +1319,7 @@ checksum = "7e28fc7c56c61743a01d0d1b73e4fed68b8a4f032ea3a2d4bb8c6520a33fc05a" dependencies = [ "chrono", "data-encoding", - "num-bigint", + "num-bigint 0.4.6", "num-traits", "once_cell", "ring", @@ -1537,9 +1545,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -1615,7 +1623,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1970,7 +1978,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.117", ] [[package]] @@ -1981,7 +1989,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2006,14 +2014,13 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "datafusion" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93db0e623840612f7f2cd757f7e8a8922064192363732c88692e0870016e141b" +checksum = "96f76f0167ed0842b29a3d1e41be3c034c0a46409a3a703cc4cc84ee8c24abf4" dependencies = [ "arrow", "arrow-schema", "async-trait", - "bytes", "bzip2", "chrono", "datafusion-catalog", @@ -2043,14 +2050,13 @@ dependencies = [ "datafusion-sql", "flate2", "futures", - "itertools 0.14.0", + "indexmap", + "itertools 0.15.0", "liblzma", "log", "object_store", "parking_lot", "parquet", - "rand 0.9.4", - "regex", "sqlparser", "tempfile", "tokio", @@ -2061,9 +2067,9 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37cefde60b26a7f4ff61e9d2ff2833322f91df2b568d7238afe67bde5bdffb66" +checksum = "d79ec3460f6ed5c58f9b3f2d873fbc77748b82653bff1b4cdaf06de33bb4e05f" dependencies = [ "arrow", "async-trait", @@ -2077,7 +2083,7 @@ dependencies = [ "datafusion-physical-plan", "datafusion-session", "futures", - "itertools 0.14.0", + "itertools 0.15.0", "log", "object_store", "parking_lot", @@ -2086,9 +2092,9 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e112307715d6a7a331111a4c2330ff54bc237183511c319e3708a4cff431fb" +checksum = "b48cef241e2efcfd496fe05ae4d0d5de20793451862faefe406c397a467e12d4" dependencies = [ "arrow", "async-trait", @@ -2102,41 +2108,44 @@ dependencies = [ "datafusion-physical-expr-common", "datafusion-physical-plan", "futures", - "itertools 0.14.0", + "itertools 0.15.0", "log", "object_store", + "percent-encoding", ] [[package]] name = "datafusion-common" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d72a11ca44a95e1081870d3abb80c717496e8a7acb467a1d3e932bb636af5cc2" +checksum = "3f72810485975c258f1b4d00baab31728470676c60c5546f366ebd0d99f05ab6" dependencies = [ - "ahash", "arrow", "arrow-ipc", + "arrow-schema", "chrono", + "foldhash 0.2.0", "half", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", - "itertools 0.14.0", + "itertools 0.15.0", "libc", "log", + "num-traits", "object_store", "parquet", - "paste", "recursive", "sqlparser", "tokio", + "uuid", "web-time", ] [[package]] name = "datafusion-common-runtime" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89f4afaed29670ec4fd6053643adc749fe3f4bc9d1ce1b8c5679b22c67d12def" +checksum = "533c28e75dba52f41bde187d23a1cb24ab91c7c097966824fa471e67b60320ea" dependencies = [ "futures", "log", @@ -2145,9 +2154,9 @@ dependencies = [ [[package]] name = "datafusion-datasource" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9fb386e1691355355a96419978a0022b7947b44d4a24a6ea99f00b6b485cbb6" +checksum = "5b00a1fa0da26f6087136a82fea7f13c76a672cbab452d4086952a7cf770a19b" dependencies = [ "arrow", "async-compression", @@ -2167,10 +2176,11 @@ dependencies = [ "flate2", "futures", "glob", - "itertools 0.14.0", + "itertools 0.15.0", "liblzma", "log", "object_store", + "parking_lot", "rand 0.9.4", "tokio", "tokio-util", @@ -2180,9 +2190,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-arrow" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa6c52cfed0734c5f93754d1c0175f558175248bf686c944fb05c373e5fc096" +checksum = "5ad17ec881bff2ed7768b4bfe971d3efbf3473f2fd1f9d365447bccbdf908678" dependencies = [ "arrow", "arrow-ipc", @@ -2197,16 +2207,16 @@ dependencies = [ "datafusion-physical-plan", "datafusion-session", "futures", - "itertools 0.14.0", + "itertools 0.15.0", "object_store", "tokio", ] [[package]] name = "datafusion-datasource-csv" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503f29e0582c1fc189578d665ff57d9300da1f80c282777d7eb67bb79fb8cdca" +checksum = "b5345285b0c3eaab412e7539b706973c083bd7e5bce575de5e0a3da488d08d1d" dependencies = [ "arrow", "async-trait", @@ -2227,9 +2237,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33804749abc8d0c8cb7473228483cb8070e524c6f6086ee1b85a64debe2b3d2" +checksum = "da02fb9324f56bd8c53f1ee2e949547425cb66f76adc6832b10d44f80a1221d2" dependencies = [ "arrow", "async-trait", @@ -2244,18 +2254,18 @@ dependencies = [ "datafusion-session", "futures", "object_store", - "serde_json", "tokio", "tokio-stream", ] [[package]] name = "datafusion-datasource-parquet" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a8e0365e0e08e8ff94d912f0ababcf9065a1a304018ba90b1fc83c855b4997" +checksum = "3c0b0dc1453952952fd5c69ad1c7f6042176e69ed233011d47e07cf74ed0949e" dependencies = [ "arrow", + "arrow-schema", "async-trait", "bytes", "datafusion-common", @@ -2263,6 +2273,7 @@ dependencies = [ "datafusion-datasource", "datafusion-execution", "datafusion-expr", + "datafusion-functions", "datafusion-functions-aggregate-common", "datafusion-physical-expr", "datafusion-physical-expr-adapter", @@ -2271,7 +2282,7 @@ dependencies = [ "datafusion-pruning", "datafusion-session", "futures", - "itertools 0.14.0", + "itertools 0.15.0", "log", "object_store", "parking_lot", @@ -2281,20 +2292,20 @@ dependencies = [ [[package]] name = "datafusion-doc" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de6ac0df1662b9148ad3c987978b32cbec7c772f199b1d53520c8fa764a87ee" +checksum = "a88fd985bc0550c36f557db69543cc9d6393b1509783520b30e902f23c555da6" [[package]] name = "datafusion-execution" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03c7fbdaefcca4ef6ffe425a5fc2325763bfb426599bb0bf4536466efabe709" +checksum = "a98f1052f91b4991f0bf2ce1e4e36dfbdcda454a956b8c8d562c7c845e8fce1d" dependencies = [ "arrow", "arrow-buffer", "async-trait", - "chrono", + "bytes", "dashmap", "datafusion-common", "datafusion-expr", @@ -2303,18 +2314,22 @@ dependencies = [ "log", "object_store", "parking_lot", + "pin-project-lite", "rand 0.9.4", "tempfile", + "tokio", + "tokio-util", "url", ] [[package]] name = "datafusion-expr" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "574b9b6977fedbd2a611cbff12e5caf90f31640ad9dc5870f152836d94bad0dd" +checksum = "464625a1f0e4b9df552d894fafcc8aac953ebbc8b0fa0acdaf20975fd615040e" dependencies = [ "arrow", + "arrow-schema", "async-trait", "chrono", "datafusion-common", @@ -2324,8 +2339,7 @@ dependencies = [ "datafusion-functions-window-common", "datafusion-physical-expr-common", "indexmap", - "itertools 0.14.0", - "paste", + "itertools 0.15.0", "recursive", "serde_json", "sqlparser", @@ -2333,26 +2347,25 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d7c3adf3db8bf61e92eb90cb659c8e8b734593a8f7c8e12a843c7ddba24b87e" +checksum = "2604994999d5aeca1d1df645ffc98bc787447aaff05dde27aad0342b48fc1fe0" dependencies = [ "arrow", "datafusion-common", "indexmap", - "itertools 0.14.0", - "paste", + "itertools 0.15.0", ] [[package]] name = "datafusion-functions" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28aa4e10384e782774b10e72aca4d93ef7b31aa653095d9d4536b0a3dbc51b6" +checksum = "051e97533e6af53e4aa0a0667cadc886abcaf36c4a5925019c55c0aa4c218fde" dependencies = [ "arrow", "arrow-buffer", - "base64", + "base64 0.23.1", "blake2", "blake3", "chrono", @@ -2363,26 +2376,25 @@ dependencies = [ "datafusion-expr", "datafusion-expr-common", "datafusion-macros", + "datafusion-physical-expr-common", "hex", - "itertools 0.14.0", + "itertools 0.15.0", "log", - "md-5", + "md-5 0.11.0", "memchr", "num-traits", "rand 0.9.4", "regex", - "sha2 0.10.9", - "unicode-segmentation", + "sha2 0.11.0", "uuid", ] [[package]] name = "datafusion-functions-aggregate" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00aa6217e56098ba84e0a338176fe52f0a84cca398021512c6c8c5eff806d0ad" +checksum = "2d0f1bb166d3572b6ed40e1afb2faaacade962abc08c2fcf04babee74681c56b" dependencies = [ - "ahash", "arrow", "datafusion-common", "datafusion-doc", @@ -2393,18 +2405,17 @@ dependencies = [ "datafusion-physical-expr", "datafusion-physical-expr-common", "half", + "hashbrown 0.17.1", "log", "num-traits", - "paste", ] [[package]] name = "datafusion-functions-aggregate-common" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b511250349407db7c43832ab2de63f5557b19a20dfd236b39ca2c04468b50d47" +checksum = "7ed756770f5f98369e181d692fd5ee6b1127ffd7322caba92f3730f9f5c92333" dependencies = [ - "ahash", "arrow", "datafusion-common", "datafusion-expr-common", @@ -2413,9 +2424,9 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef13a858e20d50f0a9bb5e96e7ac82b4e7597f247515bccca4fdd2992df0212a" +checksum = "91173fdb5c0ff2a41169a8ffa1b385b8844f18728747bb0a37e35ad7d5772a4f" dependencies = [ "arrow", "arrow-ord", @@ -2429,34 +2440,34 @@ dependencies = [ "datafusion-functions-aggregate-common", "datafusion-macros", "datafusion-physical-expr-common", - "hashbrown 0.16.1", - "itertools 0.14.0", + "hashbrown 0.17.1", + "itertools 0.15.0", "itoa", "log", - "paste", + "memchr", ] [[package]] name = "datafusion-functions-table" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b40d3f5bbb3905f9ccb1ce9485a9595c77b69758a7c24d3ba79e334ff51e7e" +checksum = "b1bcdfb286a745461b126719c32700777e83df4f17cc44db5d71ebce5731e840" dependencies = [ "arrow", "async-trait", "datafusion-catalog", "datafusion-common", "datafusion-expr", + "datafusion-physical-expr", "datafusion-physical-plan", "parking_lot", - "paste", ] [[package]] name = "datafusion-functions-window" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e88ec9d57c9b685d02f58bfee7be62d72610430ddcedb82a08e5d9925dbfb6" +checksum = "9ec4b508f1f93f00038ba3e737e894ec6c775528b4369413386655ae6125f0fc" dependencies = [ "arrow", "datafusion-common", @@ -2467,14 +2478,13 @@ dependencies = [ "datafusion-physical-expr", "datafusion-physical-expr-common", "log", - "paste", ] [[package]] name = "datafusion-functions-window-common" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8307bb93519b1a91913723a1130cfafeee3f72200d870d88e91a6fc5470ede5c" +checksum = "0b352020834140073fbf5b46ee0ceb926e5074a9d0bcae1dbd91d0586d999cde" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -2482,20 +2492,20 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e367e6a71051d0ebdd29b2f85d12059b38b1d1f172c6906e80016da662226bd" +checksum = "15192effab05d38cce10e92a6fb48c967b5f166b27b7195a165a72b232569c58" dependencies = [ "datafusion-doc", "quote", - "syn", + "syn 3.0.4", ] [[package]] name = "datafusion-optimizer" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e929015451a67f77d9d8b727b2bf3a40c4445fdef6cdc53281d7d97c76888ace" +checksum = "854445d9f7847e1e46089cf61b8d341a64382f14484e912c83a0f23b31216896" dependencies = [ "arrow", "chrono", @@ -2504,7 +2514,7 @@ dependencies = [ "datafusion-expr-common", "datafusion-physical-expr", "indexmap", - "itertools 0.14.0", + "itertools 0.15.0", "log", "recursive", "regex", @@ -2513,11 +2523,10 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b1e68aba7a4b350401cfdf25a3d6f989ad898a7410164afe9ca52080244cb59" +checksum = "671558dad1d2aa253c39c0a4c52515958b99eb91abf649f4b88d5e69cc55282f" dependencies = [ - "ahash", "arrow", "datafusion-common", "datafusion-expr", @@ -2525,11 +2534,10 @@ dependencies = [ "datafusion-functions-aggregate-common", "datafusion-physical-expr-common", "half", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", - "itertools 0.14.0", + "itertools 0.15.0", "parking_lot", - "paste", "petgraph", "recursive", "tokio", @@ -2537,9 +2545,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-adapter" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea22315f33cf2e0adc104e8ec42e285f6ed93998d565c65e82fec6a9ee9f9db4" +checksum = "ffae3d78c2da80ecc829cb58536cc5aca2e99cf1365eda694fc75bfe288861e0" dependencies = [ "arrow", "datafusion-common", @@ -2547,31 +2555,31 @@ dependencies = [ "datafusion-functions", "datafusion-physical-expr", "datafusion-physical-expr-common", - "itertools 0.14.0", + "itertools 0.15.0", ] [[package]] name = "datafusion-physical-expr-common" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04b45ea8ad3ac2d78f2ea2a76053e06591c9629c7a603eda16c10649ecf4362" +checksum = "3d9092ed15e7203fbd0903215172f7c9d18f10d94cba35137f3b3836f7c46f16" dependencies = [ - "ahash", "arrow", "chrono", "datafusion-common", "datafusion-expr-common", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", - "itertools 0.14.0", + "itertools 0.15.0", "parking_lot", + "pin-project", ] [[package]] name = "datafusion-physical-optimizer" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb13397809a425918f608dfe8653f332015a3e330004ab191b4404187238b95" +checksum = "9005b6cf50b57b72d476c6ed4662b04be7ca6be5320ba9127c6d0b7e4218095b" dependencies = [ "arrow", "datafusion-common", @@ -2582,21 +2590,24 @@ dependencies = [ "datafusion-physical-expr-common", "datafusion-physical-plan", "datafusion-pruning", - "itertools 0.14.0", + "datafusion-session", + "itertools 0.15.0", "recursive", ] [[package]] name = "datafusion-physical-plan" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5edc023675791af9d5fb4cc4c24abf5f7bd3bd4dcf9e5bd90ea1eff6976dcc79" +checksum = "5787e4fcff4adc4fce8948441103a99705018b49c8dff0720b650bd7a15da112" dependencies = [ - "ahash", "arrow", + "arrow-data", + "arrow-ipc", "arrow-ord", "arrow-schema", "async-trait", + "bytes", "datafusion-common", "datafusion-common-runtime", "datafusion-execution", @@ -2608,21 +2619,22 @@ dependencies = [ "datafusion-physical-expr-common", "futures", "half", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", - "itertools 0.14.0", + "itertools 0.15.0", "log", "num-traits", "parking_lot", "pin-project-lite", + "serde_json", "tokio", ] [[package]] name = "datafusion-pruning" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac8c76860e355616555081cab5968cec1af7a80701ff374510860bcd567e365a" +checksum = "9e651c8df0b90daed6a7be5921ec0ee379e6909705f063eeff70fd4e35010e4c" dependencies = [ "arrow", "datafusion-common", @@ -2631,16 +2643,16 @@ dependencies = [ "datafusion-physical-expr", "datafusion-physical-expr-common", "datafusion-physical-plan", - "itertools 0.14.0", "log", ] [[package]] name = "datafusion-session" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5412111aa48e2424ba926112e192f7a6b7e4ccb450145d25ce5ede9f19dc491e" +checksum = "fb56667ee38217efab19b895d9a936052cfb47ed438a19663351bdc42a6214a1" dependencies = [ + "arrow-schema", "async-trait", "datafusion-common", "datafusion-execution", @@ -2651,9 +2663,9 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "53.1.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0d133ddf8b9b3b872acac900157f783e7b879fe9a6bccf389abebbfac45ec1" +checksum = "9c29067cb9d32f8e603c45e15d61ea18f1069f96ceafeceb4e18466b8e5b31d9" dependencies = [ "arrow", "bigdecimal", @@ -2666,6 +2678,7 @@ dependencies = [ "recursive", "regex", "sqlparser", + "stacker", ] [[package]] @@ -2695,7 +2708,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2705,7 +2718,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn", + "syn 2.0.117", ] [[package]] @@ -2718,7 +2731,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.117", ] [[package]] @@ -2748,7 +2761,7 @@ dependencies = [ "convert_case 0.6.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "unicode-xid", ] @@ -2762,7 +2775,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.117", "unicode-xid", ] @@ -2818,7 +2831,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3046,7 +3059,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3214,21 +3227,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ "allocator-api2", "equivalent", "foldhash 0.2.0", ] -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - [[package]] name = "hdrhistogram" version = "7.5.4" @@ -3318,7 +3325,7 @@ checksum = "9e2f4ac4534511584b7082657e133dcf3d8727b2f456a6b2a2c3eb02b82c1277" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3363,7 +3370,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e0c088bddfd73005b09807131224ad12c302655436b1270c8346a3ae8aaa37a" dependencies = [ - "base64", + "base64 0.22.1", ] [[package]] @@ -3503,7 +3510,7 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-core", @@ -3692,12 +3699,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - [[package]] name = "ipnet" version = "2.12.0" @@ -3992,9 +3993,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lz4_flex" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db9a0d582c2874f68138a16ce1867e0ffde6c0bb0a0df85e1f36d04146db488a" +checksum = "ecbdfe44b1bd960b68170b417450a628c43f7cf56bb3c5317e61cb230ee7f226" dependencies = [ "twox-hash", ] @@ -4033,11 +4034,21 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "md-5" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +dependencies = [ + "cfg-if", + "digest 0.11.2", +] + [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mime" @@ -4127,6 +4138,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -4190,7 +4211,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4255,7 +4276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622acbc9100d3c10e2ee15804b0caa40e55c933d5aa53814cd520805b7958a49" dependencies = [ "async-trait", - "base64", + "base64 0.22.1", "bytes", "chrono", "form_urlencoded", @@ -4268,7 +4289,7 @@ dependencies = [ "humantime", "hyper", "itertools 0.14.0", - "md-5", + "md-5 0.10.6", "parking_lot", "percent-encoding", "quick-xml", @@ -4306,7 +4327,7 @@ version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0a9d93c04da2d5e11578af6207f163c0816698b24c25a7aefae06a71e2d07bb" dependencies = [ - "base64", + "base64 0.22.1", "biscuit", "chrono", "getrandom 0.3.4", @@ -4401,7 +4422,7 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56d658ba1faf63f7b9c492cfbe6e0ec365440a16132d3270c1065f7b33f1b638" dependencies = [ - "base64", + "base64 0.22.1", "const-hex", "opentelemetry", "opentelemetry_sdk", @@ -4440,15 +4461,6 @@ dependencies = [ "tokio-stream", ] -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "os_pipe" version = "1.2.3" @@ -4496,9 +4508,9 @@ dependencies = [ [[package]] name = "parquet" -version = "58.1.0" +version = "59.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3f9f2205199603564127932b89695f52b62322f541d0fc7179d57c2e1c9877" +checksum = "7065842956a20c2a536924ce8e4d9955f7422451511b9eb7500d7bfe5077e59c" dependencies = [ "ahash", "arrow-array", @@ -4507,24 +4519,22 @@ dependencies = [ "arrow-ipc", "arrow-schema", "arrow-select", - "base64", + "base64 0.23.1", "brotli", "bytes", "chrono", "flate2", "futures", "half", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "lz4_flex", - "num-bigint", + "num-bigint 0.5.1", "num-integer", "num-traits", "object_store", - "paste", "seq-macro", "simdutf8", "snap", - "thrift", "tokio", "twox-hash", "zstd", @@ -4553,7 +4563,7 @@ dependencies = [ "aws-config", "aws-msk-iam-sasl-signer", "aws-types", - "base64", + "base64 0.22.1", "byteorder", "bytes", "cargo_toml", @@ -4741,7 +4751,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4799,7 +4809,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.117", ] [[package]] @@ -4843,7 +4853,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4951,7 +4961,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4964,7 +4974,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5289,7 +5299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" dependencies = [ "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5368,7 +5378,7 @@ version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-core", "futures-util", @@ -5411,7 +5421,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-core", @@ -5475,7 +5485,7 @@ dependencies = [ "regex", "relative-path 1.9.3", "rustc_version", - "syn", + "syn 2.0.117", "unicode-ident", ] @@ -5699,7 +5709,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5748,7 +5758,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5948,9 +5958,9 @@ dependencies = [ [[package]] name = "sqlparser" -version = "0.61.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf5ea8d4d7c808e1af1cbabebca9a2abe603bcefc22294c5b95018d53200cb7" +checksum = "13c6d1b651dc4edf07eead2a0c6c78016ce971bc2c10da5266861b13f25e7cec" dependencies = [ "log", "recursive", @@ -5965,7 +5975,7 @@ checksum = "a6dd45d8fc1c79299bfbb7190e42ccbbdf6a5f52e4a6ad98d92357ea965bd289" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -5976,15 +5986,15 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" -version = "0.1.22" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1f8b29fb42aafcea4edeeb6b2f2d7ecd0d969c48b4cf0d2e64aafc471dd6e59" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" dependencies = [ "cc", "cfg-if", "libc", "psm", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6032,6 +6042,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "sync_wrapper" version = "1.0.2" @@ -6049,7 +6070,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6136,7 +6157,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6147,7 +6168,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6159,17 +6180,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "ordered-float", -] - [[package]] name = "tikv-jemalloc-ctl" version = "0.7.0" @@ -6305,7 +6315,7 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6402,7 +6412,7 @@ checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" dependencies = [ "async-trait", "axum", - "base64", + "base64 0.22.1", "bytes", "flate2", "h2 0.4.12", @@ -6455,7 +6465,7 @@ version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75214f6b6bd28c19aa752ac09fdf0eea546095670906c21fe3940e180a4c43f2" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "http 1.4.0", "http-body 1.0.1", @@ -6554,7 +6564,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6713,7 +6723,7 @@ version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ - "base64", + "base64 0.22.1", "flate2", "log", "once_cell", @@ -6791,7 +6801,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -6960,7 +6970,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wasm-bindgen-shared", ] @@ -7178,7 +7188,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7189,7 +7199,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7200,7 +7210,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7211,7 +7221,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7500,7 +7510,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn", + "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -7516,7 +7526,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -7595,7 +7605,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -7616,7 +7626,7 @@ checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -7636,7 +7646,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -7676,7 +7686,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b6e1091aa..eb780bc70 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,30 +3,30 @@ name = "parseable" version = "3.1.1" authors = ["Parseable Team "] edition = "2024" -rust-version = "1.91.0" +rust-version = "1.94.0" categories = ["logs", "observability", "metrics", "traces"] build = "build.rs" [dependencies] # Arrow and DataFusion ecosystem -arrow = "58.0.0" -arrow-array = "58.0.0" -arrow-flight = { version = "58.0.0", features = [ +arrow = "59.2.0" +arrow-array = "59.2.0" +arrow-flight = { version = "59.2.0", features = [ "tls-aws-lc", "tls-native-roots", ] } -arrow-ipc = { version = "58.0.0", features = ["zstd"] } -arrow-json = "58.0.0" -arrow-schema = { version = "58.0.0", features = ["serde"] } -arrow-select = "58.0.0" -datafusion = "53.0.0" -object_store = { version = "0.13.1", features = [ +arrow-ipc = { version = "59.2.0", features = ["zstd"] } +arrow-json = "59.2.0" +arrow-schema = { version = "59.2.0", features = ["serde"] } +arrow-select = "59.2.0" +datafusion = "55.0.0" +object_store = { version = "0.13.2", features = [ "cloud", "aws", "azure", "gcp", ] } -parquet = "58.0.0" +parquet = "59.2.0" # Web server and HTTP-related actix-cors = "0.7.0" @@ -221,7 +221,7 @@ anyhow = "1.0" [dev-dependencies] rstest = "0.26.1" -arrow = "58.0.0" +arrow = "59.2.0" temp-dir = "0.1.14" [package.metadata.parseable_ui] diff --git a/src/parseable/staging/reader.rs b/src/parseable/staging/reader.rs index a92f89d85..1c9ef4a28 100644 --- a/src/parseable/staging/reader.rs +++ b/src/parseable/staging/reader.rs @@ -297,7 +297,7 @@ mod tests { types::Int64Type, }; use arrow_ipc::writer::{ - CompressionContext, DictionaryTracker, IpcDataGenerator, IpcWriteOptions, StreamWriter, + DictionaryTracker, IpcDataGenerator, IpcWriteContext, IpcWriteOptions, StreamWriter, write_message, }; use arrow_schema::{DataType, Field, Schema}; @@ -389,7 +389,7 @@ mod tests { let options = IpcWriteOptions::default(); let mut dictionary_tracker = DictionaryTracker::new(error_on_replacement); let data_gen = IpcDataGenerator {}; - let mut compression_context = CompressionContext::default(); + let mut compression_context = IpcWriteContext::default(); let mut buf = Vec::new(); let rb1 = rb(1); diff --git a/src/parseable/streams.rs b/src/parseable/streams.rs index 2262f599c..59cbfd26e 100644 --- a/src/parseable/streams.rs +++ b/src/parseable/streams.rs @@ -750,7 +750,7 @@ impl Stream { }; props = props .set_column_bloom_filter_enabled(column_path.clone(), true) - .set_column_bloom_filter_ndv(column_path, METRIC_NAME_BLOOM_FILTER_NDV) + .set_column_bloom_filter_max_ndv(column_path, METRIC_NAME_BLOOM_FILTER_NDV) .set_bloom_filter_position(bloom_filter_position); } sorting_column_vec.push(SortingColumn { diff --git a/src/query/listing_table_builder.rs b/src/query/listing_table_builder.rs index 55ff7065c..4fb8b3fbc 100644 --- a/src/query/listing_table_builder.rs +++ b/src/query/listing_table_builder.rs @@ -25,14 +25,10 @@ use datafusion::{ listing::{ListingOptions, ListingTable, ListingTableConfig, ListingTableUrl}, }, error::DataFusionError, - logical_expr::col, }; use itertools::Itertools; -use crate::{ - OBJECT_STORE_DATA_GRANULARITY, event::DEFAULT_TIMESTAMP_KEY, storage::ObjectStorage, - utils::time::TimeRange, -}; +use crate::{OBJECT_STORE_DATA_GRANULARITY, storage::ObjectStorage, utils::time::TimeRange}; use super::PartialTimeFilter; @@ -121,23 +117,14 @@ impl ListingTableBuilder { self, schema: Arc, map: impl Fn(Vec) -> Vec, - time_partition: Option, ) -> Result>, DataFusionError> { if self.listing.is_empty() { return Ok(None); } - let file_sort_order = vec![vec![ - time_partition - .map_or_else(|| col(DEFAULT_TIMESTAMP_KEY), col) - .sort(true, false), - ]]; let file_format = ParquetFormat::default().with_enable_pruning(true); - let listing_options = ListingOptions::new(Arc::new(file_format)) - .with_file_extension(".parquet") - .with_file_sort_order(file_sort_order) - .with_collect_stat(true) - .with_target_partitions(1); + let listing_options = + ListingOptions::new(Arc::new(file_format)).with_file_extension(".parquet"); let config = ListingTableConfig::new_with_multi_paths(map(self.listing)) .with_listing_options(listing_options) .with_schema(schema); diff --git a/src/query/mod.rs b/src/query/mod.rs index 36a94c37d..3236253b7 100644 --- a/src/query/mod.rs +++ b/src/query/mod.rs @@ -266,6 +266,7 @@ impl Query { let mut config = SessionConfig::default() .with_parquet_pruning(true) .with_prefer_existing_sort(true) + .with_collect_statistics(true) //batch size has been made configurable via environment variable //default value is 20000 .with_batch_size(PARSEABLE.options.execution_batch_size) @@ -278,6 +279,24 @@ impl Query { // Reorder filters allows DF to decide the order of filters minimizing the cost of filter evaluation config.options_mut().execution.parquet.reorder_filters = true; config.options_mut().execution.parquet.binary_as_string = true; + // DataFusion can split Parquet files into row-group morsels and let idle scan + // partitions steal work. Keep these explicit because Parseable commonly scans a small + // number of large files from object storage, where static file groups underutilize CPUs. + config + .options_mut() + .execution + .enable_file_stream_work_stealing = true; + config.options_mut().optimizer.repartition_file_scans = true; + + // Feed changing TopK / aggregate bounds into Parquet pruning. This is especially useful + // for observability queries such as `ORDER BY p_timestamp DESC LIMIT N`. + config + .options_mut() + .optimizer + .enable_dynamic_filter_pushdown = true; + config.options_mut().optimizer.enable_topk_aggregation = true; + config.options_mut().optimizer.enable_topk_repartition = true; + config.options_mut().optimizer.enable_sort_pushdown = true; // Bump footer-read hint from the 512 KiB default. Streams with // many label columns + page-indexed value columns can have // parquet footers in the 1-2 MiB range; sizing the hint above @@ -436,6 +455,7 @@ impl Query { LogicalPlan::Explain(Explain { explain_format: plan.explain_format, verbose: plan.verbose, + show_statistics: plan.show_statistics, stringified_plans: vec![ transformed .data diff --git a/src/query/stream_schema_provider.rs b/src/query/stream_schema_provider.rs index 70aa0df4a..da20e8866 100644 --- a/src/query/stream_schema_provider.rs +++ b/src/query/stream_schema_provider.rs @@ -16,7 +16,7 @@ * */ -use std::{any::Any, collections::HashMap, ops::Bound, sync::Arc}; +use std::{cmp::Reverse, collections::HashMap, ops::Bound, sync::Arc}; use arrow_array::RecordBatch; use arrow_schema::{Schema, SchemaRef, SortOptions}; @@ -37,7 +37,8 @@ use datafusion::{ error::{DataFusionError, Result as DataFusionResult}, execution::object_store::ObjectStoreUrl, logical_expr::{ - BinaryExpr, Operator, TableProviderFilterPushDown, TableType, utils::conjunction, + BinaryExpr, Operator, TableProviderFilterPushDown, TableType, + physical_planning_context::PhysicalPlanningContext, utils::conjunction, }, physical_expr::{LexOrdering, PhysicalSortExpr, create_physical_expr, expressions::col}, physical_plan::{ExecutionPlan, Statistics, empty::EmptyExec, union::UnionExec}, @@ -58,7 +59,7 @@ use crate::{ catalog::{ ManifestFile, Snapshot as CatalogSnapshot, column::{Column, TypedStatistics}, - manifest::File, + manifest::{File, SortOrder}, snapshot::{ManifestItem, Snapshot}, }, event::DEFAULT_TIMESTAMP_KEY, @@ -80,10 +81,6 @@ pub struct GlobalSchemaProvider { #[async_trait::async_trait] impl SchemaProvider for GlobalSchemaProvider { - fn as_any(&self) -> &dyn Any { - self - } - fn table_names(&self) -> Vec { PARSEABLE.streams.list(&self.tenant_id) } @@ -136,7 +133,12 @@ fn build_parquet_scan_components( if let Some(expr) = conjunction(exact_source_filters(filters)) { let table_df_schema = schema.as_ref().clone().to_dfschema()?; - let predicate = create_physical_expr(&expr, &table_df_schema, state.execution_props())?; + let predicate = create_physical_expr( + &expr, + &table_df_schema, + state.execution_props(), + &PhysicalPlanningContext::default(), + )?; file_source = file_source.with_predicate(predicate); } @@ -149,9 +151,16 @@ fn balanced_file_groups(manifest_files: Vec, target_partitions: usize) -> return Vec::new(); } + // Longest-processing-time scheduling avoids a large file being assigned near the end and + // leaving one scan partition as the tail. Keep each group's original file order after the + // assignment: manifests are newest-first, and that order is needed when file statistics prove + // the files form a globally sorted stream. + let mut files = manifest_files.into_iter().enumerate().collect_vec(); + files.sort_by_key(|(original_index, file)| (Reverse(file.file_size), *original_index)); + let mut groups = Vec::from_iter((0..group_count).map(|_| Vec::new())); let mut group_bytes = vec![0_u64; group_count]; - for file in manifest_files { + for (original_index, file) in files { let group = group_bytes .iter() .enumerate() @@ -159,9 +168,65 @@ fn balanced_file_groups(manifest_files: Vec, target_partitions: usize) -> .map(|(index, _)| index) .expect("at least one file group"); group_bytes[group] = group_bytes[group].saturating_add(file.file_size); - groups[group].push(file); + groups[group].push((original_index, file)); } + groups + .into_iter() + .map(|mut group| { + group.sort_by_key(|(original_index, _)| *original_index); + group.into_iter().map(|(_, file)| file).collect() + }) + .collect() +} + +fn file_time_bounds(file: &File, time_column: &str) -> Option<(i64, i64)> { + let stats = file + .columns + .iter() + .find(|column| column.name == time_column)? + .stats + .as_ref()?; + let TypedStatistics::Int(stats) = stats else { + return None; + }; + Some((stats.min, stats.max)) +} + +/// DataFusion may eliminate a sort or stop a TopK scan early when this ordering is advertised. +/// Only do so when every file is timestamp-descending and adjacent file ranges do not overlap. +/// A single false claim here can produce incorrectly ordered query results. +fn file_groups_are_time_ordered(file_groups: &[Vec], time_column: &str) -> bool { + !file_groups.is_empty() + && file_groups.iter().all(|group| { + if group.is_empty() + || !group.iter().all(|file| { + matches!( + file.sort_order_id.first(), + Some((column, SortOrder::DescNullsLast)) if column == time_column + ) + }) + { + return false; + } + + // One sorted file needs no range proof. For multiple files, inspect each timestamp + // statistic once and prove that concatenating them preserves descending order. + if group.len() == 1 { + return true; + } + let mut previous_min = None; + for file in group { + let Some((current_min, current_max)) = file_time_bounds(file, time_column) else { + return false; + }; + if previous_min.is_some_and(|min| min < current_max) { + return false; + } + previous_min = Some(current_min); + } + true + }) } impl StandardTableProvider { @@ -177,19 +242,8 @@ impl StandardTableProvider { limit: Option, state: &dyn Session, time_partition: Option, + output_ordered_by_time: bool, ) -> Result<(), DataFusionError> { - let sort_expr = PhysicalSortExpr { - expr: if let Some(time_partition) = time_partition { - col(&time_partition, &self.schema)? - } else { - col(DEFAULT_TIMESTAMP_KEY, &self.schema)? - }, - options: SortOptions { - descending: true, - nulls_first: true, - }, - }; - let (file_format, file_source) = build_parquet_scan_components(self.schema.clone(), filters, state)?; @@ -200,8 +254,20 @@ impl StandardTableProvider { .with_statistics(statistics) .with_batch_size(Some(PARSEABLE.options.execution_batch_size)) .with_constraints(Constraints::default()) - .with_file_groups(file_groups) - .with_output_ordering(vec![LexOrdering::new([sort_expr]).unwrap()]); + .with_file_groups(file_groups); + + if output_ordered_by_time { + let time_column = time_partition.as_deref().unwrap_or(DEFAULT_TIMESTAMP_KEY); + let sort_expr = PhysicalSortExpr { + expr: col(time_column, &self.schema)?, + options: SortOptions { + descending: true, + nulls_first: false, + }, + }; + conf_builder = + conf_builder.with_output_ordering(vec![LexOrdering::new([sort_expr]).unwrap()]); + } // Set projection if provided if let Some(proj_indices) = projection { @@ -266,10 +332,11 @@ impl StandardTableProvider { }) .collect::>()?; - let (partitioned_files, statistics) = self.partitioned_files( + let (partitioned_files, statistics, output_ordered_by_time) = self.partitioned_files( hot_tier_files, state.config_options().execution.target_partitions, true, + time_partition.as_deref().unwrap_or(DEFAULT_TIMESTAMP_KEY), ); self.create_parquet_physical_plan( @@ -282,6 +349,7 @@ impl StandardTableProvider { limit, state, time_partition.clone(), + output_ordered_by_time, ) .await?; @@ -345,6 +413,7 @@ impl StandardTableProvider { limit, state, time_partition.cloned(), + false, ) .await } @@ -359,16 +428,12 @@ impl StandardTableProvider { projection: Option<&Vec>, filters: &[Expr], limit: Option, - time_partition: Option, ) -> Result<(), DataFusionError> { ListingTableBuilder::new(self.stream.to_owned()) .populate_via_listing(glob_storage.clone(), time_filters) .and_then(|builder| async { - let table = builder.build( - self.schema.clone(), - |x| glob_storage.query_prefixes(x), - time_partition, - )?; + let table = + builder.build(self.schema.clone(), |x| glob_storage.query_prefixes(x))?; if let Some(table) = table { let plan = table.scan(state, projection, filters, limit).await?; execution_plans.push(plan); @@ -405,8 +470,14 @@ impl StandardTableProvider { manifest_files: Vec, target_partitions: usize, _is_hot_tier: bool, - ) -> (Vec>, datafusion::common::Statistics) { + time_column: &str, + ) -> ( + Vec>, + datafusion::common::Statistics, + bool, + ) { let file_groups = balanced_file_groups(manifest_files, target_partitions); + let output_ordered_by_time = file_groups_are_time_ordered(&file_groups, time_column); let mut partitioned_files = Vec::with_capacity(file_groups.len()); let mut column_statistics = HashMap::>::new(); let mut count = 0; @@ -498,7 +569,7 @@ impl StandardTableProvider { self.tenant_id.as_deref().unwrap_or(DEFAULT_TENANT), ); - (partitioned_files, statistics) + (partitioned_files, statistics, output_ordered_by_time) } } @@ -601,10 +672,6 @@ async fn collect_from_snapshot( #[async_trait::async_trait] impl TableProvider for StandardTableProvider { - fn as_any(&self) -> &dyn std::any::Any { - self - } - fn schema(&self) -> SchemaRef { self.schema.clone() } @@ -682,7 +749,6 @@ impl TableProvider for StandardTableProvider { projection, filters, limit, - time_partition.clone(), ) .await?; } @@ -728,10 +794,11 @@ impl TableProvider for StandardTableProvider { return self.final_plan(execution_plans, projection); } - let (partitioned_files, statistics) = self.partitioned_files( + let (partitioned_files, statistics, output_ordered_by_time) = self.partitioned_files( manifest_files, state.config_options().execution.target_partitions, false, + time_partition.as_deref().unwrap_or(DEFAULT_TIMESTAMP_KEY), ); let object_store_url = glob_storage.store_url(); @@ -746,6 +813,7 @@ impl TableProvider for StandardTableProvider { limit, state, time_partition.clone(), + output_ordered_by_time, ) .await?; @@ -1157,11 +1225,16 @@ mod tests { scalar::ScalarValue, }; - use crate::catalog::{manifest::File, snapshot::ManifestItem}; + use crate::catalog::{ + column::{Column, Int64Type, TypedStatistics}, + manifest::{File, SortOrder}, + snapshot::ManifestItem, + }; use super::{ PartialTimeFilter, balanced_file_groups, build_parquet_scan_components, - exact_source_filters, extract_timestamp_bound, is_overlapping_query, + exact_source_filters, extract_timestamp_bound, file_groups_are_time_ordered, + is_overlapping_query, }; fn file(path: &str, size: u64) -> File { @@ -1172,6 +1245,21 @@ mod tests { } } + fn time_sorted_file(path: &str, size: u64, min: i64, max: i64) -> File { + File { + file_path: path.to_owned(), + file_size: size, + columns: vec![Column { + name: "p_timestamp".to_owned(), + stats: Some(TypedStatistics::Int(Int64Type { min, max })), + uncompressed_size: 0, + compressed_size: 0, + }], + sort_order_id: vec![("p_timestamp".to_owned(), SortOrder::DescNullsLast)], + ..File::default() + } + } + fn group_paths(groups: &[Vec]) -> Vec> { groups .iter() @@ -1186,10 +1274,6 @@ mod tests { #[async_trait::async_trait] impl TableProvider for TestParquetProvider { - fn as_any(&self) -> &dyn std::any::Any { - self - } - fn schema(&self) -> Arc { Arc::clone(&self.schema) } @@ -1399,6 +1483,63 @@ mod tests { assert!(balanced_file_groups(vec![file("z.parquet", 1)], 0).is_empty()); } + #[test] + fn byte_balancing_uses_largest_files_first_without_reordering_each_group() { + let files = vec![ + file("first.parquet", 6), + file("second.parquet", 10), + file("third.parquet", 7), + file("fourth.parquet", 9), + file("fifth.parquet", 8), + ]; + + let groups = balanced_file_groups(files, 3); + + assert_eq!( + group_paths(&groups), + vec![ + vec!["second.parquet"], + vec!["first.parquet", "fourth.parquet"], + vec!["third.parquet", "fifth.parquet"], + ] + ); + assert_eq!( + groups + .iter() + .map(|group| group.iter().map(|file| file.file_size).sum::()) + .collect::>(), + vec![10, 15, 15] + ); + } + + #[test] + fn scan_order_is_advertised_only_for_non_overlapping_sorted_files() { + let ordered = vec![vec![ + time_sorted_file("new.parquet", 10, 200, 299), + time_sorted_file("old.parquet", 10, 100, 199), + ]]; + assert!(file_groups_are_time_ordered(&ordered, "p_timestamp")); + + let overlapping = vec![vec![ + time_sorted_file("new.parquet", 10, 150, 299), + time_sorted_file("old.parquet", 10, 100, 199), + ]]; + assert!(!file_groups_are_time_ordered(&overlapping, "p_timestamp")); + + let mut wrong_primary_key = time_sorted_file("metric.parquet", 10, 100, 199); + wrong_primary_key + .sort_order_id + .insert(0, ("metric_name".to_owned(), SortOrder::AscNullsLast)); + assert!(!file_groups_are_time_ordered( + &[vec![wrong_primary_key]], + "p_timestamp" + )); + assert!(!file_groups_are_time_ordered( + &[vec![file("unsorted.parquet", 10)]], + "p_timestamp" + )); + } + fn datetime_min(year: i32, month: u32, day: u32) -> DateTime { NaiveDate::from_ymd_opt(year, month, day) .unwrap()