From 33b90d4609585ad2be293e78d4a43aeb0144fee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Wed, 31 Dec 2025 23:00:47 +0000 Subject: [PATCH 1/8] Update dependencies --- Cargo.lock | 648 ++++++++++-------- Cargo.toml | 36 +- crates/modelardb_client/src/main.rs | 7 +- .../src/operations/client.rs | 5 +- .../src/operations/data_folder.rs | 16 +- crates/modelardb_server/src/cluster.rs | 8 +- crates/modelardb_server/src/remote.rs | 21 +- .../src/storage/data_transfer.rs | 4 +- .../tests/integration_test.rs | 19 +- .../src/data_folder/cluster.rs | 4 +- .../modelardb_storage/src/data_folder/mod.rs | 52 +- crates/modelardb_storage/src/lib.rs | 7 +- .../src/optimizer/model_simple_aggregates.rs | 4 +- crates/modelardb_storage/src/parser.rs | 21 + 14 files changed, 476 insertions(+), 376 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c306541c..b5a3fd1b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,12 +52,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -87,9 +81,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e833808ff2d94ed40d9379848a950d995043c7fb3e81a30b383f4c6033821cc" +checksum = "cb372a7cbcac02a35d3fb7b3fc1f969ec078e871f9bb899bf00a2e1809bec8a3" dependencies = [ "arrow-arith", "arrow-array", @@ -108,23 +102,23 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad08897b81588f60ba983e3ca39bda2b179bdd84dced378e7df81a5313802ef8" +checksum = "0f377dcd19e440174596d83deb49cd724886d91060c07fec4f67014ef9d54049" dependencies = [ "arrow-array", "arrow-buffer", "arrow-data", "arrow-schema", "chrono", - "num", + "num-traits", ] [[package]] name = "arrow-array" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8548ca7c070d8db9ce7aa43f37393e4bfcf3f2d3681df278490772fd1673d08d" +checksum = "a23eaff85a44e9fa914660fb0d0bb00b79c4a3d888b5334adb3ea4330c84f002" dependencies = [ "ahash", "arrow-buffer", @@ -134,29 +128,33 @@ dependencies = [ "chrono-tz", "half", "hashbrown 0.16.0", - "num", + "num-complex", + "num-integer", + "num-traits", ] [[package]] name = "arrow-buffer" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e003216336f70446457e280807a73899dd822feaf02087d31febca1363e2fccc" +checksum = "a2819d893750cb3380ab31ebdc8c68874dd4429f90fd09180f3c93538bd21626" dependencies = [ "bytes", "half", - "num", + "num-bigint", + "num-traits", ] [[package]] name = "arrow-cast" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919418a0681298d3a77d1a315f625916cb5678ad0d74b9c60108eb15fd083023" +checksum = "e3d131abb183f80c450d4591dc784f8d7750c50c6e2bc3fcaad148afc8361271" dependencies = [ "arrow-array", "arrow-buffer", "arrow-data", + "arrow-ord", "arrow-schema", "arrow-select", "atoi", @@ -165,15 +163,15 @@ dependencies = [ "comfy-table", "half", "lexical-core", - "num", + "num-traits", "ryu", ] [[package]] name = "arrow-csv" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa9bf02705b5cf762b6f764c65f04ae9082c7cfc4e96e0c33548ee3f67012eb" +checksum = "2275877a0e5e7e7c76954669366c2aa1a829e340ab1f612e647507860906fb6b" dependencies = [ "arrow-array", "arrow-cast", @@ -186,21 +184,22 @@ dependencies = [ [[package]] name = "arrow-data" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5c64fff1d142f833d78897a772f2e5b55b36cb3e6320376f0961ab0db7bd6d0" +checksum = "05738f3d42cb922b9096f7786f606fcb8669260c2640df8490533bb2fa38c9d3" dependencies = [ "arrow-buffer", "arrow-schema", "half", - "num", + "num-integer", + "num-traits", ] [[package]] name = "arrow-flight" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c8b0ba0784d56bc6266b79f5de7a24b47024e7b3a0045d2ad4df3d9b686099f" +checksum = "8b5f57c3d39d1b1b7c1376a772ea86a131e7da310aed54ebea9363124bb885e3" dependencies = [ "arrow-array", "arrow-buffer", @@ -213,13 +212,14 @@ dependencies = [ "prost", "prost-types", "tonic", + "tonic-prost", ] [[package]] name = "arrow-ipc" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3594dcddccc7f20fd069bc8e9828ce37220372680ff638c5e00dea427d88f5" +checksum = "3d09446e8076c4b3f235603d9ea7c5494e73d441b01cd61fb33d7254c11964b3" dependencies = [ "arrow-array", "arrow-buffer", @@ -233,9 +233,9 @@ dependencies = [ [[package]] name = "arrow-json" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cf36502b64a127dc659e3b305f1d993a544eab0d48cce704424e62074dc04b" +checksum = "371ffd66fa77f71d7628c63f209c9ca5341081051aa32f9c8020feb0def787c0" dependencies = [ "arrow-array", "arrow-buffer", @@ -245,19 +245,21 @@ dependencies = [ "chrono", "half", "indexmap", + "itoa", "lexical-core", "memchr", - "num", - "serde", + "num-traits", + "ryu", + "serde_core", "serde_json", "simdutf8", ] [[package]] name = "arrow-ord" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8f82583eb4f8d84d4ee55fd1cb306720cddead7596edce95b50ee418edf66f" +checksum = "cbc94fc7adec5d1ba9e8cd1b1e8d6f72423b33fe978bf1f46d970fafab787521" dependencies = [ "arrow-array", "arrow-buffer", @@ -268,9 +270,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d07ba24522229d9085031df6b94605e0f4b26e099fb7cdeec37abd941a73753" +checksum = "169676f317157dc079cc5def6354d16db63d8861d61046d2f3883268ced6f99f" dependencies = [ "arrow-array", "arrow-buffer", @@ -281,34 +283,35 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3aa9e59c611ebc291c28582077ef25c97f1975383f1479b12f3b9ffee2ffabe" +checksum = "d27609cd7dd45f006abae27995c2729ef6f4b9361cde1ddd019dc31a5aa017e0" dependencies = [ "bitflags", "serde", + "serde_core", "serde_json", ] [[package]] name = "arrow-select" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c41dbbd1e97bfcaee4fcb30e29105fb2c75e4d82ae4de70b792a5d3f66b2e7a" +checksum = "ae980d021879ea119dd6e2a13912d81e64abed372d53163e804dfe84639d8010" dependencies = [ "ahash", "arrow-array", "arrow-buffer", "arrow-data", "arrow-schema", - "num", + "num-traits", ] [[package]] name = "arrow-string" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f5183c150fbc619eede22b861ea7c0eebed8eaac0333eaa7f6da5205fd504d" +checksum = "cf35e8ef49dcf0c5f6d175edee6b8af7b45611805333129c541a8b89a0fc0534" dependencies = [ "arrow-array", "arrow-buffer", @@ -316,7 +319,7 @@ dependencies = [ "arrow-schema", "arrow-select", "memchr", - "num", + "num-traits", "regex", "regex-syntax", ] @@ -950,9 +953,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "bytes-utils" @@ -1027,17 +1030,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link 0.1.1", + "windows-link 0.2.1", ] [[package]] @@ -1131,9 +1133,9 @@ checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "convert_case" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +checksum = "db05ffb6856bf0ecdf6367558a76a0e8a77b1713044eb92845c692100ed50190" dependencies = [ "unicode-segmentation", ] @@ -1173,6 +1175,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.2" @@ -1343,12 +1360,11 @@ dependencies = [ [[package]] name = "datafusion" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af15bb3c6ffa33011ef579f6b0bcbe7c26584688bd6c994f548e44df67f011a" +checksum = "8ba7cb113e9c0bedf9e9765926031e132fa05a1b09ba6e93a6d1a4d7044457b8" dependencies = [ "arrow", - "arrow-ipc", "arrow-schema", "async-trait", "bytes", @@ -1359,6 +1375,7 @@ dependencies = [ "datafusion-common", "datafusion-common-runtime", "datafusion-datasource", + "datafusion-datasource-arrow", "datafusion-datasource-csv", "datafusion-datasource-json", "datafusion-datasource-parquet", @@ -1387,7 +1404,8 @@ dependencies = [ "parquet", "rand 0.9.2", "regex", - "sqlparser 0.58.0", + "rstest", + "sqlparser", "tempfile", "tokio", "url", @@ -1398,9 +1416,9 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187622262ad8f7d16d3be9202b4c1e0116f1c9aa387e5074245538b755261621" +checksum = "66a3a799f914a59b1ea343906a0486f17061f39509af74e874a866428951130d" dependencies = [ "arrow", "async-trait", @@ -1413,7 +1431,6 @@ dependencies = [ "datafusion-physical-expr", "datafusion-physical-plan", "datafusion-session", - "datafusion-sql", "futures", "itertools 0.14.0", "log", @@ -1424,9 +1441,9 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9657314f0a32efd0382b9a46fdeb2d233273ece64baa68a7c45f5a192daf0f83" +checksum = "6db1b113c80d7a0febcd901476a57aef378e717c54517a163ed51417d87621b0" dependencies = [ "arrow", "async-trait", @@ -1436,10 +1453,11 @@ dependencies = [ "datafusion-execution", "datafusion-expr", "datafusion-physical-expr", + "datafusion-physical-expr-adapter", "datafusion-physical-expr-common", "datafusion-physical-plan", - "datafusion-session", "futures", + "itertools 0.14.0", "log", "object_store", "tokio", @@ -1447,14 +1465,13 @@ dependencies = [ [[package]] name = "datafusion-common" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a83760d9a13122d025fbdb1d5d5aaf93dd9ada5e90ea229add92aa30898b2d1" +checksum = "7c10f7659e96127d25e8366be7c8be4109595d6a2c3eac70421f380a7006a1b0" dependencies = [ "ahash", "arrow", "arrow-ipc", - "base64 0.22.1", "chrono", "half", "hashbrown 0.14.5", @@ -1465,16 +1482,16 @@ dependencies = [ "parquet", "paste", "recursive", - "sqlparser 0.58.0", + "sqlparser", "tokio", "web-time", ] [[package]] name = "datafusion-common-runtime" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b6234a6c7173fe5db1c6c35c01a12b2aa0f803a3007feee53483218817f8b1e" +checksum = "b92065bbc6532c6651e2f7dd30b55cba0c7a14f860c7e1d15f165c41a1868d95" dependencies = [ "futures", "log", @@ -1483,9 +1500,9 @@ dependencies = [ [[package]] name = "datafusion-datasource" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7256c9cb27a78709dd42d0c80f0178494637209cac6e29d5c93edd09b6721b86" +checksum = "fde13794244bc7581cd82f6fff217068ed79cdc344cafe4ab2c3a1c3510b38d6" dependencies = [ "arrow", "async-compression", @@ -1508,9 +1525,7 @@ dependencies = [ "itertools 0.14.0", "log", "object_store", - "parquet", "rand 0.9.2", - "tempfile", "tokio", "tokio-util", "url", @@ -1518,22 +1533,44 @@ dependencies = [ "zstd", ] +[[package]] +name = "datafusion-datasource-arrow" +version = "51.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804fa9b4ecf3157982021770617200ef7c1b2979d57bec9044748314775a9aea" +dependencies = [ + "arrow", + "arrow-ipc", + "async-trait", + "bytes", + "datafusion-common", + "datafusion-common-runtime", + "datafusion-datasource", + "datafusion-execution", + "datafusion-expr", + "datafusion-physical-expr-common", + "datafusion-physical-plan", + "datafusion-session", + "futures", + "itertools 0.14.0", + "object_store", + "tokio", +] + [[package]] name = "datafusion-datasource-csv" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64533a90f78e1684bfb113d200b540f18f268134622d7c96bbebc91354d04825" +checksum = "61a1641a40b259bab38131c5e6f48fac0717bedb7dc93690e604142a849e0568" dependencies = [ "arrow", "async-trait", "bytes", - "datafusion-catalog", "datafusion-common", "datafusion-common-runtime", "datafusion-datasource", "datafusion-execution", "datafusion-expr", - "datafusion-physical-expr", "datafusion-physical-expr-common", "datafusion-physical-plan", "datafusion-session", @@ -1545,49 +1582,44 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7ebeb12c77df0aacad26f21b0d033aeede423a64b2b352f53048a75bf1d6e6" +checksum = "adeacdb00c1d37271176f8fb6a1d8ce096baba16ea7a4b2671840c5c9c64fe85" dependencies = [ "arrow", "async-trait", "bytes", - "datafusion-catalog", "datafusion-common", "datafusion-common-runtime", "datafusion-datasource", "datafusion-execution", "datafusion-expr", - "datafusion-physical-expr", "datafusion-physical-expr-common", "datafusion-physical-plan", "datafusion-session", "futures", "object_store", - "serde_json", "tokio", ] [[package]] name = "datafusion-datasource-parquet" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09e783c4c7d7faa1199af2df4761c68530634521b176a8d1331ddbc5a5c75133" +checksum = "43d0b60ffd66f28bfb026565d62b0a6cbc416da09814766a3797bba7d85a3cd9" dependencies = [ "arrow", "async-trait", "bytes", - "datafusion-catalog", "datafusion-common", "datafusion-common-runtime", "datafusion-datasource", "datafusion-execution", "datafusion-expr", - "datafusion-functions-aggregate", + "datafusion-functions-aggregate-common", "datafusion-physical-expr", "datafusion-physical-expr-adapter", "datafusion-physical-expr-common", - "datafusion-physical-optimizer", "datafusion-physical-plan", "datafusion-pruning", "datafusion-session", @@ -1597,21 +1629,20 @@ dependencies = [ "object_store", "parking_lot", "parquet", - "rand 0.9.2", "tokio", ] [[package]] name = "datafusion-doc" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ee6b1d9a80d13f9deb2291f45c07044b8e62fb540dbde2453a18be17a36429" +checksum = "2b99e13947667b36ad713549237362afb054b2d8f8cc447751e23ec61202db07" [[package]] name = "datafusion-execution" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4cec0a57653bec7b933fb248d3ffa3fa3ab3bd33bd140dc917f714ac036f531" +checksum = "63695643190679037bc946ad46a263b62016931547bf119859c511f7ff2f5178" dependencies = [ "arrow", "async-trait", @@ -1629,9 +1660,9 @@ dependencies = [ [[package]] name = "datafusion-expr" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef76910bdca909722586389156d0aa4da4020e1631994d50fadd8ad4b1aa05fe" +checksum = "f9a4787cbf5feb1ab351f789063398f67654a6df75c4d37d7f637dc96f951a91" dependencies = [ "arrow", "async-trait", @@ -1643,17 +1674,18 @@ dependencies = [ "datafusion-functions-window-common", "datafusion-physical-expr-common", "indexmap", + "itertools 0.14.0", "paste", "recursive", "serde_json", - "sqlparser 0.58.0", + "sqlparser", ] [[package]] name = "datafusion-expr-common" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d155ccbda29591ca71a1344dd6bed26c65a4438072b400df9db59447f590bb6" +checksum = "5ce2fb1b8c15c9ac45b0863c30b268c69dc9ee7a1ee13ecf5d067738338173dc" dependencies = [ "arrow", "datafusion-common", @@ -1664,9 +1696,9 @@ dependencies = [ [[package]] name = "datafusion-functions" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de2782136bd6014670fd84fe3b0ca3b3e4106c96403c3ae05c0598577139977" +checksum = "794a9db7f7b96b3346fc007ff25e994f09b8f0511b4cf7dff651fadfe3ebb28f" dependencies = [ "arrow", "arrow-buffer", @@ -1684,6 +1716,7 @@ dependencies = [ "itertools 0.14.0", "log", "md-5", + "num-traits", "rand 0.9.2", "regex", "sha2", @@ -1693,9 +1726,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07331fc13603a9da97b74fd8a273f4238222943dffdbbed1c4c6f862a30105bf" +checksum = "1c25210520a9dcf9c2b2cbbce31ebd4131ef5af7fc60ee92b266dc7d159cb305" dependencies = [ "ahash", "arrow", @@ -1714,9 +1747,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5951e572a8610b89968a09b5420515a121fbc305c0258651f318dc07c97ab17" +checksum = "62f4a66f3b87300bb70f4124b55434d2ae3fe80455f3574701d0348da040b55d" dependencies = [ "ahash", "arrow", @@ -1727,9 +1760,9 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdacca9302c3d8fc03f3e94f338767e786a88a33f5ebad6ffc0e7b50364b9ea3" +checksum = "ae5c06eed03918dc7fe7a9f082a284050f0e9ecf95d72f57712d1496da03b8c4" dependencies = [ "arrow", "arrow-ord", @@ -1737,6 +1770,7 @@ dependencies = [ "datafusion-doc", "datafusion-execution", "datafusion-expr", + "datafusion-expr-common", "datafusion-functions", "datafusion-functions-aggregate", "datafusion-functions-aggregate-common", @@ -1749,9 +1783,9 @@ dependencies = [ [[package]] name = "datafusion-functions-table" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37ff8a99434fbbad604a7e0669717c58c7c4f14c472d45067c4b016621d981" +checksum = "db4fed1d71738fbe22e2712d71396db04c25de4111f1ec252b8f4c6d3b25d7f5" dependencies = [ "arrow", "async-trait", @@ -1765,9 +1799,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e2aea7c79c926cffabb13dc27309d4eaeb130f4a21c8ba91cdd241c813652b" +checksum = "1d92206aa5ae21892f1552b4d61758a862a70956e6fd7a95cb85db1de74bc6d1" dependencies = [ "arrow", "datafusion-common", @@ -1783,9 +1817,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fead257ab5fd2ffc3b40fda64da307e20de0040fe43d49197241d9de82a487f" +checksum = "53ae9bcc39800820d53a22d758b3b8726ff84a5a3e24cecef04ef4e5fdf1c7cc" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -1793,20 +1827,20 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec6f637bce95efac05cdfb9b6c19579ed4aa5f6b94d951cfa5bb054b7bb4f730" +checksum = "1063ad4c9e094b3f798acee16d9a47bd7372d9699be2de21b05c3bd3f34ab848" dependencies = [ - "datafusion-expr", + "datafusion-doc", "quote", "syn", ] [[package]] name = "datafusion-optimizer" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6583ef666ae000a613a837e69e456681a9faa96347bf3877661e9e89e141d8a" +checksum = "9f35f9ec5d08b87fd1893a30c2929f2559c2f9806ca072d8fefca5009dc0f06a" dependencies = [ "arrow", "chrono", @@ -1824,9 +1858,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8668103361a272cbbe3a61f72eca60c9b7c706e87cc3565bcf21e2b277b84f6" +checksum = "c30cc8012e9eedcb48bbe112c6eff4ae5ed19cf3003cb0f505662e88b7014c5d" dependencies = [ "ahash", "arrow", @@ -1839,7 +1873,6 @@ dependencies = [ "hashbrown 0.14.5", "indexmap", "itertools 0.14.0", - "log", "parking_lot", "paste", "petgraph 0.8.3", @@ -1847,9 +1880,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-adapter" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "815acced725d30601b397e39958e0e55630e0a10d66ef7769c14ae6597298bb0" +checksum = "7f9ff2dbd476221b1f67337699eff432781c4e6e1713d2aefdaa517dfbf79768" dependencies = [ "arrow", "datafusion-common", @@ -1862,9 +1895,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6652fe7b5bf87e85ed175f571745305565da2c0b599d98e697bcbedc7baa47c3" +checksum = "90da43e1ec550b172f34c87ec68161986ced70fd05c8d2a2add66eef9c276f03" dependencies = [ "ahash", "arrow", @@ -1876,9 +1909,9 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b7d623eb6162a3332b564a0907ba00895c505d101b99af78345f1acf929b5c" +checksum = "ce9804f799acd7daef3be7aaffe77c0033768ed8fdbf5fb82fc4c5f2e6bc14e6" dependencies = [ "arrow", "datafusion-common", @@ -1890,15 +1923,14 @@ dependencies = [ "datafusion-physical-plan", "datafusion-pruning", "itertools 0.14.0", - "log", "recursive", ] [[package]] name = "datafusion-physical-plan" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2f7f778a1a838dec124efb96eae6144237d546945587557c9e6936b3414558c" +checksum = "0acf0ad6b6924c6b1aa7d213b181e012e2d3ec0a64ff5b10ee6282ab0f8532ac" dependencies = [ "ahash", "arrow", @@ -1927,15 +1959,26 @@ dependencies = [ [[package]] name = "datafusion-proto" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7df9f606892e6af45763d94d210634eec69b9bb6ced5353381682ff090028a3" +checksum = "d368093a98a17d1449b1083ac22ed16b7128e4c67789991869480d8c4a40ecb9" dependencies = [ "arrow", "chrono", - "datafusion", + "datafusion-catalog", + "datafusion-catalog-listing", "datafusion-common", + "datafusion-datasource", + "datafusion-datasource-arrow", + "datafusion-datasource-csv", + "datafusion-datasource-json", + "datafusion-datasource-parquet", + "datafusion-execution", "datafusion-expr", + "datafusion-functions-table", + "datafusion-physical-expr", + "datafusion-physical-expr-common", + "datafusion-physical-plan", "datafusion-proto-common", "object_store", "prost", @@ -1943,9 +1986,9 @@ dependencies = [ [[package]] name = "datafusion-proto-common" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b14f288ca4ef77743d9672cafecf3adfffff0b9b04af9af79ecbeaaf736901" +checksum = "3b6aef3d5e5c1d2bc3114c4876730cb76a9bdc5a8df31ef1b6db48f0c1671895" dependencies = [ "arrow", "datafusion-common", @@ -1954,12 +1997,11 @@ dependencies = [ [[package]] name = "datafusion-pruning" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1e59e2ca14fe3c30f141600b10ad8815e2856caa59ebbd0e3e07cd3d127a65" +checksum = "ac2c2498a1f134a9e11a9f5ed202a2a7d7e9774bd9249295593053ea3be999db" dependencies = [ "arrow", - "arrow-schema", "datafusion-common", "datafusion-datasource", "datafusion-expr-common", @@ -1972,55 +2014,47 @@ dependencies = [ [[package]] name = "datafusion-session" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ef8e2745583619bd7a49474e8f45fbe98ebb31a133f27802217125a7b3d58d" +checksum = "8f96eebd17555386f459037c65ab73aae8df09f464524c709d6a3134ad4f4776" dependencies = [ - "arrow", "async-trait", - "dashmap", "datafusion-common", - "datafusion-common-runtime", "datafusion-execution", "datafusion-expr", - "datafusion-physical-expr", "datafusion-physical-plan", - "datafusion-sql", - "futures", - "itertools 0.14.0", - "log", - "object_store", "parking_lot", - "tokio", ] [[package]] name = "datafusion-sql" -version = "50.3.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89abd9868770386fede29e5a4b14f49c0bf48d652c3b9d7a8a0332329b87d50b" +checksum = "3fc195fe60634b2c6ccfd131b487de46dc30eccae8a3c35a13f136e7f440414f" dependencies = [ "arrow", "bigdecimal", + "chrono", "datafusion-common", "datafusion-expr", "indexmap", "log", "recursive", "regex", - "sqlparser 0.58.0", + "sqlparser", ] [[package]] name = "delta_kernel" -version = "0.16.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6b80fa39021744edf13509bbdd7caef94c1bf101e384990210332dbddddf44" +checksum = "d1eb81d155d4f2423b931c7bf7e58a3124b23ee9a074a4771e1751b72af7fdc5" dependencies = [ "arrow", "bytes", "chrono", "comfy-table", + "crc", "delta_kernel_derive", "futures", "indexmap", @@ -2043,9 +2077,9 @@ dependencies = [ [[package]] name = "delta_kernel_derive" -version = "0.16.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d02d9f5d886ae8bb7fc3f7a3cb8f1b75cd0f5c95f9b5f45bba308f1a0aa58" +checksum = "c9e6474dabfc8e0b849ee2d68f8f13025230d1945b28c69695e9a21b9219ac8e" dependencies = [ "proc-macro2", "quote", @@ -2054,9 +2088,9 @@ dependencies = [ [[package]] name = "deltalake" -version = "0.29.4" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09169ef5ecf35911f5f1c3117844a4e00da1edcce58fe8593a237761525f6e3a" +checksum = "822f8f58cd5a5a436925814138580012fb4fe1e2b522e079c5e1721b243f873d" dependencies = [ "ctor", "delta_kernel", @@ -2066,9 +2100,9 @@ dependencies = [ [[package]] name = "deltalake-aws" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0210d644f4ab27e6d477da99e4b4bf0c7d739fd399ac38c005b6d0dfa4fe132" +checksum = "63b470ec0212b5a704424db8a7f44ae90d8c2b4fc96246860dea2b90f80fe1ee" dependencies = [ "async-trait", "aws-config", @@ -2086,15 +2120,16 @@ dependencies = [ "thiserror", "tokio", "tracing", + "typed-builder", "url", "uuid", ] [[package]] name = "deltalake-core" -version = "0.29.2" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058a672565db45b857617c925f1b9a006bba4d339a87d2f9b1845e183b2ff4a9" +checksum = "0fd42250f1dc45510e9745f5f747201ed9de72c13911ca5c11dd2cc27fe207e3" dependencies = [ "arrow", "arrow-arith", @@ -2133,7 +2168,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sqlparser 0.59.0", + "sqlparser", "strum 0.27.1", "thiserror", "tokio", @@ -2145,9 +2180,9 @@ dependencies = [ [[package]] name = "deltalake-derive" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a785b4702c2d1b6ff286075f375fb2fd52dfbb2fadf17b9233f4d5eea35c6ec" +checksum = "3963d9fe965af7b1dea433271389e1e39c6a97ffdbc2e81d808f5b329e4577b3" dependencies = [ "convert_case", "itertools 0.14.0", @@ -2276,7 +2311,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", - "rustix 1.0.2", + "rustix 1.1.3", "windows-sys 0.59.0", ] @@ -2411,6 +2446,12 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + [[package]] name = "futures-util" version = "0.3.31" @@ -2510,13 +2551,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 0.8.31", ] [[package]] @@ -3138,9 +3180,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -3160,17 +3202,17 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lz4_flex" -version = "0.11.3" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" +checksum = "ab6473172471198271ff72e9379150e9dfd70d8e533e0752a27e515b48dd375e" dependencies = [ - "twox-hash 1.6.3", + "twox-hash", ] [[package]] @@ -3348,7 +3390,7 @@ dependencies = [ "modelardb_test", "modelardb_types", "object_store", - "sqlparser 0.58.0", + "sqlparser", "tempfile", "tokio", "tonic", @@ -3434,20 +3476,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -3482,28 +3510,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -3639,9 +3645,9 @@ dependencies = [ [[package]] name = "parquet" -version = "56.2.0" +version = "57.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dbd48ad52d7dccf8ea1b90a3ddbfaea4f69878dd7683e51c507d4bc52b5b27" +checksum = "be3e4f6d320dd92bfa7d612e265d7d08bba0a240bab86af3425e1d255a511d89" dependencies = [ "ahash", "arrow-array", @@ -3660,17 +3666,17 @@ dependencies = [ "half", "hashbrown 0.16.0", "lz4_flex", - "num", "num-bigint", + "num-integer", + "num-traits", "object_store", "paste", - "ring", "seq-macro", "simdutf8", "snap", "thrift", "tokio", - "twox-hash 2.1.0", + "twox-hash", "zstd", ] @@ -3811,7 +3817,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.23", + "zerocopy 0.8.31", ] [[package]] @@ -3824,6 +3830,15 @@ dependencies = [ "syn", ] +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -3876,9 +3891,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" dependencies = [ "bytes", "prost-derive", @@ -3886,9 +3901,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" +checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1" dependencies = [ "heck", "itertools 0.14.0", @@ -3906,9 +3921,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", "itertools 0.14.0", @@ -3919,9 +3934,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" dependencies = [ "prost", ] @@ -4005,9 +4020,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -4132,9 +4147,9 @@ dependencies = [ [[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", @@ -4144,9 +4159,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", @@ -4165,6 +4180,12 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +[[package]] +name = "relative-path" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" + [[package]] name = "reqwest" version = "0.12.24" @@ -4231,6 +4252,35 @@ dependencies = [ "byteorder", ] +[[package]] +name = "rstest" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" +dependencies = [ + "futures-timer", + "futures-util", + "rstest_macros", +] + +[[package]] +name = "rstest_macros" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn", + "unicode-ident", +] + [[package]] name = "rustc-hash" version = "2.1.1" @@ -4261,15 +4311,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.9.2", - "windows-sys 0.59.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] @@ -4545,9 +4595,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] @@ -4677,17 +4727,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "sqlparser" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec4b661c54b1e4b603b37873a18c59920e4c51ea8ea2cf527d925424dbd4437c" -dependencies = [ - "log", - "recursive", - "sqlparser_derive", -] - [[package]] name = "sqlparser" version = "0.59.0" @@ -4696,6 +4735,7 @@ checksum = "4591acadbcf52f0af60eafbb2c003232b2b4cd8de5f0e9437cb8b1b59046cc0f" dependencies = [ "log", "recursive", + "sqlparser_derive", ] [[package]] @@ -4834,14 +4874,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", - "rustix 1.0.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -5024,9 +5064,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.8" +version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "indexmap", "serde_core", @@ -5039,33 +5079,45 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] +[[package]] +name = "toml_edit" +version = "0.23.10+spec-1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tonic" -version = "0.13.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" +checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" dependencies = [ "async-trait", "axum", @@ -5080,8 +5132,8 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost", - "socket2 0.5.8", + "socket2 0.6.1", + "sync_wrapper", "tokio", "tokio-stream", "tower", @@ -5090,6 +5142,17 @@ dependencies = [ "tracing", ] +[[package]] +name = "tonic-prost" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +dependencies = [ + "bytes", + "prost", + "tonic", +] + [[package]] name = "tower" version = "0.5.2" @@ -5141,9 +5204,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -5153,9 +5216,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -5164,9 +5227,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -5185,9 +5248,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "nu-ansi-term", "sharded-slab", @@ -5205,19 +5268,29 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" -version = "1.6.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908" + +[[package]] +name = "typed-builder" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31aa81521b70f94402501d848ccc0ecaa8f93c8eb6999eb9747e72287757ffda" dependencies = [ - "cfg-if", - "static_assertions", + "typed-builder-macro", ] [[package]] -name = "twox-hash" -version = "2.1.0" +name = "typed-builder-macro" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908" +checksum = "076a02dc54dd46795c2e9c8282ed40bcfb1e22747e955de9389a1de28190fb26" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "typenum" @@ -5293,14 +5366,14 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "getrandom 0.3.1", "js-sys", "rand 0.9.2", - "serde", + "serde_core", "wasm-bindgen", ] @@ -5826,6 +5899,9 @@ name = "winnow" version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +dependencies = [ + "memchr", +] [[package]] name = "wit-bindgen-rt" @@ -5904,11 +5980,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.23" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ - "zerocopy-derive 0.8.23", + "zerocopy-derive 0.8.31", ] [[package]] @@ -5924,9 +6000,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index ef932a13..705dbfe8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,39 +17,39 @@ members = ["crates/*"] resolver = "3" [workspace.dependencies] -arrow = "56.2.0" -arrow-flight = "56.2.0" +arrow = "57.0.0" +arrow-flight = "57.0.0" async-trait = "0.1.89" -bytes = "1.10.1" +bytes = "1.11.0" crossbeam-channel = "0.5.15" crossbeam-queue = "0.3.12" dashmap = "6.1.0" -datafusion = "50.2.0" -datafusion-proto = "50.2.0" -delta_kernel = "0.16.0" -deltalake = "0.29.4" +datafusion = "51.0.0" +datafusion-proto = "51.0.0" +delta_kernel = "0.19.0" +deltalake = "0.30.0" dirs = "6.0.0" futures = "0.3.31" -log = "0.4.28" -object_store = "0.12.3" +log = "0.4.29" +object_store = "0.12.4" proptest = "1.9.0" -prost = "0.13.1" -prost-build = "0.13.1" +prost = "0.14.1" +prost-build = "0.14.1" rand = "0.9.2" rustyline = "17.0.2" serde = { version = "1.0.228", features = ["derive"] } snmalloc-rs = "0.3.8" -sqlparser = "0.58.0" +sqlparser = "0.59.0" sysinfo = "0.37.2" -tempfile = "3.23.0" +tempfile = "3.24.0" tokio = "1.48.0" tokio-stream = "0.1.17" -toml = "0.9.8" -tonic = "0.13.1" -tracing = "0.1.41" -tracing-subscriber = "0.3.20" +toml = "0.9.10" +tonic = "0.14.1" +tracing = "0.1.44" +tracing-subscriber = "0.3.22" url = "2.5.7" -uuid = "1.18.1" +uuid = "1.19.0" [profile.release] lto = true diff --git a/crates/modelardb_client/src/main.rs b/crates/modelardb_client/src/main.rs index ed0236e1..21541820 100644 --- a/crates/modelardb_client/src/main.rs +++ b/crates/modelardb_client/src/main.rs @@ -37,7 +37,7 @@ use arrow_flight::{Action, Criteria, FlightData, FlightDescriptor, Ticket, utils use bytes::Bytes; use rustyline::Editor; use rustyline::history::FileHistory; -use tonic::transport::Channel; +use tonic::transport::{self, Channel}; use tonic::{Request, Streaming}; use crate::error::{ModelarDbClientError, Result}; @@ -119,9 +119,8 @@ fn parse_host_port(maybe_host_port: &str) -> Result<(&str, u16)> { /// server cannot be established. async fn connect(host: &str, port: u16) -> Result> { let address = format!("grpc://{host}:{port}"); - FlightServiceClient::connect(address) - .await - .map_err(|error| error.into()) + let connection = transport::Endpoint::new(address)?.connect().await?; + Ok(FlightServiceClient::new(connection)) } /// Execute the commands and queries in `query_file`. diff --git a/crates/modelardb_embedded/src/operations/client.rs b/crates/modelardb_embedded/src/operations/client.rs index 8f0e1352..1ec3f965 100644 --- a/crates/modelardb_embedded/src/operations/client.rs +++ b/crates/modelardb_embedded/src/operations/client.rs @@ -34,7 +34,7 @@ use datafusion::error::DataFusionError; use datafusion::execution::RecordBatchStream; use datafusion::physical_plan::stream::RecordBatchStreamAdapter; use futures::{StreamExt, TryStreamExt, stream}; -use tonic::transport::Channel; +use tonic::transport::{self, Channel}; use tonic::{Request, Status}; use crate::error::{ModelarDbEmbeddedError, Result}; @@ -55,7 +55,8 @@ impl Client { /// Create a new [`Client`] that is connected to the node with `url`. If a connection /// to the node could not be established, [`ModelarDbEmbeddedError`] is returned. pub async fn connect(url: &str) -> Result { - let flight_client = FlightServiceClient::connect(url.to_owned()).await?; + let connection = transport::Endpoint::new(url.to_owned())?.connect().await?; + let flight_client = FlightServiceClient::new(connection); Ok(Client { flight_client }) } diff --git a/crates/modelardb_embedded/src/operations/data_folder.rs b/crates/modelardb_embedded/src/operations/data_folder.rs index cea8a050..cf056765 100644 --- a/crates/modelardb_embedded/src/operations/data_folder.rs +++ b/crates/modelardb_embedded/src/operations/data_folder.rs @@ -456,8 +456,8 @@ impl Operations for DataFolder { return Err(schema_mismatch_error); } - let delta_ops = self.delta_ops(source_table_name).await?; - let (_table, stream) = delta_ops.load().await?; + let delta_table = self.delta_table(source_table_name).await?; + let (_table, stream) = delta_table.scan_table().await?; let record_batches: Vec = stream.try_collect().await?; target_data_folder @@ -475,8 +475,8 @@ impl Operations for DataFolder { return Err(schema_mismatch_error); } - let delta_ops = self.delta_ops(source_table_name).await?; - let (_table, stream) = delta_ops.load().await?; + let delta_table = self.delta_table(source_table_name).await?; + let (_table, stream) = delta_table.scan_table().await?; let record_batches: Vec = stream.try_collect().await?; target_data_folder @@ -1328,8 +1328,8 @@ mod tests { assert_eq!( result.unwrap_err().to_string(), format!( - "DataFusion Error: Arrow error: Parser error: \ - Error parsing timestamp from '{invalid_start_time}': error parsing date" + "DataFusion Error: Optimizer rule 'simplify_expressions' failed\ncaused by\nArrow error: \ + Parser error: Error parsing timestamp from '{invalid_start_time}': error parsing date" ) ); } @@ -1696,8 +1696,8 @@ mod tests { assert_eq!( result.unwrap_err().to_string(), format!( - "DataFusion Error: Arrow error: Parser error: \ - Error parsing timestamp from '{invalid_start_time}': error parsing date" + "DataFusion Error: Optimizer rule 'simplify_expressions' failed\ncaused by\nArrow error: \ + Parser error: Error parsing timestamp from '{invalid_start_time}': error parsing date" ) ); } diff --git a/crates/modelardb_server/src/cluster.rs b/crates/modelardb_server/src/cluster.rs index f0b21c2b..255472a6 100644 --- a/crates/modelardb_server/src/cluster.rs +++ b/crates/modelardb_server/src/cluster.rs @@ -30,8 +30,8 @@ use modelardb_storage::data_folder::cluster::ClusterMetadata; use modelardb_types::types::{Node, TimeSeriesTableMetadata}; use rand::rng; use rand::seq::IteratorRandom; -use tonic::Request; use tonic::metadata::{Ascii, MetadataValue}; +use tonic::{Request, transport}; use crate::context::Context; use crate::error::{ModelarDbServerError, Result}; @@ -285,7 +285,8 @@ impl Cluster { /// statement with the cluster key as metadata. If the statement was successfully executed, /// return the url of the node to simplify logging, otherwise return [`ModelarDbServerError`]. async fn connect_and_do_get(&self, url: &str, sql: &str) -> Result { - let mut flight_client = FlightServiceClient::connect(url.to_owned()).await?; + let connection = transport::Endpoint::new(url.to_owned())?.connect().await?; + let mut flight_client = FlightServiceClient::new(connection); // Add the key to the request metadata to indicate that the request is a cluster operation. let mut request = Request::new(Ticket::new(sql.to_owned())); @@ -324,7 +325,8 @@ impl Cluster { /// with the cluster key as metadata. If the action was successfully executed, return the url /// of the node to simplify logging, otherwise return [`ModelarDbServerError`]. async fn connect_and_do_action(&self, url: &str, action: Action) -> Result { - let mut flight_client = FlightServiceClient::connect(url.to_owned()).await?; + let connection = transport::Endpoint::new(url.to_owned())?.connect().await?; + let mut flight_client = FlightServiceClient::new(connection); // Add the key to the request metadata to indicate that the request is a cluster operation. let mut request = Request::new(action); diff --git a/crates/modelardb_server/src/remote.rs b/crates/modelardb_server/src/remote.rs index 0da9891b..f24576c4 100644 --- a/crates/modelardb_server/src/remote.rs +++ b/crates/modelardb_server/src/remote.rs @@ -33,7 +33,9 @@ use arrow_flight::{ SchemaResult, Ticket, utils, }; use datafusion::arrow::array::{ArrayRef, RecordBatch}; -use datafusion::arrow::ipc::writer::{DictionaryTracker, IpcDataGenerator, IpcWriteOptions}; +use datafusion::arrow::ipc::writer::{ + CompressionContext, DictionaryTracker, IpcDataGenerator, IpcWriteOptions, +}; use datafusion::error::DataFusionError; use datafusion::execution::RecordBatchStream; use datafusion::physical_plan::stream::RecordBatchStreamAdapter; @@ -50,7 +52,7 @@ use tokio::sync::mpsc::{self, Sender}; use tokio::task; use tokio_stream::wrappers::ReceiverStream; use tonic::metadata::MetadataMap; -use tonic::transport::Server; +use tonic::transport::{self, Server}; use tonic::{Request, Response, Status, Streaming}; use tracing::{debug, error, info}; @@ -123,9 +125,8 @@ async fn execute_query_at_address( address: String, ) -> Result>> { // Connect and execute query. - let mut flight_client = FlightServiceClient::connect(address.clone()) - .await - .map_err(error_to_status_invalid_argument)?; + let connection = transport::Endpoint::new(address.clone())?.connect().await?; + let mut flight_client = FlightServiceClient::new(connection); let ticket = Ticket { ticket: sql.into() }; let mut stream = flight_client.do_get(ticket).await?.into_inner(); @@ -177,8 +178,9 @@ async fn send_query_result( // Serialize and send the query result. let data_generator = IpcDataGenerator::default(); - let writer_options = IpcWriteOptions::default(); let mut dictionary_tracker = DictionaryTracker::new(false); + let writer_options = IpcWriteOptions::default(); + let mut compression_context = CompressionContext::default(); while let Some(maybe_record_batch) = query_result_stream.next().await { // If a record batch is not returned the client is informed about the error. @@ -191,7 +193,12 @@ async fn send_query_result( }; let (encoded_dictionaries, encoded_batch) = data_generator - .encoded_batch(&record_batch, &mut dictionary_tracker, &writer_options) + .encode( + &record_batch, + &mut dictionary_tracker, + &writer_options, + &mut compression_context, + ) .map_err(error_to_status_internal)?; for encoded_dictionary in encoded_dictionaries { diff --git a/crates/modelardb_server/src/storage/data_transfer.rs b/crates/modelardb_server/src/storage/data_transfer.rs index b45ab51b..b61b1557 100644 --- a/crates/modelardb_server/src/storage/data_transfer.rs +++ b/crates/modelardb_server/src/storage/data_transfer.rs @@ -235,10 +235,10 @@ impl DataTransfer { .expect("table_size_in_bytes should contain table_name since the table contains data.") .value(); - let local_delta_ops = self.local_data_folder.delta_ops(table_name).await?; + let local_delta_table = self.local_data_folder.delta_table(table_name).await?; // Read the data that is currently stored for the table with table_name. - let (_table, stream) = local_delta_ops.load().await?; + let (_table, stream) = local_delta_table.scan_table().await?; let record_batches: Vec = stream.try_collect().await?; debug!("Transferring {current_size_in_bytes} bytes for the table '{table_name}'.",); diff --git a/crates/modelardb_server/tests/integration_test.rs b/crates/modelardb_server/tests/integration_test.rs index d2f77789..07c322df 100644 --- a/crates/modelardb_server/tests/integration_test.rs +++ b/crates/modelardb_server/tests/integration_test.rs @@ -35,6 +35,7 @@ use datafusion::arrow::datatypes::{DataType, Field, Schema, TimeUnit::Microsecon use datafusion::arrow::ipc::convert; use datafusion::arrow::ipc::writer::{DictionaryTracker, IpcDataGenerator, IpcWriteOptions}; use datafusion::arrow::record_batch::RecordBatch; +use deltalake::arrow::ipc::writer::CompressionContext; use futures::{StreamExt, stream}; use modelardb_test::data_generation; use modelardb_test::table::{self, NORMAL_TABLE_NAME, TIME_SERIES_TABLE_NAME}; @@ -45,7 +46,7 @@ use tempfile::TempDir; use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::{Child, Command}; use tokio::time; -use tonic::transport::Channel; +use tonic::transport::{self, Channel}; use tonic::{Request, Response, Status, Streaming}; const HOST: &str = "127.0.0.1"; @@ -171,9 +172,9 @@ impl TestContext { port: u16, ) -> Result, Box> { let address = format!("grpc://{host}:{port}"); - - let client = FlightServiceClient::connect(address).await?; - Ok(client) + let connection = transport::Endpoint::new(address)?.connect().await?; + let flight_client = FlightServiceClient::new(connection); + Ok(flight_client) } /// Create a normal table or time series table with or without tags in the server through the @@ -337,12 +338,18 @@ impl TestContext { }]; let data_generator = IpcDataGenerator::default(); - let writer_options = IpcWriteOptions::default(); let mut dictionary_tracker = DictionaryTracker::new(false); + let writer_options = IpcWriteOptions::default(); + let mut compression_context = CompressionContext::default(); for data_point in time_series { let (_encoded_dictionaries, encoded_batch) = data_generator - .encoded_batch(data_point, &mut dictionary_tracker, &writer_options) + .encode( + data_point, + &mut dictionary_tracker, + &writer_options, + &mut compression_context, + ) .unwrap(); flight_data.push(encoded_batch.into()); } diff --git a/crates/modelardb_storage/src/data_folder/cluster.rs b/crates/modelardb_storage/src/data_folder/cluster.rs index 808447ef..e21dbd9b 100644 --- a/crates/modelardb_storage/src/data_folder/cluster.rs +++ b/crates/modelardb_storage/src/data_folder/cluster.rs @@ -123,9 +123,9 @@ impl ClusterMetadata for DataFolder { /// [`Ok`]. If the row could not be removed, return /// [`ModelarDbStorageError`](crate::error::ModelarDbStorageError). async fn remove_node(&self, url: &str) -> Result<()> { - let delta_ops = self.metadata_delta_ops("nodes").await?; + let delta_table = self.metadata_delta_table("nodes").await?; - delta_ops + delta_table .delete() .with_predicate(col("url").eq(lit(url))) .await?; diff --git a/crates/modelardb_storage/src/data_folder/mod.rs b/crates/modelardb_storage/src/data_folder/mod.rs index c4982e7b..fb539b62 100644 --- a/crates/modelardb_storage/src/data_folder/mod.rs +++ b/crates/modelardb_storage/src/data_folder/mod.rs @@ -34,7 +34,6 @@ use datafusion::common::{DFSchema, ToDFSchema}; use datafusion::datasource::sink::DataSink; use datafusion::logical_expr::{Expr, lit}; use datafusion::parquet::file::properties::WriterProperties; -use datafusion::parquet::format::SortingColumn; use datafusion::prelude::{SessionContext, col}; use datafusion_proto::bytes::Serializeable; use delta_kernel::engine::arrow_conversion::TryIntoKernel; @@ -44,8 +43,9 @@ use deltalake::kernel::transaction::{CommitBuilder, CommitProperties}; use deltalake::kernel::{Action, Add, StructField}; use deltalake::operations::create::CreateBuilder; use deltalake::operations::write::writer::{DeltaWriter, WriterConfig}; +use deltalake::parquet::file::metadata::SortingColumn; use deltalake::protocol::{DeltaOperation, SaveMode}; -use deltalake::{DeltaOps, DeltaTable, DeltaTableError}; +use deltalake::{DeltaTable, DeltaTableError}; use futures::{StreamExt, TryStreamExt}; use modelardb_types::functions::{try_convert_bytes_to_schema, try_convert_schema_to_bytes}; use modelardb_types::schemas::{COMPRESSED_SCHEMA, FIELD_COLUMN}; @@ -394,26 +394,6 @@ impl DataFolder { self.delta_table_from_path(&table_path).await } - /// Return a [`DeltaOps`] for manipulating the metadata table with `table_name` in the Delta - /// Lake, or a [`ModelarDbStorageError`] if a connection to the Delta Lake cannot be established - /// or the table does not exist. - pub async fn metadata_delta_ops(&self, table_name: &str) -> Result { - let table_path = self.location_of_metadata_table(table_name); - self.delta_table_from_path(&table_path) - .await - .map(Into::into) - } - - /// Return a [`DeltaOps`] for manipulating the table with `table_name` in the Delta Lake, or a - /// [`ModelarDbStorageError`] if a connection to the Delta Lake cannot be established or the - /// table does not exist. - pub async fn delta_ops(&self, table_name: &str) -> Result { - let table_path = self.location_of_table(table_name); - self.delta_table_from_path(&table_path) - .await - .map(Into::into) - } - /// Return a [`DeltaTable`] for manipulating the table at `table_path` in the Delta Lake, or a /// [`ModelarDbStorageError`] if a connection to the Delta Lake cannot be established or the /// table does not exist. @@ -546,11 +526,19 @@ impl DataFolder { // Compressed segments have the tag columns at the end of the schema. for tag_column_index in base_compressed_schema_len..compressed_schema_len { - sorting_columns.push(SortingColumn::new(tag_column_index as i32, false, false)); + sorting_columns.push(SortingColumn { + column_idx: tag_column_index as i32, + descending: false, + nulls_first: false, + }); } // Compressed segments store the first timestamp in the second column. - sorting_columns.push(SortingColumn::new(1, false, false)); + sorting_columns.push(SortingColumn { + column_idx: 1, + descending: false, + nulls_first: false, + }); let writer_properties = apache_parquet_writer_properties(Some(sorting_columns)); DeltaTableWriter::try_new(delta_table, partition_columns, writer_properties) @@ -720,8 +708,8 @@ impl DataFolder { /// Truncate the Delta Lake table with `table_name` by deleting all rows in the table. If the /// rows could not be deleted, a [`ModelarDbStorageError`] is returned. pub async fn truncate_table(&self, table_name: &str) -> Result<()> { - let delta_table_ops = self.delta_ops(table_name).await?; - delta_table_ops.delete().await?; + let delta_table_table = self.delta_table(table_name).await?; + delta_table_table.delete().await?; Ok(()) } @@ -736,7 +724,7 @@ impl DataFolder { table_name: &str, maybe_retention_period_in_seconds: Option, ) -> Result<()> { - let delta_table_ops = self.delta_ops(table_name).await?; + let delta_table_table = self.delta_table(table_name).await?; let retention_period_in_seconds = maybe_retention_period_in_seconds.unwrap_or(60 * 60 * 24 * 7); @@ -747,7 +735,7 @@ impl DataFolder { )), )?; - delta_table_ops + delta_table_table .vacuum() .with_retention_period(retention_period) .with_enforce_retention_duration(false) @@ -926,9 +914,9 @@ impl DataFolder { /// table in the Delta Lake. If the metadata could not be dropped, [`ModelarDbStorageError`] is /// returned. async fn drop_normal_table_metadata(&self, table_name: &str) -> Result<()> { - let delta_ops = self.metadata_delta_ops("normal_table_metadata").await?; + let delta_table = self.metadata_delta_table("normal_table_metadata").await?; - delta_ops + delta_table .delete() .with_predicate(col("table_name").eq(lit(table_name))) .await?; @@ -942,14 +930,14 @@ impl DataFolder { /// be dropped, [`ModelarDbStorageError`] is returned. async fn drop_time_series_table_metadata(&self, table_name: &str) -> Result<()> { // Delete the table metadata from the time_series_table_metadata table. - self.metadata_delta_ops("time_series_table_metadata") + self.metadata_delta_table("time_series_table_metadata") .await? .delete() .with_predicate(col("table_name").eq(lit(table_name))) .await?; // Delete the column metadata from the time_series_table_field_columns table. - self.metadata_delta_ops("time_series_table_field_columns") + self.metadata_delta_table("time_series_table_field_columns") .await? .delete() .with_predicate(col("table_name").eq(lit(table_name))) diff --git a/crates/modelardb_storage/src/lib.rs b/crates/modelardb_storage/src/lib.rs index 67f78167..ad1cd3e7 100644 --- a/crates/modelardb_storage/src/lib.rs +++ b/crates/modelardb_storage/src/lib.rs @@ -28,7 +28,6 @@ use std::sync::Arc; use arrow::array::RecordBatch; use arrow::compute; use arrow::compute::concat_batches; -use arrow::datatypes::Schema; use bytes::Bytes; use datafusion::catalog::{MemorySchemaProvider, TableProvider}; use datafusion::datasource::sink::DataSink; @@ -41,11 +40,11 @@ use datafusion::parquet::arrow::{AsyncArrowWriter, ParquetRecordBatchStreamBuild use datafusion::parquet::basic::{Compression, Encoding, ZstdLevel}; use datafusion::parquet::errors::ParquetError; use datafusion::parquet::file::properties::{EnabledStatistics, WriterProperties}; -use datafusion::parquet::format::SortingColumn; use datafusion::prelude::SessionContext; use datafusion::sql::TableReference; use datafusion::sql::parser::Statement as DFStatement; use deltalake::DeltaTable; +use deltalake::parquet::file::metadata::SortingColumn; use futures::StreamExt; use modelardb_types::types::TimeSeriesTableMetadata; use object_store::ObjectStore; @@ -169,10 +168,10 @@ pub async fn execute_statement( /// [`ModelarDbStorageError`](error::ModelarDbStorageError). pub async fn sql_and_concat(session_context: &SessionContext, sql: &str) -> Result { let dataframe = session_context.sql(sql).await?; - let schema = Schema::from(dataframe.schema()); + let schema = dataframe.schema().inner().clone(); let record_batches = dataframe.collect().await?; - let record_batch = concat_batches(&schema.into(), &record_batches)?; + let record_batch = concat_batches(&schema, &record_batches)?; Ok(record_batch) } diff --git a/crates/modelardb_storage/src/optimizer/model_simple_aggregates.rs b/crates/modelardb_storage/src/optimizer/model_simple_aggregates.rs index cf215b32..7b408227 100644 --- a/crates/modelardb_storage/src/optimizer/model_simple_aggregates.rs +++ b/crates/modelardb_storage/src/optimizer/model_simple_aggregates.rs @@ -25,7 +25,7 @@ use datafusion::arrow::datatypes::{ArrowPrimitiveType, DataType}; use datafusion::common::tree_node::{Transformed, TreeNode}; use datafusion::config::ConfigOptions; use datafusion::datasource::memory::DataSourceExec; -use datafusion::datasource::physical_plan::{FileScanConfig, ParquetSource}; +use datafusion::datasource::physical_plan::{FileScanConfig, FileSource, ParquetSource}; use datafusion::error::{DataFusionError, Result as DataFusionResult}; use datafusion::logical_expr::{self, Volatility}; use datafusion::physical_expr::aggregate::AggregateExprBuilder; @@ -291,7 +291,7 @@ fn can_rewrite_aggregate(grid_exec_child: &Arc) -> DataFusion .file_source .as_any() .downcast_ref::() - && parquet_source.predicate().is_none() + && parquet_source.filter().is_none() { return Ok(()); } diff --git a/crates/modelardb_storage/src/parser.rs b/crates/modelardb_storage/src/parser.rs index 6d7fe21f..8a3e0e0d 100644 --- a/crates/modelardb_storage/src/parser.rs +++ b/crates/modelardb_storage/src/parser.rs @@ -394,6 +394,7 @@ impl ModelarDbDialect { or_replace: false, temporary: false, external: false, + dynamic: false, global: None, if_not_exists: false, transient: false, @@ -416,6 +417,7 @@ impl ModelarDbDialect { without_rowid: false, like: None, clone: None, + version: None, comment: None, on_commit: None, on_cluster: None, @@ -440,6 +442,11 @@ impl ModelarDbDialect { catalog: None, catalog_sync: None, storage_serialization_policy: None, + target_lag: None, + warehouse: None, + refresh_mode: None, + initialize: None, + require_user: false, }) } @@ -898,6 +905,7 @@ fn check_unsupported_features_are_disabled( or_replace, temporary, external, + dynamic, global, if_not_exists, transient, @@ -915,6 +923,7 @@ fn check_unsupported_features_are_disabled( without_rowid, like, clone, + version, comment, on_commit, on_cluster, @@ -939,11 +948,17 @@ fn check_unsupported_features_are_disabled( catalog, catalog_sync, storage_serialization_policy, + target_lag, + warehouse, + refresh_mode, + initialize, + require_user, } = create_table; check_unsupported_feature_is_disabled(*or_replace, "OR REPLACE")?; check_unsupported_feature_is_disabled(*temporary, "TEMPORARY")?; check_unsupported_feature_is_disabled(*external, "EXTERNAL")?; + check_unsupported_feature_is_disabled(*dynamic, "DYNAMIC")?; check_unsupported_feature_is_disabled(global.is_some(), "GLOBAL")?; check_unsupported_feature_is_disabled(*if_not_exists, "IF NOT EXISTS")?; check_unsupported_feature_is_disabled(*transient, "TRANSIENT")?; @@ -973,6 +988,7 @@ fn check_unsupported_features_are_disabled( check_unsupported_feature_is_disabled(*without_rowid, "Without ROWID")?; check_unsupported_feature_is_disabled(like.is_some(), "LIKE")?; check_unsupported_feature_is_disabled(clone.is_some(), "CLONE")?; + check_unsupported_feature_is_disabled(version.is_some(), "VERSION")?; check_unsupported_feature_is_disabled(comment.is_some(), "Comment")?; check_unsupported_feature_is_disabled(on_commit.is_some(), "ON COMMIT")?; check_unsupported_feature_is_disabled(on_cluster.is_some(), "ON CLUSTER")?; @@ -1018,6 +1034,11 @@ fn check_unsupported_features_are_disabled( storage_serialization_policy.is_some(), "STORAGE_SERIALIZATION_POLICY", )?; + check_unsupported_feature_is_disabled(target_lag.is_some(), "TARGET_LAG")?; + check_unsupported_feature_is_disabled(warehouse.is_some(), "WAREHOUSE")?; + check_unsupported_feature_is_disabled(refresh_mode.is_some(), "REFRESH_MODE")?; + check_unsupported_feature_is_disabled(initialize.is_some(), "INITIALIZE")?; + check_unsupported_feature_is_disabled(*require_user, "REQUIRE_USER")?; Ok(()) } From a5e2e7641344d0383010802320056de2ee1d0209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Sun, 4 Jan 2026 18:36:06 +0000 Subject: [PATCH 2/8] Move chrono dependency to workspace --- Cargo.toml | 1 + crates/modelardb_storage/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 705dbfe8..0e0aa972 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ arrow = "57.0.0" arrow-flight = "57.0.0" async-trait = "0.1.89" bytes = "1.11.0" +chrono = "0.4.41" crossbeam-channel = "0.5.15" crossbeam-queue = "0.3.12" dashmap = "6.1.0" diff --git a/crates/modelardb_storage/Cargo.toml b/crates/modelardb_storage/Cargo.toml index 938c503e..b0e07cf0 100644 --- a/crates/modelardb_storage/Cargo.toml +++ b/crates/modelardb_storage/Cargo.toml @@ -23,7 +23,7 @@ authors = ["Soeren Kejser Jensen "] arrow.workspace = true async-trait.workspace = true bytes.workspace = true -chrono = "0.4.41" +chrono.workspace = true dashmap.workspace = true datafusion.workspace = true datafusion-proto.workspace = true From 0ceb1ee4e2ba72826a33c38e98c026aa48aaffb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Thu, 8 Jan 2026 12:31:30 +0000 Subject: [PATCH 3/8] Remove unnecessary {} --- crates/modelardb_storage/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/modelardb_storage/Cargo.toml b/crates/modelardb_storage/Cargo.toml index b0e07cf0..b211c052 100644 --- a/crates/modelardb_storage/Cargo.toml +++ b/crates/modelardb_storage/Cargo.toml @@ -34,7 +34,7 @@ modelardb_compression = { path = "../modelardb_compression" } modelardb_types = { path = "../modelardb_types" } object_store = { workspace = true, features = ["aws", "azure"] } sqlparser.workspace = true -tokio = { workspace = true } +tokio.workspace = true tonic.workspace = true url.workspace = true uuid.workspace = true From be5309ce42902bca6827b9d10e831caa40ec3cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Mon, 12 Jan 2026 20:12:59 +0000 Subject: [PATCH 4/8] Update deltalake to 0.30.1 --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- crates/modelardb_storage/Cargo.toml | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b5a3fd1b..a3f62446 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2088,9 +2088,9 @@ dependencies = [ [[package]] name = "deltalake" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "822f8f58cd5a5a436925814138580012fb4fe1e2b522e079c5e1721b243f873d" +checksum = "2d36980b71991de8f123b6c41e48865bcc3a5e4c70adefe0b3cbdc2352feaab7" dependencies = [ "ctor", "delta_kernel", diff --git a/Cargo.toml b/Cargo.toml index 0e0aa972..241dec82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ dashmap = "6.1.0" datafusion = "51.0.0" datafusion-proto = "51.0.0" delta_kernel = "0.19.0" -deltalake = "0.30.0" +deltalake = "0.30.1" dirs = "6.0.0" futures = "0.3.31" log = "0.4.29" diff --git a/crates/modelardb_storage/Cargo.toml b/crates/modelardb_storage/Cargo.toml index b211c052..9e027ac4 100644 --- a/crates/modelardb_storage/Cargo.toml +++ b/crates/modelardb_storage/Cargo.toml @@ -34,7 +34,6 @@ modelardb_compression = { path = "../modelardb_compression" } modelardb_types = { path = "../modelardb_types" } object_store = { workspace = true, features = ["aws", "azure"] } sqlparser.workspace = true -tokio.workspace = true tonic.workspace = true url.workspace = true uuid.workspace = true @@ -43,4 +42,4 @@ uuid.workspace = true futures.workspace = true modelardb_test = { path = "../modelardb_test" } tempfile.workspace = true -tokio = { workspace = true, features = ["rt-multi-thread", "signal"] } +tokio.workspace = true From c22fcfe0af14ca83f0d8d3b75efa26f276bc6c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Mon, 12 Jan 2026 20:32:59 +0000 Subject: [PATCH 5/8] Update based on comments from @CGodiksen --- crates/modelardb_client/src/main.rs | 4 ++-- crates/modelardb_embedded/src/operations/client.rs | 4 ++-- crates/modelardb_server/src/cluster.rs | 7 ++++--- crates/modelardb_server/src/remote.rs | 4 ++-- crates/modelardb_server/tests/integration_test.rs | 4 ++-- crates/modelardb_storage/src/data_folder/mod.rs | 8 ++++---- crates/modelardb_storage/src/parser.rs | 2 +- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/crates/modelardb_client/src/main.rs b/crates/modelardb_client/src/main.rs index 21541820..69d589a3 100644 --- a/crates/modelardb_client/src/main.rs +++ b/crates/modelardb_client/src/main.rs @@ -37,7 +37,7 @@ use arrow_flight::{Action, Criteria, FlightData, FlightDescriptor, Ticket, utils use bytes::Bytes; use rustyline::Editor; use rustyline::history::FileHistory; -use tonic::transport::{self, Channel}; +use tonic::transport::{Channel, Endpoint}; use tonic::{Request, Streaming}; use crate::error::{ModelarDbClientError, Result}; @@ -119,7 +119,7 @@ fn parse_host_port(maybe_host_port: &str) -> Result<(&str, u16)> { /// server cannot be established. async fn connect(host: &str, port: u16) -> Result> { let address = format!("grpc://{host}:{port}"); - let connection = transport::Endpoint::new(address)?.connect().await?; + let connection = Endpoint::new(address)?.connect().await?; Ok(FlightServiceClient::new(connection)) } diff --git a/crates/modelardb_embedded/src/operations/client.rs b/crates/modelardb_embedded/src/operations/client.rs index 1ec3f965..6fc70d26 100644 --- a/crates/modelardb_embedded/src/operations/client.rs +++ b/crates/modelardb_embedded/src/operations/client.rs @@ -34,7 +34,7 @@ use datafusion::error::DataFusionError; use datafusion::execution::RecordBatchStream; use datafusion::physical_plan::stream::RecordBatchStreamAdapter; use futures::{StreamExt, TryStreamExt, stream}; -use tonic::transport::{self, Channel}; +use tonic::transport::{Channel, Endpoint}; use tonic::{Request, Status}; use crate::error::{ModelarDbEmbeddedError, Result}; @@ -55,7 +55,7 @@ impl Client { /// Create a new [`Client`] that is connected to the node with `url`. If a connection /// to the node could not be established, [`ModelarDbEmbeddedError`] is returned. pub async fn connect(url: &str) -> Result { - let connection = transport::Endpoint::new(url.to_owned())?.connect().await?; + let connection = Endpoint::new(url.to_owned())?.connect().await?; let flight_client = FlightServiceClient::new(connection); Ok(Client { flight_client }) diff --git a/crates/modelardb_server/src/cluster.rs b/crates/modelardb_server/src/cluster.rs index 255472a6..8589437d 100644 --- a/crates/modelardb_server/src/cluster.rs +++ b/crates/modelardb_server/src/cluster.rs @@ -30,8 +30,9 @@ use modelardb_storage::data_folder::cluster::ClusterMetadata; use modelardb_types::types::{Node, TimeSeriesTableMetadata}; use rand::rng; use rand::seq::IteratorRandom; +use tonic::Request; use tonic::metadata::{Ascii, MetadataValue}; -use tonic::{Request, transport}; +use tonic::transport::Endpoint; use crate::context::Context; use crate::error::{ModelarDbServerError, Result}; @@ -285,7 +286,7 @@ impl Cluster { /// statement with the cluster key as metadata. If the statement was successfully executed, /// return the url of the node to simplify logging, otherwise return [`ModelarDbServerError`]. async fn connect_and_do_get(&self, url: &str, sql: &str) -> Result { - let connection = transport::Endpoint::new(url.to_owned())?.connect().await?; + let connection = Endpoint::new(url.to_owned())?.connect().await?; let mut flight_client = FlightServiceClient::new(connection); // Add the key to the request metadata to indicate that the request is a cluster operation. @@ -325,7 +326,7 @@ impl Cluster { /// with the cluster key as metadata. If the action was successfully executed, return the url /// of the node to simplify logging, otherwise return [`ModelarDbServerError`]. async fn connect_and_do_action(&self, url: &str, action: Action) -> Result { - let connection = transport::Endpoint::new(url.to_owned())?.connect().await?; + let connection = Endpoint::new(url.to_owned())?.connect().await?; let mut flight_client = FlightServiceClient::new(connection); // Add the key to the request metadata to indicate that the request is a cluster operation. diff --git a/crates/modelardb_server/src/remote.rs b/crates/modelardb_server/src/remote.rs index f24576c4..2c3e9929 100644 --- a/crates/modelardb_server/src/remote.rs +++ b/crates/modelardb_server/src/remote.rs @@ -52,7 +52,7 @@ use tokio::sync::mpsc::{self, Sender}; use tokio::task; use tokio_stream::wrappers::ReceiverStream; use tonic::metadata::MetadataMap; -use tonic::transport::{self, Server}; +use tonic::transport::{Endpoint, Server}; use tonic::{Request, Response, Status, Streaming}; use tracing::{debug, error, info}; @@ -125,7 +125,7 @@ async fn execute_query_at_address( address: String, ) -> Result>> { // Connect and execute query. - let connection = transport::Endpoint::new(address.clone())?.connect().await?; + let connection = Endpoint::new(address.clone())?.connect().await?; let mut flight_client = FlightServiceClient::new(connection); let ticket = Ticket { ticket: sql.into() }; diff --git a/crates/modelardb_server/tests/integration_test.rs b/crates/modelardb_server/tests/integration_test.rs index 07c322df..c302cf7e 100644 --- a/crates/modelardb_server/tests/integration_test.rs +++ b/crates/modelardb_server/tests/integration_test.rs @@ -46,7 +46,7 @@ use tempfile::TempDir; use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::{Child, Command}; use tokio::time; -use tonic::transport::{self, Channel}; +use tonic::transport::{Channel, Endpoint}; use tonic::{Request, Response, Status, Streaming}; const HOST: &str = "127.0.0.1"; @@ -172,7 +172,7 @@ impl TestContext { port: u16, ) -> Result, Box> { let address = format!("grpc://{host}:{port}"); - let connection = transport::Endpoint::new(address)?.connect().await?; + let connection = Endpoint::new(address)?.connect().await?; let flight_client = FlightServiceClient::new(connection); Ok(flight_client) } diff --git a/crates/modelardb_storage/src/data_folder/mod.rs b/crates/modelardb_storage/src/data_folder/mod.rs index fb539b62..2d4ec8cd 100644 --- a/crates/modelardb_storage/src/data_folder/mod.rs +++ b/crates/modelardb_storage/src/data_folder/mod.rs @@ -708,8 +708,8 @@ impl DataFolder { /// Truncate the Delta Lake table with `table_name` by deleting all rows in the table. If the /// rows could not be deleted, a [`ModelarDbStorageError`] is returned. pub async fn truncate_table(&self, table_name: &str) -> Result<()> { - let delta_table_table = self.delta_table(table_name).await?; - delta_table_table.delete().await?; + let delta_table = self.delta_table(table_name).await?; + delta_table.delete().await?; Ok(()) } @@ -724,7 +724,7 @@ impl DataFolder { table_name: &str, maybe_retention_period_in_seconds: Option, ) -> Result<()> { - let delta_table_table = self.delta_table(table_name).await?; + let delta_table = self.delta_table(table_name).await?; let retention_period_in_seconds = maybe_retention_period_in_seconds.unwrap_or(60 * 60 * 24 * 7); @@ -735,7 +735,7 @@ impl DataFolder { )), )?; - delta_table_table + delta_table .vacuum() .with_retention_period(retention_period) .with_enforce_retention_duration(false) diff --git a/crates/modelardb_storage/src/parser.rs b/crates/modelardb_storage/src/parser.rs index 8a3e0e0d..78ce698c 100644 --- a/crates/modelardb_storage/src/parser.rs +++ b/crates/modelardb_storage/src/parser.rs @@ -1490,7 +1490,7 @@ mod tests { } #[test] - fn test_tokenize_and_parse_create_time_series_table_without_table_table_name_space() { + fn test_tokenize_and_parse_create_time_series_table_without_table_name_space() { let result = tokenize_and_parse_sql_statement( "CREATE TIME SERIES TABLEtable_name(timestamp TIMESTAMP, field FIELD, tag TAG)", ); From 3f286132cb84ddfc1316f750cab141b558659dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Fri, 16 Jan 2026 14:31:16 +0000 Subject: [PATCH 6/8] Fix remaining failing test --- crates/modelardb_server/tests/integration_test.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/modelardb_server/tests/integration_test.rs b/crates/modelardb_server/tests/integration_test.rs index c302cf7e..c1dce471 100644 --- a/crates/modelardb_server/tests/integration_test.rs +++ b/crates/modelardb_server/tests/integration_test.rs @@ -1071,8 +1071,7 @@ async fn test_cannot_ingest_invalid_time_series() { assert_eq!( response.err().unwrap().message(), - "Schema error: Invalid data for schema. Field { name: \"tag\", data_type: Utf8, nullable: \ - false, dict_id: 0, dict_is_ordered: false, metadata: {} } refers to node not found in schema" + "Schema error: Invalid data for schema. Field { \"tag\": Utf8 } refers to node not found in schema" ); test_context.flush_data_to_disk().await; From 4fd5217154391a8fc57e270810d81bc80d3337b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Sun, 25 Jan 2026 17:02:29 +0000 Subject: [PATCH 7/8] Update delta_kernel to fix vacuum deadlock --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- crates/modelardb_types/src/types.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3f62446..ea837fb0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2046,9 +2046,9 @@ dependencies = [ [[package]] name = "delta_kernel" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1eb81d155d4f2423b931c7bf7e58a3124b23ee9a074a4771e1751b72af7fdc5" +checksum = "8d3d40b40819579c0ec4b58e8f256a8080a82f5540a42bfab9e0eb4b3f92de2a" dependencies = [ "arrow", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 241dec82..1b04666a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ crossbeam-queue = "0.3.12" dashmap = "6.1.0" datafusion = "51.0.0" datafusion-proto = "51.0.0" -delta_kernel = "0.19.0" +delta_kernel = "0.19.1" deltalake = "0.30.1" dirs = "6.0.0" futures = "0.3.31" diff --git a/crates/modelardb_types/src/types.rs b/crates/modelardb_types/src/types.rs index bc22c424..52f7cd60 100644 --- a/crates/modelardb_types/src/types.rs +++ b/crates/modelardb_types/src/types.rs @@ -440,7 +440,7 @@ mod tests { assert_eq!( result.unwrap_err().to_string(), - "Invalid Argument Error: The data type 'Timestamp(Millisecond, None)' of column 'timestamp' is not supported in a time series table." + "Invalid Argument Error: The data type 'Timestamp(ms)' of column 'timestamp' is not supported in a time series table." ); } From 87fac68f4709465fb673c1d8ee8cb4bd0fb5fb08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Kejser=20Jensen?= Date: Sun, 25 Jan 2026 19:33:20 +0100 Subject: [PATCH 8/8] Remove version checking from azurite --- .github/workflows/build-lint-test-and-upload.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-lint-test-and-upload.yml b/.github/workflows/build-lint-test-and-upload.yml index caa62996..9793e0c9 100644 --- a/.github/workflows/build-lint-test-and-upload.yml +++ b/.github/workflows/build-lint-test-and-upload.yml @@ -70,7 +70,7 @@ jobs: shell: bash run: | npm install azurite - node_modules/.bin/azurite -l azurite_data_folder & + node_modules/.bin/azurite --skipApiVersionCheck --location azurite_data_folder & az storage container create -n modelardb --connection-string 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;' # Setup Protobuf Compiler.