diff --git a/.github/config/db1.json b/.github/config/db1.json new file mode 100644 index 0000000000..648955c2ac --- /dev/null +++ b/.github/config/db1.json @@ -0,0 +1,15 @@ +{ + "driver": "org.postgresql.Driver", + "url": "jdbc:postgresql://postgres:5432/postgres", + "username": "postgres", + "password": "postgres", + "costParams": { + "join": 10.0, + "agg": 20.0, + "sort": 20.0, + "trans": 3.0 + }, + "dialect": "postgres", + "cardEstType": "postgres", + "partitionType": "postgres" +} \ No newline at end of file diff --git a/.github/config/db2.json b/.github/config/db2.json new file mode 100644 index 0000000000..648955c2ac --- /dev/null +++ b/.github/config/db2.json @@ -0,0 +1,15 @@ +{ + "driver": "org.postgresql.Driver", + "url": "jdbc:postgresql://postgres:5432/postgres", + "username": "postgres", + "password": "postgres", + "costParams": { + "join": 10.0, + "agg": 20.0, + "sort": 20.0, + "trans": 3.0 + }, + "dialect": "postgres", + "cardEstType": "postgres", + "partitionType": "postgres" +} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af0c0adfed..43cb6d7037 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -198,7 +198,7 @@ jobs: - uses: actions/setup-java@v3 with: distribution: "temurin" - java-version: "8" + java-version: "17" - uses: actions/cache@v2 with: @@ -255,4 +255,5 @@ jobs: MSSQL_URL: "mssql://sa:mssql!Password@mssql:1433/tempdb" DB1: "postgresql://postgres:postgres@postgres:5432/postgres" DB2: "postgresql://postgres:postgres@postgres:5432/postgres" + FED_CONFIG_PATH: ${{ github.workspace }}/.github/config SQLITE3_STATIC: 1 diff --git a/Cargo.lock b/Cargo.lock index 77e14bfe16..f02ccfa67f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -43,9 +43,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] @@ -97,9 +97,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "argminmax" @@ -130,64 +130,109 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "arrow" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e2bcd431a4aa0ff003fdd2dc21c78cfb42f31459c89d2312c2746fe17a5ac" +checksum = "6619cab21a0cdd8c9b9f1d9e09bfaa9b1974e5ef809a6566aef0b998caf38ace" dependencies = [ "ahash 0.8.3", + "arrow-arith", "arrow-array", "arrow-buffer", + "arrow-cast", + "arrow-csv", "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", "arrow-schema", "arrow-select", - "bitflags 1.3.2", + "arrow-string", +] + +[[package]] +name = "arrow-arith" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0dc95485623a76e00929bda8caa40c1f838190952365c4f43a7b9ae86d03e94" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", "chrono", - "comfy-table 6.2.0", - "csv", - "flatbuffers", "half 2.3.1", - "hashbrown 0.12.3", - "indexmap 1.9.3", - "lazy_static", - "lexical-core", - "multiversion 0.6.1", "num", - "regex", - "regex-syntax 0.6.29", - "serde_json", ] [[package]] name = "arrow-array" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9044300874385f19e77cbf90911e239bd23630d8f23bb0f948f9067998a13b7" +checksum = "3267847f53d3042473cfd2c769afd8d74a6d7d201fc3a34f5cb84c0282ef47a7" dependencies = [ "ahash 0.8.3", "arrow-buffer", "arrow-data", "arrow-schema", "chrono", + "chrono-tz", "half 2.3.1", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "num", ] [[package]] name = "arrow-buffer" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78476cbe9e3f808dcecab86afe42d573863c63e149c62e6e379ed2522743e626" +checksum = "c5f66553e66e120ac4b21570368ee9ebf35ff3f5399f872b0667699e145678f5" dependencies = [ "half 2.3.1", "num", ] +[[package]] +name = "arrow-cast" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e6f3579dbf0d97c683d451b2550062b0f0e62a3169bf74238b5f59f44ad6d8" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "chrono", + "comfy-table 6.2.0", + "lexical-core", + "num", +] + +[[package]] +name = "arrow-csv" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373579c4c1a8f5307d3125b7a89c700fcf8caf85821c77eb4baab3855ae0aba5" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + [[package]] name = "arrow-data" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d916feee158c485dad4f701cba31bc9a90a8db87d9df8e2aa8adc0c20a2bbb9" +checksum = "61bc8df9912cca6642665fdf989d6fa0de2570f18a7f709bcf59d29de96d2097" dependencies = [ "arrow-buffer", "arrow-schema", @@ -205,17 +250,84 @@ dependencies = [ "serde", ] +[[package]] +name = "arrow-ipc" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0105dcf5f91daa7182d87b713ee0b32b3bfc88e0c48e7dc3e9d6f1277a07d1ae" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e73134fb5b5ec8770f8cbb214c2c487b2d350081e403ca4eeeb6f8f5e19846ac" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.3.1", + "indexmap 1.9.3", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f25bc66e18d4c2aa1fe2f9bb03e2269da60e636213210385ae41a107f9965a" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half 2.3.1", + "num", +] + +[[package]] +name = "arrow-row" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1095ff85ea4f5ff02d17b30b089de31b51a50be01c6b674f0a0509ab771232f1" +dependencies = [ + "ahash 0.8.3", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half 2.3.1", + "hashbrown 0.13.2", +] + [[package]] name = "arrow-schema" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9406eb7834ca6bd8350d1baa515d18b9fcec487eddacfb62f5e19511f7bd37" +checksum = "25187bbef474151a2e4ddec67b9e34bda5cbfba292dc571392fa3a1f71ff5a82" +dependencies = [ + "bitflags 2.4.0", +] [[package]] name = "arrow-select" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6593a01586751c74498495d2f5a01fcd438102b52965c11dd98abf4ebcacef37" +checksum = "fd0d4ee884aec3aa05e41478e3cd312bf609de9babb5d187a43fb45931da4da4" dependencies = [ "arrow-array", "arrow-buffer", @@ -224,6 +336,21 @@ dependencies = [ "num", ] +[[package]] +name = "arrow-string" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6d71c3ffe4c07e66ce8fdc6aed5b00e0e60c5144911879b10546f5b72d8fa1c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "regex", + "regex-syntax 0.7.5", +] + [[package]] name = "arrow2" version = "0.17.4" @@ -243,14 +370,14 @@ dependencies = [ "hash_hasher", "lexical-core", "lz4", - "multiversion 0.7.3", + "multiversion", "num-traits", "regex", "regex-syntax 0.6.29", "rustc_version", "simdutf8", "strength_reduce", - "zstd 0.12.3+zstd.1.5.2", + "zstd", ] [[package]] @@ -266,9 +393,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.3.15" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +checksum = "d495b6dc0184693324491a5ac05f559acc97bf937ab31d7a1c33dd0016be6d2b" dependencies = [ "bzip2", "flate2", @@ -277,13 +404,16 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", + "xz2", + "zstd", + "zstd-safe", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ "event-listener", ] @@ -360,18 +490,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] name = "async-trait" -version = "0.1.71" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -415,9 +545,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -436,9 +566,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" [[package]] name = "bb8" @@ -532,7 +662,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -546,16 +676,7 @@ dependencies = [ "cc", "cfg-if", "constant_time_eq", - "digest 0.10.7", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", + "digest", ] [[package]] @@ -669,22 +790,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -728,11 +849,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -758,9 +880,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "d87d9d13be47a5b7c3907137f1290b0459a7f80efb26be8c52afb11963bccb02" dependencies = [ "android-tzdata", "iana-time-zone", @@ -769,7 +891,29 @@ dependencies = [ "serde", "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets", +] + +[[package]] +name = "chrono-tz" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1369bc6b9e9a7dfdae2055f6ec151fe9c554a9d23d357c0237cee2e25eaabb7" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2f5ebdc942f57ed96d560a6d1a459bae5851102a25d5bf89dc04ae453e31ecf" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", ] [[package]] @@ -780,7 +924,7 @@ checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", - "libloading 0.7.4", + "libloading", ] [[package]] @@ -912,6 +1056,7 @@ dependencies = [ "arrow", "connectorx", "libc", + "openssl", ] [[package]] @@ -1185,20 +1330,37 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.0", + "lock_api", + "once_cell", + "parking_lot_core 0.9.8", +] + [[package]] name = "datafusion" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a8411475928479fe57af18698626f0a44f3c29153e051dce45f7455c08a6d5" +checksum = "9992c267436551d40b52d65289b144712e7b0ebdc62c8c859fd1574e5f73efbb" dependencies = [ "ahash 0.8.3", "arrow", + "arrow-array", + "arrow-schema", "async-compression", "async-trait", "bytes", "bzip2", "chrono", + "dashmap", "datafusion-common", + "datafusion-execution", "datafusion-expr", "datafusion-optimizer", "datafusion-physical-expr", @@ -1207,61 +1369,83 @@ dependencies = [ "flate2", "futures", "glob", - "hashbrown 0.12.3", + "hashbrown 0.13.2", + "indexmap 1.9.3", "itertools", "lazy_static", "log", "num_cpus", "object_store", - "ordered-float 3.7.0", "parking_lot 0.12.1", "parquet", - "paste", "percent-encoding", "pin-project-lite", "rand 0.8.5", "smallvec", - "sqlparser 0.26.0", + "sqlparser 0.34.0", "tempfile", "tokio", "tokio-stream", "tokio-util 0.7.8", "url", - "uuid 1.4.0", + "uuid 1.4.1", + "xz2", + "zstd", ] [[package]] name = "datafusion-common" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ffcbc1f040c9ab99f41db1c743d95aff267bb2e7286aaa010738b7402251" +checksum = "c3be97f7a7c720cdbb71e9eeabf814fa6ad8102b9022390f6cac74d3b4af6392" dependencies = [ "arrow", + "arrow-array", "chrono", + "num_cpus", "object_store", - "ordered-float 3.7.0", "parquet", - "sqlparser 0.26.0", + "sqlparser 0.34.0", +] + +[[package]] +name = "datafusion-execution" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77c4b14b809b0e4c5bb101b6834504f06cdbb0d3c643400c61d0d844b33264e" +dependencies = [ + "dashmap", + "datafusion-common", + "datafusion-expr", + "hashbrown 0.13.2", + "log", + "object_store", + "parking_lot 0.12.1", + "rand 0.8.5", + "tempfile", + "url", ] [[package]] name = "datafusion-expr" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1883d9590d303ef38fa295567e7fdb9f8f5f511fcc167412d232844678cd295c" +checksum = "e6ec7409bd45cf4fae6395d7d1024c8a97e543cadc88363e405d2aad5330e5e7" dependencies = [ "ahash 0.8.3", "arrow", "datafusion-common", - "log", - "sqlparser 0.26.0", + "lazy_static", + "sqlparser 0.34.0", + "strum", + "strum_macros 0.24.3", ] [[package]] name = "datafusion-optimizer" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2127d46d566ab3463d70da9675fc07b9d634be8d17e80d0e1ce79600709fe651" +checksum = "64b537c93f87989c212db92a448a0f5eb4f0995e27199bb7687ae94f8b64a7a8" dependencies = [ "arrow", "async-trait", @@ -1269,18 +1453,21 @@ dependencies = [ "datafusion-common", "datafusion-expr", "datafusion-physical-expr", - "hashbrown 0.12.3", + "hashbrown 0.13.2", + "itertools", "log", + "regex-syntax 0.7.5", ] [[package]] name = "datafusion-physical-expr" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d108b6fe8eeb317ecad1d74619e8758de49cccc8c771b56c97962fd52eaae23" +checksum = "f60ee3f53340fdef36ee54d9e12d446ae2718b1d0196ac581f791d34808ec876" dependencies = [ "ahash 0.8.3", "arrow", + "arrow-array", "arrow-buffer", "arrow-schema", "blake2", @@ -1290,25 +1477,26 @@ dependencies = [ "datafusion-expr", "datafusion-row", "half 2.3.1", - "hashbrown 0.12.3", + "hashbrown 0.13.2", + "indexmap 1.9.3", "itertools", "lazy_static", + "libc", "md-5", - "num-traits", - "ordered-float 3.7.0", "paste", + "petgraph", "rand 0.8.5", "regex", - "sha2 0.10.7", + "sha2", "unicode-segmentation", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] name = "datafusion-row" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43537b6377d506e4788bf21e9ed943340e076b48ca4d077e6ea4405ca5e54a1c" +checksum = "d58fc64058aa3bcb00077a0d19474a0d584d31dec8c7ac3406868f485f659af9" dependencies = [ "arrow", "datafusion-common", @@ -1318,14 +1506,16 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244d08d4710e1088d9c0949c9b5b8d68d9cf2cde7203134a4cc389e870fe2354" +checksum = "1531f0314151a34bf6c0a83c7261525688b7c729876f53e7896b8f4ca8f57d07" dependencies = [ "arrow", + "arrow-schema", "datafusion-common", "datafusion-expr", - "sqlparser 0.26.0", + "log", + "sqlparser 0.34.0", ] [[package]] @@ -1338,23 +1528,23 @@ dependencies = [ ] [[package]] -name = "derive_utils" -version = "0.13.1" +name = "deranged" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ce151e1b790e3e36d767ae57691240feafe8b605e1c2fe081183d64ac1bff3" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.26", + "serde", ] [[package]] -name = "digest" -version = "0.9.0" +name = "derive_utils" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "9abcad25e9720609ccb3dcdb795d845e37d8ce34183330a9f48b03a1a71c8e21" dependencies = [ - "generic-array", + "proc-macro2", + "quote", + "syn 2.0.31", ] [[package]] @@ -1363,16 +1553,16 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "crypto-common", "subtle", ] [[package]] name = "dirs" -version = "3.0.2" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ "dirs-sys", ] @@ -1394,17 +1584,23 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encoding" @@ -1472,9 +1668,9 @@ checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] @@ -1488,7 +1684,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -1508,7 +1704,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -1532,9 +1728,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ "errno-dragonfly", "libc", @@ -1553,9 +1749,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0198b9d0078e0f30dedc7acbb21c974e838fc8fae3ee170128658a98cb2c1c04" +checksum = "6c8ff382b2fa527fb7fb06eeebfc5bbb3f17e3cc6b9d70b006c41daa8824adac" [[package]] name = "event-listener" @@ -1583,12 +1779,9 @@ checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] name = "fehler" @@ -1610,21 +1803,33 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flatbuffers" -version = "22.9.29" +version = "23.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce016b9901aef3579617931fbb2df8fc9a9f7cb95a16eb8acc8148209bb9e70" +checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" dependencies = [ "bitflags 1.3.2", - "thiserror", + "rustc_version", ] [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", "libz-sys", @@ -1692,7 +1897,7 @@ checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" dependencies = [ "frunk_proc_macro_helpers", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -1704,7 +1909,7 @@ dependencies = [ "frunk_core", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -1716,7 +1921,7 @@ dependencies = [ "frunk_core", "frunk_proc_macro_helpers", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -1787,7 +1992,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -1834,7 +2039,7 @@ dependencies = [ "serde", "serde_json", "thiserror", - "time 0.3.23", + "time 0.3.28", "tokio", "tokio-stream", "url", @@ -1877,9 +2082,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "glob" @@ -1889,9 +2094,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "h2" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -2009,7 +2214,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -2051,9 +2256,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2094,7 +2299,7 @@ dependencies = [ "http", "hyper", "log", - "rustls 0.20.8", + "rustls 0.20.9", "rustls-native-certs", "tokio", "tokio-rustls 0.23.4", @@ -2109,7 +2314,7 @@ dependencies = [ "futures-util", "http", "hyper", - "rustls 0.21.5", + "rustls 0.21.7", "tokio", "tokio-rustls 0.24.1", ] @@ -2219,18 +2424,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5305557fa27b460072ae15ce07617e999f5879f14d376c8449f0bfb9f9d8e91e" dependencies = [ "derive_utils", - "syn 2.0.26", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.2", - "libc", - "windows-sys", + "syn 2.0.31", ] [[package]] @@ -2250,28 +2444,30 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "j4rs" -version = "0.13.0" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de204777df8f1b7ddd414468755d6a7e5919ad62834aca23bf6166ecb557fac9" +checksum = "76cc9c1648a1cc940ac10c19f56e50bee15344590e10f220899d955db5f87ac2" dependencies = [ "cesu8", "dirs", + "dunce", "fs_extra", + "glob", "java-locator", "jni-sys", "lazy_static", "libc", - "libloading 0.6.7", + "libloading", "log", "serde", "serde_json", - "sha2 0.9.9", + "sha2", ] [[package]] @@ -2421,16 +2617,6 @@ dependencies = [ "bindgen", ] -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if", - "winapi", -] - [[package]] name = "libloading" version = "0.7.4" @@ -2460,9 +2646,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.9" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" dependencies = [ "cc", "pkg-config", @@ -2471,9 +2657,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "lock_api" @@ -2487,9 +2673,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru" @@ -2520,6 +2706,17 @@ dependencies = [ "libc", ] +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "matrixmultiply" version = "0.3.7" @@ -2536,7 +2733,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -2553,9 +2750,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memmap2" @@ -2617,36 +2814,16 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "multiversion" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025c962a3dd3cc5e0e520aa9c612201d127dcdf28616974961a649dca64f5373" -dependencies = [ - "multiversion-macros 0.6.1", -] - [[package]] name = "multiversion" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2c7b9d7fe61760ce5ea19532ead98541f6b4c495d87247aff9826445cf6872a" dependencies = [ - "multiversion-macros 0.7.3", + "multiversion-macros", "target-features", ] -[[package]] -name = "multiversion-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "multiversion-macros" version = "0.7.3" @@ -2715,12 +2892,12 @@ dependencies = [ "serde", "serde_json", "sha1", - "sha2 0.10.7", + "sha2", "smallvec", "subprocess", "thiserror", - "time 0.3.23", - "uuid 1.4.0", + "time 0.3.28", + "uuid 1.4.1", ] [[package]] @@ -2819,9 +2996,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -2830,9 +3007,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -2882,9 +3059,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", "libm", @@ -2911,9 +3088,9 @@ dependencies = [ [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -2950,19 +3127,13 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openssl" -version = "0.10.55" +version = "0.10.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "cfg-if", "foreign-types", "libc", @@ -2979,7 +3150,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -2988,14 +3159,24 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "300.1.3+3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd2c101a165fff9935e34def4669595ab1c7847943c42be86e21503e482be107" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -3041,18 +3222,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ordered-float" -version = "3.7.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc2dbde8f8a79f2102cc474ceb0ad68e3b80b85289ea62389b60e66777e4213" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" dependencies = [ "num-traits", ] @@ -3116,34 +3288,52 @@ dependencies = [ [[package]] name = "parquet" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf8fa7ab6572791325a8595f55dc532dde88b996ae10a5ca8a2db746784ecc4" +checksum = "d6a656fcc17e641657c955742c689732684e096f790ff30865d9f8dcc39f7c4a" dependencies = [ "ahash 0.8.3", - "arrow", - "base64 0.13.1", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64 0.21.3", "brotli", "bytes", "chrono", "flate2", "futures", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "lz4", "num", "num-bigint", + "object_store", + "paste", "seq-macro", "snap", "thrift", "tokio", - "zstd 0.11.2+zstd.1.5.2", + "twox-hash", + "zstd", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +dependencies = [ + "regex", ] [[package]] name = "paste" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "peeking_take_while" @@ -3166,6 +3356,16 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.0.0", +] + [[package]] name = "phf" version = "0.11.2" @@ -3175,6 +3375,26 @@ dependencies = [ "phf_shared", ] +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + [[package]] name = "phf_shared" version = "0.11.2" @@ -3186,9 +3406,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3263,7 +3483,7 @@ checksum = "f967c901fa5da4ca7f64e813d1268488ba97e9b3004cefc579ff851c197a1138" dependencies = [ "arrow2", "hashbrown 0.14.0", - "multiversion 0.7.3", + "multiversion", "num-traits", "polars-error", "thiserror", @@ -3422,7 +3642,7 @@ dependencies = [ "rayon", "regex", "smartstring", - "strum_macros 0.25.1", + "strum_macros 0.25.2", "version_check", ] @@ -3490,9 +3710,9 @@ dependencies = [ [[package]] name = "postgres" -version = "0.19.5" +version = "0.19.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bed5017bc2ff49649c0075d0d7a9d676933c1292480c1d137776fb205b5cd18" +checksum = "7915b33ed60abc46040cbcaa25ffa1c7ec240668e0477c4f3070786f5916d451" dependencies = [ "bytes", "fallible-iterator", @@ -3530,11 +3750,11 @@ dependencies = [ [[package]] name = "postgres-protocol" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b7fa9f396f51dffd61546fd8573ee20592287996568e6175ceb0f8699ad75d" +checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520" dependencies = [ - "base64 0.21.2", + "base64 0.21.3", "byteorder", "bytes", "fallible-iterator", @@ -3542,15 +3762,15 @@ dependencies = [ "md-5", "memchr", "rand 0.8.5", - "sha2 0.10.7", + "sha2", "stringprep", ] [[package]] name = "postgres-types" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f028f05971fe20f512bcc679e2c10227e57809a3af86a7606304435bc8896cd6" +checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" dependencies = [ "bytes", "chrono", @@ -3608,9 +3828,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] @@ -3646,9 +3866,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.29" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -3850,25 +4070,25 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.1" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", ] [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", ] [[package]] @@ -3879,9 +4099,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "rend" @@ -3894,11 +4114,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" dependencies = [ - "base64 0.21.2", + "base64 0.21.3", "bytes", "encoding_rs", "futures-core", @@ -3915,7 +4135,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.5", + "rustls 0.21.7", "rustls-pemfile 1.0.3", "serde", "serde_json", @@ -3969,7 +4189,7 @@ dependencies = [ "rkyv_derive", "seahash", "tinyvec", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -4001,14 +4221,12 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.30.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0446843641c69436765a35a5a77088e28c2e6a12da93e84aa3ab1cd4aa5a042" +checksum = "a4c4216490d5a413bc6d10fa4742bd7d4955941d062c0ef873141d6b0e7b30fd" dependencies = [ "arrayvec", "borsh", - "bytecheck", - "byteorder", "bytes", "num-traits", "postgres", @@ -4020,9 +4238,9 @@ dependencies = [ [[package]] name = "rust_decimal_macros" -version = "1.30.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca5c398d85f83b9a44de754a2048625a8c5eafcf070da7b8f116b685e2f6608" +checksum = "86444b802de0b10ac5e563b5ddb43b541b9705de4e01a50e82194d2b183c1835" dependencies = [ "quote", "rust_decimal", @@ -4051,13 +4269,12 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.38.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "errno", - "io-lifetimes", "libc", "linux-raw-sys", "windows-sys", @@ -4065,9 +4282,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" dependencies = [ "log", "ring", @@ -4077,9 +4294,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", @@ -4114,14 +4331,14 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.3", ] [[package]] name = "rustls-webpki" -version = "0.101.1" +version = "0.101.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" dependencies = [ "ring", "untrusted", @@ -4129,15 +4346,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -4174,9 +4391,9 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" @@ -4196,9 +4413,9 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -4209,9 +4426,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -4219,21 +4436,21 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "seq-macro" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63134939175b3131fe4d2c131b103fd42f25ccca89423d43b5e4f267920ccf03" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.171" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -4250,20 +4467,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.171" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] name = "serde_json" -version = "1.0.102" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ "itoa", "ryu", @@ -4290,20 +4507,7 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] @@ -4314,20 +4518,20 @@ checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b824b6e687aff278cdbf3b36f07aa52d4bd4099699324d5da86a2ebce3aa00b3" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" dependencies = [ "libc", "signal-hook-registry", @@ -4361,15 +4565,15 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -4456,11 +4660,12 @@ dependencies = [ [[package]] name = "sqlparser" -version = "0.26.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86be66ea0b2b22749cfa157d16e2e84bf793e626a3375f4d378dc289fa03affb" +checksum = "37d3706eefb17039056234df6b566b0014f303f867f2656108334a55b8096f59" dependencies = [ "log", + "sqlparser_derive", ] [[package]] @@ -4472,6 +4677,17 @@ dependencies = [ "log", ] +[[package]] +name = "sqlparser_derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55fe75cb4a364c7f7ae06c7dbbc8d84bddd85d6cdf9975963c3935bc1991761e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4498,10 +4714,11 @@ checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" [[package]] name = "stringprep" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -4523,6 +4740,9 @@ name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros 0.24.3", +] [[package]] name = "strum_macros" @@ -4539,15 +4759,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.25.1" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6069ca09d878a33f883cc06aaa9718ede171841d3832450354410b718b097232" +checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -4602,9 +4822,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.26" +version = "2.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ "proc-macro2", "quote", @@ -4613,9 +4833,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.29.4" +version = "0.29.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751e810399bba86e9326f5762b7f32ac5a085542df78da6a78d94e07d14d7c11" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" dependencies = [ "cfg-if", "core-foundation-sys", @@ -4639,11 +4859,10 @@ checksum = "06f6b473c37f9add4cf1df5b4d66a8ef58ab6c895f1a3b3f949cf3e21230140e" [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ - "autocfg", "cfg-if", "fastrand", "redox_syscall 0.3.5", @@ -4671,33 +4890,33 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] name = "thrift" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" dependencies = [ "byteorder", "integer-encoding", - "ordered-float 1.1.1", + "ordered-float", ] [[package]] @@ -4745,10 +4964,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.23" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" dependencies = [ + "deranged", "itoa", "libc", "num_threads", @@ -4765,9 +4985,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" dependencies = [ "time-core", ] @@ -4808,11 +5028,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", @@ -4820,7 +5039,7 @@ dependencies = [ "num_cpus", "parking_lot 0.12.1", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.3", "tokio-macros", "windows-sys", ] @@ -4833,7 +5052,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -4860,9 +5079,9 @@ dependencies = [ [[package]] name = "tokio-postgres" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e89f6234aa8fd43779746012fcf53603cdb91fdd8399aa0de868c2d56b6dde1" +checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8" dependencies = [ "async-trait", "byteorder", @@ -4877,9 +5096,11 @@ dependencies = [ "pin-project-lite", "postgres-protocol", "postgres-types", + "rand 0.8.5", "socket2 0.5.3", "tokio", "tokio-util 0.7.8", + "whoami", ] [[package]] @@ -4888,7 +5109,7 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.8", + "rustls 0.20.9", "tokio", "webpki", ] @@ -4899,7 +5120,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.5", + "rustls 0.21.7", "tokio", ] @@ -4979,7 +5200,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.31", ] [[package]] @@ -5055,9 +5276,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -5066,9 +5287,9 @@ dependencies = [ [[package]] name = "urlencoding" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "uuid" @@ -5082,9 +5303,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom 0.2.10", ] @@ -5109,9 +5330,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -5222,9 +5443,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" dependencies = [ "ring", "untrusted", @@ -5232,22 +5453,30 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix", +] + +[[package]] +name = "whoami" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" +dependencies = [ + "wasm-bindgen", + "web-sys", ] [[package]] @@ -5314,9 +5543,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -5329,53 +5558,54 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys", ] [[package]] @@ -5393,6 +5623,15 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" +[[package]] +name = "xz2" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + [[package]] name = "yup-oauth2" version = "7.0.1" @@ -5409,12 +5648,12 @@ dependencies = [ "itertools", "log", "percent-encoding", - "rustls 0.20.8", + "rustls 0.20.9", "rustls-pemfile 0.3.0", "seahash", "serde", "serde_json", - "time 0.3.23", + "time 0.3.28", "tokio", "tower-service", "url", @@ -5422,37 +5661,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.11.2+zstd.1.5.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "zstd-safe 5.0.2+zstd.1.5.2", -] - -[[package]] -name = "zstd" -version = "0.12.3+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" -dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", + "zstd-safe", ] [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", diff --git a/Cargo.toml b/Cargo.toml index 8660f3f7e1..2b62598fd8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,5 @@ debug = true lto = true [workspace.dependencies] +arrow = {version = "40", features = ["prettyprint", "ffi"]} arrow2 = {version = "0.17", default-features = false} diff --git a/README.md b/README.md index 88bc5b241a..4aeb0c9708 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ The function will partition the query by **evenly** splitting the specified colu ConnectorX will assign one thread for each partition to load and write data in parallel. Currently, we support partitioning on **numerical** columns (**cannot contain NULL**) for **SPJA** queries. -**Experimental: We are now providing federated query support (PostgreSQL only and do not support partition for now), you can write a single query to join tables from two or more databases! (JRE >= 1.8 is required)** +**Experimental: We are now providing federated query support (PostgreSQL only and do not support partition for now), you can write a single query to join tables from two or more databases! (JRE >= 1.9 is required)** ```python import connectorx as cx diff --git a/benchmarks/tpch-fed.py b/benchmarks/tpch-fed.py index f79a83370f..c4ccebca1d 100644 --- a/benchmarks/tpch-fed.py +++ b/benchmarks/tpch-fed.py @@ -1,36 +1,69 @@ """ Usage: - tpch-fed.py --file= + tpch-fed.py [--file=] [--dir=] [--runs=] [--print] Options: - --file= Query file. + --file= Query file. + --dir= Query path. + --runs= # runs [default: 1]. + --print Print query result. -h --help Show this screen. --version Show version. """ -import os +import os +import sys +import time import connectorx as cx from contexttimer import Timer from docopt import docopt -import pandas as pd +from pathlib import Path + +def run_query_from_file(query_file, doprint=False, ntries=0): + with open(query_file, "r") as f: + sql = f.read() + print(f"file: {query_file}") + try: + with Timer() as timer: + df = cx.read_sql(db_map, sql, return_type="arrow") + print(f"time in total: {timer.elapsed:.2f}, {len(df)} rows, {len(df.columns)} cols") + if doprint: + print(df) + del df + # print(df.schema) + # print(df) + except RuntimeError as e: + print(e) + if ntries >= 5: + raise + print("retry in 10 seconds...") + sys.stdout.flush() + time.sleep(10) + run_query_from_file(query_file, ntries+1) + + sys.stdout.flush() if __name__ == "__main__": args = docopt(__doc__, version="Naval Fate 2.0") query_file = args["--file"] - db_map = { - "db1": os.environ["DB1"], - "db2": os.environ["DB2"], - } - print(f"dbs: {db_map}") + db_map = {} + db_conns = os.environ["FED_CONN"] + for conn in db_conns.split(','): + db_map[conn.split('=', 1)[0]] = conn.split('=', 1)[1] - with open(query_file, "r") as f: - sql = f.read() - print(f"file: {query_file}") + print(f"dbs: {db_map}") - with Timer() as timer: - df = cx.read_sql(db_map, sql, return_type="pandas") - print("time in total:", timer.elapsed) + for i in range(int(args["--runs"])): + print(f"=============== run {i} ================") + print() + sys.stdout.flush() + if args["--file"]: + filename = args["--file"] + run_query_from_file(filename, args["--print"]) + elif args["--dir"]: + for filename in sorted(Path(args["--dir"]).glob("q*.sql")): + run_query_from_file(filename, args["--print"]) + time.sleep(2) - print(df) diff --git a/connectorx-cpp/Cargo.toml b/connectorx-cpp/Cargo.toml index ae0c143e10..05944b4ed0 100644 --- a/connectorx-cpp/Cargo.toml +++ b/connectorx-cpp/Cargo.toml @@ -9,7 +9,8 @@ license = "MIT" [dependencies] libc = "0.2" connectorx = {path = "../connectorx", default-features = false} -arrow = {version = "26", features = ["prettyprint", "ffi"]} +arrow = {workspace = true} +openssl = {version = "0.10", features = ["vendored"]} [lib] crate-type = ["cdylib"] diff --git a/connectorx-cpp/src/lib.rs b/connectorx-cpp/src/lib.rs index 28a5134cfe..1147a970da 100644 --- a/connectorx-cpp/src/lib.rs +++ b/connectorx-cpp/src/lib.rs @@ -1,12 +1,13 @@ mod plan; -use arrow::ffi::{ArrowArray, FFI_ArrowArray, FFI_ArrowSchema}; +use arrow::ffi::{FFI_ArrowArray, FFI_ArrowSchema}; use connectorx::prelude::*; use libc::c_char; use std::collections::HashMap; use std::convert::TryFrom; use std::env; use std::ffi::{CStr, CString}; +use std::sync::Arc; #[repr(C)] pub struct CXSlice { @@ -43,6 +44,8 @@ pub struct CXConnectionInfo { conn: *const c_char, schema: CXSlice, is_local: bool, + jdbc_url: *const c_char, + jdbc_driver: *const c_char, } #[repr(C)] @@ -94,10 +97,20 @@ pub unsafe extern "C" fn connectorx_rewrite( db_map.insert(name.to_string(), source_info); } else { let conn = unsafe { CStr::from_ptr(p.conn) }.to_str().unwrap(); + let jdbc_url = match p.jdbc_url.is_null() { + true => "", + false => unsafe { CStr::from_ptr(p.jdbc_url) }.to_str().unwrap(), + }; + let jdbc_driver = match p.jdbc_driver.is_null() { + true => "", + false => unsafe { CStr::from_ptr(p.jdbc_driver) }.to_str().unwrap(), + }; // println!("name: {:?}, conn: {:?}", name, conn); let source_info = FederatedDataSourceInfo::new_from_conn_str( SourceConn::try_from(conn).unwrap(), p.is_local, + jdbc_url, + jdbc_driver, ); db_map.insert(name.to_string(), source_info); } @@ -183,9 +196,13 @@ pub unsafe extern "C" fn connectorx_scan(conn: *const c_char, query: *const c_ch let mut cols = vec![]; for array in rb.columns() { - let data = array.data().clone(); - let array = ArrowArray::try_new(data).expect("c ptr"); - let (array_ptr, schema_ptr) = ArrowArray::into_raw(array); + let data = array.to_data(); + let array = Arc::new(FFI_ArrowArray::new(&data)); + let schema = Arc::new( + arrow::ffi::FFI_ArrowSchema::try_from(data.data_type()).expect("export schema c"), + ); + let array_ptr = Arc::into_raw(array); + let schema_ptr = Arc::into_raw(schema); let cx_array = CXArray { array: array_ptr, @@ -274,9 +291,13 @@ pub unsafe extern "C" fn connectorx_get_schema( let (empty_batch, names) = arrow_iter.get_schema(); let mut cols = vec![]; for array in empty_batch.columns() { - let data = array.data().clone(); - let array = ArrowArray::try_new(data).expect("c ptr"); - let (array_ptr, schema_ptr) = ArrowArray::into_raw(array); + let data = array.to_data(); + let array = Arc::new(arrow::ffi::FFI_ArrowArray::new(&data)); + let schema = Arc::new( + arrow::ffi::FFI_ArrowSchema::try_from(data.data_type()).expect("export schema c"), + ); + let array_ptr = Arc::into_raw(array); + let schema_ptr = Arc::into_raw(schema); let cx_array = CXArray { array: array_ptr, schema: schema_ptr, @@ -317,9 +338,12 @@ pub unsafe extern "C" fn connectorx_iter_next( let mut cols = vec![]; for array in rb.columns() { - let data = array.data().clone(); - let array = ArrowArray::try_new(data).expect("c ptr"); - let (array_ptr, schema_ptr) = ArrowArray::into_raw(array); + let data = array.to_data(); + let array = Arc::new(arrow::ffi::FFI_ArrowArray::new(&data)); + let schema = + Arc::new(FFI_ArrowSchema::try_from(data.data_type()).expect("export schema c")); + let array_ptr = Arc::into_raw(array); + let schema_ptr = Arc::into_raw(schema); let cx_array = CXArray { array: array_ptr, @@ -334,3 +358,8 @@ pub unsafe extern "C" fn connectorx_iter_next( None => std::ptr::null_mut(), } } + +#[no_mangle] +pub unsafe extern "C" fn connectorx_set_thread_num(num: usize) { + set_global_num_thread(num); +} diff --git a/connectorx-python/Cargo.lock b/connectorx-python/Cargo.lock index 7b0284e13f..50171df3c3 100644 --- a/connectorx-python/Cargo.lock +++ b/connectorx-python/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.17.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -23,29 +23,29 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e6e951cfbb2db8de1828d49073a113a29fd7117b1596caa781a258c7e38d72" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if 1.0.0", "const-random", - "getrandom 0.2.7", + "getrandom 0.2.10", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] @@ -71,6 +71,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[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" @@ -91,9 +97,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.65" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "argminmax" @@ -112,89 +118,125 @@ checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" -version = "0.4.12" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] -name = "arrayvec" -version = "0.7.2" +name = "arrow" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "6619cab21a0cdd8c9b9f1d9e09bfaa9b1974e5ef809a6566aef0b998caf38ace" +dependencies = [ + "ahash 0.8.3", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", +] [[package]] -name = "arrow" -version = "26.0.0" +name = "arrow-arith" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e2bcd431a4aa0ff003fdd2dc21c78cfb42f31459c89d2312c2746fe17a5ac" +checksum = "e0dc95485623a76e00929bda8caa40c1f838190952365c4f43a7b9ae86d03e94" dependencies = [ - "ahash 0.8.0", "arrow-array", "arrow-buffer", "arrow-data", "arrow-schema", - "arrow-select", - "bitflags 1.3.2", "chrono", - "comfy-table 6.1.0", - "csv", - "flatbuffers", - "half 2.1.0", - "hashbrown 0.12.3", - "indexmap 1.9.1", - "lazy_static", - "lexical-core", - "multiversion 0.6.1", + "half 2.3.1", "num", - "regex", - "regex-syntax 0.6.27", - "serde_json", ] [[package]] name = "arrow-array" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9044300874385f19e77cbf90911e239bd23630d8f23bb0f948f9067998a13b7" +checksum = "3267847f53d3042473cfd2c769afd8d74a6d7d201fc3a34f5cb84c0282ef47a7" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow-buffer", "arrow-data", "arrow-schema", "chrono", - "half 2.1.0", - "hashbrown 0.12.3", + "chrono-tz", + "half 2.3.1", + "hashbrown 0.13.2", "num", ] [[package]] name = "arrow-buffer" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78476cbe9e3f808dcecab86afe42d573863c63e149c62e6e379ed2522743e626" +checksum = "c5f66553e66e120ac4b21570368ee9ebf35ff3f5399f872b0667699e145678f5" dependencies = [ - "half 2.1.0", + "half 2.3.1", "num", ] +[[package]] +name = "arrow-cast" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e6f3579dbf0d97c683d451b2550062b0f0e62a3169bf74238b5f59f44ad6d8" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "chrono", + "comfy-table 6.2.0", + "lexical-core", + "num", +] + +[[package]] +name = "arrow-csv" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373579c4c1a8f5307d3125b7a89c700fcf8caf85821c77eb4baab3855ae0aba5" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + [[package]] name = "arrow-data" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d916feee158c485dad4f701cba31bc9a90a8db87d9df8e2aa8adc0c20a2bbb9" +checksum = "61bc8df9912cca6642665fdf989d6fa0de2570f18a7f709bcf59d29de96d2097" dependencies = [ "arrow-buffer", "arrow-schema", - "half 2.1.0", + "half 2.3.1", "num", ] @@ -208,17 +250,84 @@ dependencies = [ "serde", ] +[[package]] +name = "arrow-ipc" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0105dcf5f91daa7182d87b713ee0b32b3bfc88e0c48e7dc3e9d6f1277a07d1ae" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e73134fb5b5ec8770f8cbb214c2c487b2d350081e403ca4eeeb6f8f5e19846ac" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.3.1", + "indexmap 1.9.3", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f25bc66e18d4c2aa1fe2f9bb03e2269da60e636213210385ae41a107f9965a" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half 2.3.1", + "num", +] + +[[package]] +name = "arrow-row" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1095ff85ea4f5ff02d17b30b089de31b51a50be01c6b674f0a0509ab771232f1" +dependencies = [ + "ahash 0.8.3", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half 2.3.1", + "hashbrown 0.13.2", +] + [[package]] name = "arrow-schema" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9406eb7834ca6bd8350d1baa515d18b9fcec487eddacfb62f5e19511f7bd37" +checksum = "25187bbef474151a2e4ddec67b9e34bda5cbfba292dc571392fa3a1f71ff5a82" +dependencies = [ + "bitflags 2.4.0", +] [[package]] name = "arrow-select" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6593a01586751c74498495d2f5a01fcd438102b52965c11dd98abf4ebcacef37" +checksum = "fd0d4ee884aec3aa05e41478e3cd312bf609de9babb5d187a43fb45931da4da4" dependencies = [ "arrow-array", "arrow-buffer", @@ -227,13 +336,28 @@ dependencies = [ "num", ] +[[package]] +name = "arrow-string" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6d71c3ffe4c07e66ce8fdc6aed5b00e0e60c5144911879b10546f5b72d8fa1c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "regex", + "regex-syntax 0.7.5", +] + [[package]] name = "arrow2" version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59c468daea140b747d781a1da9f7db5f0a8e6636d4af20cc539e43d05b0604fa" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow-format", "bytemuck", "chrono", @@ -242,25 +366,25 @@ dependencies = [ "ethnum", "foreign_vec", "futures", - "getrandom 0.2.7", + "getrandom 0.2.10", "hash_hasher", "lexical-core", "lz4", - "multiversion 0.7.3", + "multiversion", "num-traits", "regex", - "regex-syntax 0.6.27", + "regex-syntax 0.6.29", "rustc_version", "simdutf8", "strength_reduce", - "zstd 0.12.4", + "zstd", ] [[package]] name = "async-channel" -version = "1.7.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", "event-listener", @@ -269,9 +393,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.3.15" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +checksum = "d495b6dc0184693324491a5ac05f559acc97bf937ab31d7a1c33dd0016be6d2b" dependencies = [ "bzip2", "flate2", @@ -280,13 +404,16 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", + "xz2", + "zstd", + "zstd-safe", ] [[package]] name = "async-lock" -version = "2.5.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ "event-listener", ] @@ -335,12 +462,13 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ - "async-stream-impl 0.3.3", + "async-stream-impl 0.3.5", "futures-core", + "pin-project-lite", ] [[package]] @@ -351,18 +479,18 @@ checksum = "25f9db3b38af870bf7e5cc649167533b493928e50744e2c30ae350230b414670" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] name = "async-stream-impl" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] @@ -373,7 +501,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -404,7 +532,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -417,9 +545,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.66" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -432,9 +560,15 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" [[package]] name = "bb8" @@ -466,9 +600,9 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aaf33151a6429fe9211d1b276eafdf70cdff28b071e76c0b0e1503221ea3744" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" dependencies = [ "num-bigint", "num-integer", @@ -534,84 +668,75 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.5", + "digest", ] [[package]] name = "blake3" -version = "1.3.3" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" +checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec", "cc", "cfg-if 1.0.0", "constant_time_eq", - "digest 0.10.5", + "digest", ] [[package]] name = "block-buffer" -version = "0.9.0" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "borsh" -version = "0.9.3" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" dependencies = [ "borsh-derive", - "hashbrown 0.11.2", + "hashbrown 0.13.2", ] [[package]] name = "borsh-derive" -version = "0.9.3" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate", "proc-macro2", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] name = "borsh-derive-internal" -version = "0.9.3" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] name = "borsh-schema-derive-internal" -version = "0.9.3" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -635,18 +760,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata 0.1.10", - "serde", -] - [[package]] name = "bufstream" version = "0.1.4" @@ -655,9 +768,9 @@ checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" [[package]] name = "built" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f346b6890a0dfa7266974910e7df2d5088120dd54721b9b0e5aae1ae5e05715" +checksum = "5b9c056b9ed43aee5e064b683aa1ec783e19c6acec7559e3ae931b7490472fbe" dependencies = [ "cargo-lock", "chrono", @@ -665,49 +778,50 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.11.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bytecheck" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11cac2c12b5adc6570dad2ee1b87eff4955dac476fe12d81e5fdd352e52406f" +checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" dependencies = [ "bytecheck_derive", "ptr_meta", + "simdutf8", ] [[package]] name = "bytecheck_derive" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e576ebe98e605500b3c8041bb888e966653577172df6dd97398714eb30b9bf" +checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] name = "bytemuck" -version = "1.12.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.2.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9e1f5fa78f69496407a27ae9ed989e3c3b072310286f5ef385525e4cbc24a9" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] @@ -743,17 +857,11 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - [[package]] name = "cargo-lock" -version = "7.1.0" +version = "8.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c408da54db4c50d4693f7e649c299bc9de9c23ead86249e5368830bb32a734b" +checksum = "031718ddb8f78aa5def78a09e90defe30151d1f6c672f937af4dd916429ed996" dependencies = [ "semver", "serde", @@ -769,11 +877,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -805,29 +914,51 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.22" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" +checksum = "d87d9d13be47a5b7c3907137f1290b0459a7f80efb26be8c52afb11963bccb02" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "serde", - "time 0.1.44", + "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets", +] + +[[package]] +name = "chrono-tz" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1369bc6b9e9a7dfdae2055f6ec151fe9c554a9d23d357c0237cee2e25eaabb7" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2f5ebdc942f57ed96d560a6d1a459bae5851102a25d5bf89dc04ae453e31ecf" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", ] [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ - "glob 0.3.0", + "glob", "libc", - "libloading 0.7.3", + "libloading", ] [[package]] @@ -847,18 +978,18 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.48" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" dependencies = [ "cc", ] [[package]] name = "comfy-table" -version = "6.1.0" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85914173c2f558d61613bfbbf1911f14e630895087a7ed2fafc0f5319e1536e7" +checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" dependencies = [ "strum", "strum_macros 0.24.3", @@ -879,19 +1010,20 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ - "cache-padded", + "crossbeam-utils", ] [[package]] name = "connection-string" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97faeec45f49581c458f8bf81992c5e3ec17d82cda99f59d3cea14eff62698d" +checksum = "8c4ecb0dc8c35d2c626e45ae70bbfcb1050b302f42bcdf025d913cc0c5a0b443" dependencies = [ + "js-sys", "wasm-bindgen", ] @@ -990,9 +1122,9 @@ dependencies = [ [[package]] name = "const-random" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" dependencies = [ "const-random-macro", "proc-macro-hack", @@ -1000,21 +1132,21 @@ dependencies = [ [[package]] name = "const-random-macro" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" dependencies = [ - "getrandom 0.2.7", - "lazy_static", + "getrandom 0.2.10", + "once_cell", "proc-macro-hack", "tiny-keccak", ] [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "core-foundation" @@ -1028,9 +1160,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpp_demangle" @@ -1043,9 +1175,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] @@ -1121,9 +1253,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -1131,9 +1263,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", @@ -1142,15 +1274,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.10" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", "memoffset", - "once_cell", "scopeguard", ] @@ -1166,12 +1297,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.11" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if 1.0.0", - "once_cell", ] [[package]] @@ -1192,9 +1322,9 @@ dependencies = [ [[package]] name = "crossterm_winapi" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ "winapi", ] @@ -1217,13 +1347,12 @@ dependencies = [ [[package]] name = "csv" -version = "1.1.6" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] @@ -1258,7 +1387,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -1269,23 +1398,40 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", - "syn 1.0.100", + "syn 1.0.109", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if 1.0.0", + "hashbrown 0.14.0", + "lock_api", + "once_cell", + "parking_lot_core 0.9.8", ] [[package]] name = "datafusion" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a8411475928479fe57af18698626f0a44f3c29153e051dce45f7455c08a6d5" +checksum = "9992c267436551d40b52d65289b144712e7b0ebdc62c8c859fd1574e5f73efbb" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow", + "arrow-array", + "arrow-schema", "async-compression", "async-trait", "bytes", "bzip2", "chrono", + "dashmap", "datafusion-common", + "datafusion-execution", "datafusion-expr", "datafusion-optimizer", "datafusion-physical-expr", @@ -1293,62 +1439,84 @@ dependencies = [ "datafusion-sql", "flate2", "futures", - "glob 0.3.0", - "hashbrown 0.12.3", + "glob", + "hashbrown 0.13.2", + "indexmap 1.9.3", "itertools", "lazy_static", "log", "num_cpus", "object_store", - "ordered-float 3.4.0", "parking_lot 0.12.1", "parquet", - "paste 1.0.9", "percent-encoding", "pin-project-lite", "rand 0.8.5", "smallvec", - "sqlparser 0.26.0", + "sqlparser 0.34.0", "tempfile", "tokio", "tokio-stream", - "tokio-util 0.7.4", + "tokio-util 0.7.8", "url", - "uuid 1.2.1", + "uuid 1.4.1", + "xz2", + "zstd", ] [[package]] name = "datafusion-common" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ffcbc1f040c9ab99f41db1c743d95aff267bb2e7286aaa010738b7402251" +checksum = "c3be97f7a7c720cdbb71e9eeabf814fa6ad8102b9022390f6cac74d3b4af6392" dependencies = [ "arrow", + "arrow-array", "chrono", + "num_cpus", "object_store", - "ordered-float 3.4.0", "parquet", - "sqlparser 0.26.0", + "sqlparser 0.34.0", +] + +[[package]] +name = "datafusion-execution" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77c4b14b809b0e4c5bb101b6834504f06cdbb0d3c643400c61d0d844b33264e" +dependencies = [ + "dashmap", + "datafusion-common", + "datafusion-expr", + "hashbrown 0.13.2", + "log", + "object_store", + "parking_lot 0.12.1", + "rand 0.8.5", + "tempfile", + "url", ] [[package]] name = "datafusion-expr" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1883d9590d303ef38fa295567e7fdb9f8f5f511fcc167412d232844678cd295c" +checksum = "e6ec7409bd45cf4fae6395d7d1024c8a97e543cadc88363e405d2aad5330e5e7" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow", "datafusion-common", - "log", - "sqlparser 0.26.0", + "lazy_static", + "sqlparser 0.34.0", + "strum", + "strum_macros 0.24.3", ] [[package]] name = "datafusion-optimizer" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2127d46d566ab3463d70da9675fc07b9d634be8d17e80d0e1ce79600709fe651" +checksum = "64b537c93f87989c212db92a448a0f5eb4f0995e27199bb7687ae94f8b64a7a8" dependencies = [ "arrow", "async-trait", @@ -1356,18 +1524,21 @@ dependencies = [ "datafusion-common", "datafusion-expr", "datafusion-physical-expr", - "hashbrown 0.12.3", + "hashbrown 0.13.2", + "itertools", "log", + "regex-syntax 0.7.5", ] [[package]] name = "datafusion-physical-expr" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d108b6fe8eeb317ecad1d74619e8758de49cccc8c771b56c97962fd52eaae23" +checksum = "f60ee3f53340fdef36ee54d9e12d446ae2718b1d0196ac581f791d34808ec876" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow", + "arrow-array", "arrow-buffer", "arrow-schema", "blake2", @@ -1376,43 +1547,46 @@ dependencies = [ "datafusion-common", "datafusion-expr", "datafusion-row", - "half 2.1.0", - "hashbrown 0.12.3", + "half 2.3.1", + "hashbrown 0.13.2", + "indexmap 1.9.3", "itertools", "lazy_static", + "libc", "md-5", - "num-traits", - "ordered-float 3.4.0", - "paste 1.0.9", + "paste 1.0.14", + "petgraph 0.6.4", "rand 0.8.5", "regex", - "sha2 0.10.6", + "sha2", "unicode-segmentation", - "uuid 1.2.1", + "uuid 1.4.1", ] [[package]] name = "datafusion-row" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43537b6377d506e4788bf21e9ed943340e076b48ca4d077e6ea4405ca5e54a1c" +checksum = "d58fc64058aa3bcb00077a0d19474a0d584d31dec8c7ac3406868f485f659af9" dependencies = [ "arrow", "datafusion-common", - "paste 1.0.9", + "paste 1.0.14", "rand 0.8.5", ] [[package]] name = "datafusion-sql" -version = "14.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244d08d4710e1088d9c0949c9b5b8d68d9cf2cde7203134a4cc389e870fe2354" +checksum = "1531f0314151a34bf6c0a83c7261525688b7c729876f53e7896b8f4ca8f57d07" dependencies = [ "arrow", + "arrow-schema", "datafusion-common", "datafusion-expr", - "sqlparser 0.26.0", + "log", + "sqlparser 0.34.0", ] [[package]] @@ -1424,15 +1598,24 @@ dependencies = [ "uuid 0.8.2", ] +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +dependencies = [ + "serde", +] + [[package]] name = "derive_utils" -version = "0.11.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532b4c15dccee12c7044f1fcad956e98410860b22231e44a3b827464797ca7bf" +checksum = "9abcad25e9720609ccb3dcdb795d845e37d8ce34183330a9f48b03a1a71c8e21" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] @@ -1443,34 +1626,25 @@ checksum = "6207f46b33b2bf00858b0edb03d188d31a46fedfde4aa53a27d69fe25acd80cf" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.5" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer", "crypto-common", "subtle", ] [[package]] name = "dirs" -version = "3.0.2" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ "dirs-sys", ] @@ -1492,6 +1666,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "dyn-clone" version = "1.0.13" @@ -1500,9 +1680,9 @@ checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" [[package]] name = "either" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encoding" @@ -1570,9 +1750,9 @@ checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if 1.0.0", ] @@ -1586,34 +1766,34 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] name = "enumflags2" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "env_logger" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", "humantime", @@ -1628,11 +1808,32 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "ethnum" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0198b9d0078e0f30dedc7acbb21c974e838fc8fae3ee170128658a98cb2c1c04" +checksum = "6c8ff382b2fa527fb7fb06eeebfc5bbb3f17e3cc6b9d70b006c41daa8824adac" [[package]] name = "event-listener" @@ -1660,12 +1861,9 @@ checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" [[package]] name = "fastrand" -version = "1.8.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] name = "fehler" @@ -1684,30 +1882,42 @@ checksum = "ccb5acb1045ebbfa222e2c50679e392a71dd77030b78fb0189f2d9c5974400f9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + [[package]] name = "fixedbitset" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flatbuffers" -version = "22.9.29" +version = "23.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce016b9901aef3579617931fbb2df8fc9a9f7cb95a16eb8acc8148209bb9e70" +checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" dependencies = [ "bitflags 1.3.2", - "thiserror", + "rustc_version", ] [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", "libz-sys", @@ -1743,18 +1953,18 @@ checksum = "ee1b05cbd864bcaecbd3455d6d967862d446e4ebfc3c2e5e5b9841e53cba6673" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] [[package]] name = "frunk" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd67cf7d54b7e72d0ea76f3985c3747d74aee43e0218ad993b7903ba7a5395e" +checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287" dependencies = [ "frunk_core", "frunk_derives", @@ -1763,62 +1973,50 @@ dependencies = [ [[package]] name = "frunk_core" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1246cf43ec80bf8b2505b5c360b8fb999c97dabd17dbb604d85558d5cbc25482" +checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6" [[package]] name = "frunk_derives" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dbc4f084ec5a3f031d24ccedeb87ab2c3189a2f33b8d070889073837d5ea09e" +checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" dependencies = [ "frunk_proc_macro_helpers", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "frunk_proc_macro_helpers" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f11257f106c6753f5ffcb8e601fb39c390a088017aaa55b70c526bff15f63e" +checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c" dependencies = [ "frunk_core", "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "frunk_proc_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a078bd8459eccbb85e0b007b8f756585762a72a9efc53f359b371c3b6351dbcc" -dependencies = [ - "frunk_core", - "frunk_proc_macros_impl", - "proc-macro-hack", -] - -[[package]] -name = "frunk_proc_macros_impl" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ffba99f0fa4f57e42f57388fbb9a0ca863bc2b4261f3c5570fed579d5df6c32" +checksum = "71b85a1d4a9a6b300b41c05e8e13ef2feca03e0334127f29eca9506a7fe13a93" dependencies = [ "frunk_core", "frunk_proc_macro_helpers", - "proc-macro-hack", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "fs_extra" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "funty" @@ -1882,7 +2080,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1921,15 +2119,15 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ab5966c98f6d4e71e247cda6a6d8497bc8a1df3a4ba9ee548087842cffc21d" dependencies = [ - "async-stream 0.3.3", + "async-stream 0.3.5", "hyper", - "hyper-rustls", + "hyper-rustls 0.23.2", "log", "reqwest", "serde", "serde_json", "thiserror", - "time 0.3.14", + "time 0.3.28", "tokio", "tokio-stream", "url", @@ -1938,9 +2136,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1959,9 +2157,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.7" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1972,27 +2170,21 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" - -[[package]] -name = "glob" -version = "0.2.11" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "h2" -version = "0.3.14" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -2000,10 +2192,10 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.1", + "indexmap 1.9.3", "slab", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.8", "tracing", ] @@ -2015,10 +2207,11 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "half" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6a9459c9c30b177b925162351f97e7d967c7ea8bab3b8352805327daf45554" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" dependencies = [ + "cfg-if 1.0.0", "crunchy", "num-traits", ] @@ -2047,13 +2240,22 @@ dependencies = [ "ahash 0.7.6", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", +] + [[package]] name = "hashbrown" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "allocator-api2", "rayon", ] @@ -2091,6 +2293,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + [[package]] name = "hex" version = "0.4.3" @@ -2103,7 +2311,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.5", + "digest", ] [[package]] @@ -2112,18 +2320,18 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.3", + "itoa", ] [[package]] @@ -2145,9 +2353,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2157,9 +2365,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.20" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -2170,9 +2378,9 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.3", + "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -2181,17 +2389,31 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", "log", - "rustls", + "rustls 0.20.9", "rustls-native-certs", "tokio", - "tokio-rustls", + "tokio-rustls 0.23.4", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls 0.21.7", + "tokio", + "tokio-rustls 0.24.1", ] [[package]] @@ -2202,15 +2424,25 @@ checksum = "71a816c97c42258aa5834d07590b718b4c9a598944cd39a52dc25b351185d678" [[package]] name = "iana-time-zone" -version = "0.1.50" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd911b35d940d2bd0bea0f9100068e5b97b51a1cbe13d13382f132e0365257a0" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ "android_system_properties", "core-foundation-sys", + "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", ] [[package]] @@ -2221,9 +2453,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2231,9 +2463,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -2268,7 +2500,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", "unindent", ] @@ -2280,8 +2512,8 @@ checksum = "de3886428c6400486522cf44b8626e7b94ad794c14390290f2a274dcf728a58f" dependencies = [ "ahash 0.7.6", "atty", - "indexmap 1.9.1", - "itoa 1.0.3", + "indexmap 1.9.3", + "itoa", "lazy_static", "log", "num-format", @@ -2307,21 +2539,19 @@ checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "io-enum" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e3306b0f260aad2872563eb0d5d1a59f2420fad270a661dce59a01e92d806b" +checksum = "5305557fa27b460072ae15ce07617e999f5879f14d376c8449f0bfb9f9d8e91e" dependencies = [ - "autocfg", "derive_utils", - "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "ipnet" -version = "2.5.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "itertools" @@ -2334,43 +2564,39 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.3" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "j4rs" -version = "0.13.0" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de204777df8f1b7ddd414468755d6a7e5919ad62834aca23bf6166ecb557fac9" +checksum = "76cc9c1648a1cc940ac10c19f56e50bee15344590e10f220899d955db5f87ac2" dependencies = [ "cesu8", "dirs", + "dunce", "fs_extra", + "glob", "java-locator", "jni-sys", "lazy_static", "libc", - "libloading 0.6.7", + "libloading", "log", "serde", "serde_json", - "sha2 0.9.9", + "sha2", ] [[package]] name = "java-locator" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62402993f775e51f6d3bab6d64b38aece6d15cbf37c845bda65005220fa0f9df" +checksum = "90003f2fd9c52f212c21d8520f1128da0080bad6fff16b68fe6e7f2f0c3780c2" dependencies = [ - "glob 0.2.11", + "glob", "lazy_static", ] @@ -2382,18 +2608,18 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" dependencies = [ "wasm-bindgen", ] @@ -2513,19 +2739,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if 1.0.0", - "winapi", -] - -[[package]] -name = "libloading" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if 1.0.0", "winapi", @@ -2533,9 +2749,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "libsqlite3-sys" @@ -2550,20 +2766,26 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" dependencies = [ "cc", "pkg-config", "vcpkg", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" + [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -2571,12 +2793,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru" @@ -2607,12 +2826,24 @@ dependencies = [ "libc", ] +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" dependencies = [ + "autocfg", "rawpointer", ] @@ -2622,7 +2853,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "digest 0.10.5", + "digest", ] [[package]] @@ -2639,15 +2870,15 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memmap2" -version = "0.5.7" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] @@ -2663,18 +2894,18 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -2684,23 +2915,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.36.1", + "windows-sys", ] [[package]] @@ -2709,36 +2940,16 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" -[[package]] -name = "multiversion" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025c962a3dd3cc5e0e520aa9c612201d127dcdf28616974961a649dca64f5373" -dependencies = [ - "multiversion-macros 0.6.1", -] - [[package]] name = "multiversion" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2c7b9d7fe61760ce5ea19532ead98541f6b4c495d87247aff9826445cf6872a" dependencies = [ - "multiversion-macros 0.7.3", + "multiversion-macros", "target-features", ] -[[package]] -name = "multiversion-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.100", -] - [[package]] name = "multiversion-macros" version = "0.7.3" @@ -2747,7 +2958,7 @@ checksum = "26a83d8500ed06d68877e9de1dde76c1dbb83885dcdbda4ef44ccbc3fbda2ac8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", "target-features", ] @@ -2772,7 +2983,7 @@ dependencies = [ "percent-encoding", "serde", "serde_json", - "socket2", + "socket2 0.4.9", "twox-hash", "url", ] @@ -2783,7 +2994,7 @@ version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9006c95034ccf7b903d955f210469119f6c3477fc9c9e7a7845ce38a3e665c2a" dependencies = [ - "base64", + "base64 0.13.1", "bigdecimal", "bindgen", "bitflags 1.3.2", @@ -2807,12 +3018,12 @@ dependencies = [ "serde", "serde_json", "sha1", - "sha2 0.10.6", + "sha2", "smallvec", "subprocess", "thiserror", - "time 0.3.14", - "uuid 1.2.1", + "time 0.3.28", + "uuid 1.4.1", ] [[package]] @@ -2826,9 +3037,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", @@ -2867,17 +3078,11 @@ dependencies = [ "libc", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -2903,9 +3108,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ "num-bigint", "num-complex", @@ -2917,9 +3122,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -2928,21 +3133,21 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] [[package]] name = "num-format" -version = "0.4.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafe4179722c2894288ee77a9f044f02811c86af699344c498b0840c698a2465" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.4.12", - "itoa 0.4.8", + "arrayvec", + "itoa", ] [[package]] @@ -2980,9 +3185,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", "libm", @@ -2990,11 +3195,11 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.2", "libc", ] @@ -3023,18 +3228,18 @@ dependencies = [ [[package]] name = "object" -version = "0.29.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] [[package]] name = "object_store" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce10a205d9f610ae3532943039c34c145930065ce0c4284134c897fe6073b1" +checksum = "ec9cd6ca25e796a49fa242876d1c4de36a24a6da5258e9f0bc062dbf5e81c53b" dependencies = [ "async-trait", "bytes", @@ -3052,9 +3257,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "oorandom" @@ -3062,19 +3267,13 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openssl" -version = "0.10.41" +version = "0.10.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "cfg-if 1.0.0", "foreign-types", "libc", @@ -3085,13 +3284,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] @@ -3102,20 +3301,19 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.22.0+1.1.1q" +version = "300.1.3+3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" +checksum = "cd2c101a165fff9935e34def4669595ab1c7847943c42be86e21503e482be107" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.75" +version = "0.9.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", @@ -3139,43 +3337,34 @@ dependencies = [ [[package]] name = "oracle" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a14566dfab26547f4ba4ace4fa28d731588328f2db0ec25b45d83c338b8fde8" +checksum = "cfe80334af1fbaea016fbef0af77f5fa32452362e29a039389b8c93737585003" dependencies = [ "cc", "chrono", "lazy_static", "oracle_procmacro", - "paste 1.0.9", + "paste 1.0.14", ] [[package]] name = "oracle_procmacro" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2951430cd2e8c58a69597854e235bada487abac85863ba782bf8c34ae7f6501" +checksum = "ad247f3421d57de56a0d0408d3249d4b1048a522be2013656d92f022c3d8af27" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.100", -] - -[[package]] -name = "ordered-float" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" -dependencies = [ - "num-traits", + "syn 1.0.109", ] [[package]] name = "ordered-float" -version = "3.4.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d84eb1409416d254e4a9c8fa56cc24701755025b458f0fcd8e59e1f5f40c23bf" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" dependencies = [ "num-traits", ] @@ -3197,7 +3386,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -3207,59 +3396,77 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", + "parking_lot_core 0.9.8", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi", ] [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.3.5", "smallvec", - "windows-sys 0.36.1", + "windows-targets", ] [[package]] name = "parquet" -version = "26.0.0" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf8fa7ab6572791325a8595f55dc532dde88b996ae10a5ca8a2db746784ecc4" +checksum = "d6a656fcc17e641657c955742c689732684e096f790ff30865d9f8dcc39f7c4a" dependencies = [ - "ahash 0.8.0", - "arrow", - "base64", + "ahash 0.8.3", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64 0.21.3", "brotli", "bytes", "chrono", "flate2", "futures", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "lz4", "num", "num-bigint", + "object_store", + "paste 1.0.14", "seq-macro", "snap", "thrift", "tokio", - "zstd 0.11.2+zstd.1.5.2", + "twox-hash", + "zstd", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +dependencies = [ + "regex", ] [[package]] @@ -3274,9 +3481,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "paste-impl" @@ -3295,18 +3502,18 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ - "base64", + "base64 0.13.1", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "petgraph" @@ -3314,33 +3521,63 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" dependencies = [ - "fixedbitset", - "indexmap 1.9.1", + "fixedbitset 0.2.0", + "indexmap 1.9.3", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset 0.4.2", + "indexmap 2.0.0", ] [[package]] name = "phf" -version = "0.11.1" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", + "rand 0.8.5", ] [[package]] name = "phf_shared" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3350,9 +3587,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "planus" @@ -3365,9 +3602,9 @@ dependencies = [ [[package]] name = "plotters" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" dependencies = [ "num-traits", "plotters-backend", @@ -3378,15 +3615,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" [[package]] name = "plotters-svg" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" dependencies = [ "plotters-backend", ] @@ -3397,7 +3634,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1362d4a136c0ebacb40d88a37ba361738b222fd8a2ee9340a3d8642f698c52b" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", "polars-core", "polars-io", "polars-lazy", @@ -3415,7 +3652,7 @@ checksum = "f967c901fa5da4ca7f64e813d1268488ba97e9b3004cefc579ff851c197a1138" dependencies = [ "arrow2", "hashbrown 0.14.0", - "multiversion 0.7.3", + "multiversion", "num-traits", "polars-error", "thiserror", @@ -3428,7 +3665,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b24f92fc5b167f668ff85ab9607dfa72e2c09664cacef59297ee8601dee60126" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow2", "bitflags 2.4.0", "chrono", @@ -3469,7 +3706,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92cab0df9f2a35702fa5aec99edfaabf9ae8e9cdd0acf69e143ad2d132f34f9c" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow2", "async-trait", "bytes", @@ -3500,9 +3737,9 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c33762ec2a55e01c9f8776b34db86257c70a0a3b3929bd4eb91a52aacf61456" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "bitflags 2.4.0", - "glob 0.3.0", + "glob", "once_cell", "polars-arrow", "polars-core", @@ -3562,7 +3799,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb67b014f0295e8e9dbb84404a91d666d477b3bc248a2ed51bc442833b16da35" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow2", "once_cell", "polars-arrow", @@ -3629,7 +3866,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c326708a370d71dc6e11a8f4bbc10a8479e1c314dc048ba73543b815cd0bf339" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "hashbrown 0.14.0", "num-traits", "once_cell", @@ -3642,9 +3879,9 @@ dependencies = [ [[package]] name = "postgres" -version = "0.19.4" +version = "0.19.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960c214283ef8f0027974c03e9014517ced5db12f021a9abb66185a5751fab0a" +checksum = "7915b33ed60abc46040cbcaa25ffa1c7ec240668e0477c4f3070786f5916d451" dependencies = [ "bytes", "fallible-iterator", @@ -3682,11 +3919,11 @@ dependencies = [ [[package]] name = "postgres-protocol" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878c6cbf956e03af9aa8204b407b9cbf47c072164800aa918c516cd4b056c50c" +checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520" dependencies = [ - "base64", + "base64 0.21.3", "byteorder", "bytes", "fallible-iterator", @@ -3694,15 +3931,15 @@ dependencies = [ "md-5", "memchr", "rand 0.8.5", - "sha2 0.10.6", + "sha2", "stringprep", ] [[package]] name = "postgres-types" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73d946ec7d256b04dfadc4e6a3292324e6f417124750fc5c0950f981b703a0f1" +checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" dependencies = [ "bytes", "chrono", @@ -3737,9 +3974,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "pretty-hex" @@ -3758,9 +3995,9 @@ dependencies = [ [[package]] name = "proc-macro-hack" -version = "0.5.19" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" @@ -3792,7 +4029,7 @@ dependencies = [ "itertools", "log", "multimap", - "petgraph", + "petgraph 0.5.1", "prost", "prost-types", "tempfile", @@ -3809,7 +4046,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3839,7 +4076,7 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3881,7 +4118,7 @@ checksum = "00b247e8c664be87998d8628e86f282c25066165f1f8dda66100c48202fdb93a" dependencies = [ "pyo3-macros-backend", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3893,7 +4130,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -4030,7 +4267,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", ] [[package]] @@ -4089,83 +4326,77 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_users" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.7", - "redox_syscall", + "getrandom 0.2.10", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.9.3" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.6", - "regex-syntax 0.7.4", + "regex-automata", + "regex-syntax 0.7.5", ] [[package]] name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" - -[[package]] -name = "regex-automata" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", ] [[package]] name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "regex-syntax" -version = "0.7.4" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "regex-syntax" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "rend" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79af64b4b6362ffba04eef3a4e10829718a4896dac19daa741851c86781edf95" +checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" dependencies = [ "bytecheck", ] [[package]] name = "reqwest" -version = "0.11.12" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" dependencies = [ - "base64", + "base64 0.21.3", "bytes", "encoding_rs", "futures-core", @@ -4174,7 +4405,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls", + "hyper-rustls 0.24.1", "ipnet", "js-sys", "log", @@ -4182,13 +4413,13 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", - "rustls-pemfile 1.0.1", + "rustls 0.21.7", + "rustls-pemfile 1.0.3", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", "tower-service", "url", "wasm-bindgen", @@ -4200,9 +4431,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.34" +version = "0.8.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" dependencies = [ "bytemuck", ] @@ -4224,27 +4455,30 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.39" +version = "0.7.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec2b3485b07d96ddfd3134767b8a447b45ea4eb91448d0a35180ec0ffd5ed15" +checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" dependencies = [ + "bitvec", "bytecheck", "hashbrown 0.12.3", "ptr_meta", "rend", "rkyv_derive", "seahash", + "tinyvec", + "uuid 1.4.1", ] [[package]] name = "rkyv_derive" -version = "0.7.39" +version = "0.7.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eaedadc88b53e36dd32d940ed21ae4d850d5916f2581526921f553a72ac34c4" +checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -4265,14 +4499,12 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.28.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe32e8c89834541077a5c5bbe5691aa69324361e27e6aeb3552a737db4a70c8" +checksum = "a4c4216490d5a413bc6d10fa4742bd7d4955941d062c0ef873141d6b0e7b30fd" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "borsh", - "bytecheck", - "byteorder", "bytes", "num-traits", "postgres", @@ -4284,9 +4516,9 @@ dependencies = [ [[package]] name = "rust_decimal_macros" -version = "1.26.1" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4903d8db81d2321699ca8318035d6ff805c548868df435813968795a802171b2" +checksum = "86444b802de0b10ac5e563b5ddb43b541b9705de4e01a50e82194d2b183c1835" dependencies = [ "quote", "rust_decimal", @@ -4294,9 +4526,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -4313,11 +4545,24 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.38.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustls" -version = "0.20.6" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" dependencies = [ "log", "ring", @@ -4325,14 +4570,26 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustls" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile 1.0.1", + "rustls-pemfile 1.0.3", "schannel", "security-framework", ] @@ -4343,29 +4600,39 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" dependencies = [ - "base64", + "base64 0.13.1", ] [[package]] name = "rustls-pemfile" -version = "1.0.1" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +dependencies = [ + "base64 0.21.3", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" dependencies = [ - "base64", + "ring", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -4384,28 +4651,27 @@ checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys", ] [[package]] name = "scheduled-thread-pool" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf" +checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ "parking_lot 0.12.1", ] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" @@ -4425,9 +4691,9 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.7.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -4438,9 +4704,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -4448,24 +4714,24 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" dependencies = [ "serde", ] [[package]] name = "seq-macro" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1685deded9b272198423bdbdb907d8519def2f26cf3699040e54e8c4fbd5c5ce" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.183" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -4482,22 +4748,22 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.183" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ - "itoa 1.0.3", + "itoa", "ryu", "serde", ] @@ -4509,7 +4775,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.3", + "itoa", "ryu", "serde", ] @@ -4522,44 +4788,31 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.5", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.5", + "digest", ] [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" dependencies = [ "libc", "signal-hook-registry", @@ -4578,9 +4831,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -4593,24 +4846,24 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "smartstring" @@ -4625,9 +4878,9 @@ dependencies = [ [[package]] name = "snafu" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" dependencies = [ "doc-comment", "snafu-derive", @@ -4635,14 +4888,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -4653,14 +4906,24 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "spin" version = "0.5.2" @@ -4678,11 +4941,12 @@ dependencies = [ [[package]] name = "sqlparser" -version = "0.26.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86be66ea0b2b22749cfa157d16e2e84bf793e626a3375f4d378dc289fa03affb" +checksum = "37d3706eefb17039056234df6b566b0014f303f867f2656108334a55b8096f59" dependencies = [ "log", + "sqlparser_derive", ] [[package]] @@ -4694,6 +4958,17 @@ dependencies = [ "log", ] +[[package]] +name = "sqlparser_derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55fe75cb4a364c7f7ae06c7dbbc8d84bddd85d6cdf9975963c3935bc1991761e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4714,16 +4989,17 @@ checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" [[package]] name = "strength_reduce" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ff2f71c82567c565ba4b3009a9350a96a7269eaa4001ebedae926230bc2254" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" [[package]] name = "stringprep" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -4745,6 +5021,9 @@ name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros 0.24.3", +] [[package]] name = "strum_macros" @@ -4756,7 +5035,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -4769,7 +5048,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -4784,9 +5063,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "symbolic-common" @@ -4795,7 +5074,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f551f902d5642e58039aee6a9021a61037926af96e071816361644983966f540" dependencies = [ "debugid", - "memmap2 0.5.7", + "memmap2 0.5.10", "stable_deref_trait", "uuid 0.8.2", ] @@ -4813,9 +5092,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.100" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -4824,9 +5103,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.29" +version = "2.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ "proc-macro2", "quote", @@ -4835,9 +5114,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.29.8" +version = "0.29.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d10ed79c22663a35a255d289a7fdcb43559fc77ff15df5ce6c341809e7867528" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" dependencies = [ "cfg-if 1.0.0", "core-foundation-sys", @@ -4861,23 +5140,22 @@ checksum = "06f6b473c37f9add4cf1df5b4d66a8ef58ab6c895f1a3b3f949cf3e21230140e" [[package]] name = "tempfile" -version = "3.3.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ "cfg-if 1.0.0", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys", ] [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -4893,33 +5171,33 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.36" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a99cb8c4b9a8ef0e7907cd3b617cc8dc04d571c4e73c8ae403d80ac160bb122" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.36" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a891860d3c8d66fec8e73ddb3765f90082374dbaaa833407b904a94f1a7eb43" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "thrift" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" dependencies = [ "byteorder", "integer-encoding", - "ordered-float 1.1.1", + "ordered-float", ] [[package]] @@ -4956,9 +5234,9 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -4967,14 +5245,32 @@ dependencies = [ [[package]] name = "time" -version = "0.3.14" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" dependencies = [ - "itoa 1.0.3", + "deranged", + "itoa", "libc", "num_threads", "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +dependencies = [ + "time-core", ] [[package]] @@ -5007,45 +5303,44 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot 0.12.1", "pin-project-lite", - "socket2", + "socket2 0.5.3", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -5065,9 +5360,9 @@ dependencies = [ [[package]] name = "tokio-postgres" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a12c1b3e0704ae7dfc25562629798b29c72e6b1d0a681b6f29ab4ae5e7f7bf" +checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8" dependencies = [ "async-trait", "byteorder", @@ -5082,9 +5377,11 @@ dependencies = [ "pin-project-lite", "postgres-protocol", "postgres-types", - "socket2", + "rand 0.8.5", + "socket2 0.5.3", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.8", + "whoami", ] [[package]] @@ -5093,16 +5390,26 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls", + "rustls 0.20.9", "tokio", "webpki", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.7", + "tokio", +] + [[package]] name = "tokio-stream" -version = "0.1.10" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6edf2d6bc038a43d31353570e27270603f4648d18f5ed10c0e179abe43255af" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite", @@ -5126,9 +5433,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -5140,9 +5447,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -5155,9 +5462,9 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if 1.0.0", "log", @@ -5168,29 +5475,29 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.22" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 2.0.31", ] [[package]] name = "tracing-core" -version = "0.1.29" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", ] [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "twox-hash" @@ -5205,21 +5512,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.4" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -5232,9 +5539,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" @@ -5244,9 +5551,9 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unindent" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ee9362deb4a96cef4d437d1ad49cffc9b9e92d202b6995674e928ce684f112" +checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" [[package]] name = "untrusted" @@ -5256,9 +5563,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -5267,9 +5574,9 @@ dependencies = [ [[package]] name = "urlencoding" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "uuid" @@ -5277,17 +5584,17 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", "md5 0.7.0", ] [[package]] name = "uuid" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", ] [[package]] @@ -5310,22 +5617,20 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", - "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -5349,9 +5654,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -5359,24 +5664,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" dependencies = [ "bumpalo", + "lazy_static", "log", - "once_cell", "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -5386,9 +5691,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5396,28 +5701,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" dependencies = [ "js-sys", "wasm-bindgen", @@ -5425,9 +5730,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" dependencies = [ "ring", "untrusted", @@ -5435,22 +5740,30 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.5" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" -dependencies = [ - "webpki", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "which" -version = "4.3.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix", +] + +[[package]] +name = "whoami" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" +dependencies = [ + "wasm-bindgen", + "web-sys", ] [[package]] @@ -5498,25 +5811,12 @@ dependencies = [ ] [[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets 0.42.2", + "windows-targets", ] [[package]] @@ -5525,22 +5825,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] @@ -5549,123 +5834,51 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -5674,11 +5887,12 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if 1.0.0", + "windows-sys", ] [[package]] @@ -5696,6 +5910,15 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" +[[package]] +name = "xz2" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + [[package]] name = "yup-oauth2" version = "7.0.1" @@ -5704,51 +5927,32 @@ checksum = "98748970d2ddf05253e6525810d989740334aa7509457864048a829902db76f3" dependencies = [ "anyhow", "async-trait", - "base64", + "base64 0.13.1", "futures", "http", "hyper", - "hyper-rustls", + "hyper-rustls 0.23.2", "itertools", "log", "percent-encoding", - "rustls", + "rustls 0.20.9", "rustls-pemfile 0.3.0", "seahash", "serde", "serde_json", - "time 0.3.14", + "time 0.3.28", "tokio", "tower-service", "url", ] -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe 5.0.2+zstd.1.5.2", -] - [[package]] name = "zstd" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "zstd-safe 6.0.6", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", + "zstd-safe", ] [[package]] diff --git a/connectorx-python/Cargo.toml b/connectorx-python/Cargo.toml index 057bf1b02e..4056e922c8 100644 --- a/connectorx-python/Cargo.toml +++ b/connectorx-python/Cargo.toml @@ -13,8 +13,8 @@ readme = "README.md" [dependencies] anyhow = "1" -arrow = { version = "26", features = ["ffi"]} -arrow2 = {version = "0.17.4", default-features = false} +arrow = { version = "40" } +arrow2 = {version = "0.17", default-features = false} bitfield = "0.13" bytes = "1.4" chrono = "0.4" diff --git a/connectorx-python/connectorx/__init__.py b/connectorx-python/connectorx/__init__.py index af302049b1..64e82d66e2 100644 --- a/connectorx-python/connectorx/__init__.py +++ b/connectorx-python/connectorx/__init__.py @@ -323,10 +323,10 @@ def reconstruct_arrow(result: Tuple[List[str], List[List[Tuple[int, int]]]]): import pyarrow as pa names, ptrs = result - rbs = [] if len(names) == 0: - raise ValueError("Empty result") + return pa.Table.from_arrays([]) + rbs = [] for chunk in ptrs: rb = pa.RecordBatch.from_arrays( [pa.Array._import_from_c(*col_ptr) for col_ptr in chunk], names diff --git a/connectorx-python/connectorx/dependencies/federated-rewriter.jar b/connectorx-python/connectorx/dependencies/federated-rewriter.jar index c8b515b7ae..cc2303389d 100644 Binary files a/connectorx-python/connectorx/dependencies/federated-rewriter.jar and b/connectorx-python/connectorx/dependencies/federated-rewriter.jar differ diff --git a/connectorx-python/connectorx/tests/test_federation.py b/connectorx-python/connectorx/tests/test_federation.py index df1824b423..36203d78cb 100644 --- a/connectorx-python/connectorx/tests/test_federation.py +++ b/connectorx-python/connectorx/tests/test_federation.py @@ -51,7 +51,7 @@ def test_fed_spja(db1_url: str, db2_url: str) -> None: index=range(3), data={ "test_bool": pd.Series([True, False, None], dtype="object"), - "AVG_FLOAT": pd.Series([0, 3, 5.45], dtype="float64"), + "AVG_FLOAT": pd.Series([None, 3, 5.45], dtype="float64"), "SUM_INT": pd.Series([1, 3, 4], dtype="int64"), }, ) diff --git a/connectorx-python/src/arrow.rs b/connectorx-python/src/arrow.rs index 83a2a74dc7..6521a2fac3 100644 --- a/connectorx-python/src/arrow.rs +++ b/connectorx-python/src/arrow.rs @@ -7,6 +7,7 @@ use libc::uintptr_t; use pyo3::prelude::*; use pyo3::{PyAny, Python}; use std::convert::TryFrom; +use std::sync::Arc; #[throws(ConnectorXPythonError)] pub fn write_arrow<'a>( @@ -35,14 +36,19 @@ pub fn to_ptrs(rbs: Vec) -> (Vec, Vec PyResult> { - let source_conn = connectorx::source_router::parse_source(conn, None).map_err(|e| crate::errors::ConnectorXPythonError::from(e))?; - let queries = connectorx::partition::partition(&partition_query.into(), &source_conn).map_err(|e| crate::errors::ConnectorXPythonError::from(e))?; + let source_conn = connectorx::source_router::parse_source(conn, None) + .map_err(|e| crate::errors::ConnectorXPythonError::from(e))?; + let queries = connectorx::partition::partition(&partition_query.into(), &source_conn) + .map_err(|e| crate::errors::ConnectorXPythonError::from(e))?; Ok(queries.into_iter().map(|q| q.to_string()).collect()) } diff --git a/connectorx-python/src/pandas/transports/bigquery.rs b/connectorx-python/src/pandas/transports/bigquery.rs index 4c5bf3629a..2648662d74 100644 --- a/connectorx-python/src/pandas/transports/bigquery.rs +++ b/connectorx-python/src/pandas/transports/bigquery.rs @@ -35,13 +35,17 @@ impl_transport!( impl<'py> TypeConversion> for BigQueryPandasTransport<'py> { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt got None from {:?}", val)), + Utc, + ) } } impl<'py> TypeConversion> for BigQueryPandasTransport<'py> { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } diff --git a/connectorx-python/src/pandas/transports/mssql.rs b/connectorx-python/src/pandas/transports/mssql.rs index 598c5700e6..d8a1745810 100644 --- a/connectorx-python/src/pandas/transports/mssql.rs +++ b/connectorx-python/src/pandas/transports/mssql.rs @@ -63,13 +63,17 @@ impl<'py> TypeConversion for MsSQLPandasTransport<'py> { impl<'py> TypeConversion> for MsSQLPandasTransport<'py> { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } impl<'py> TypeConversion> for MsSQLPandasTransport<'py> { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt got None from {:?}", val)), + Utc, + ) } } diff --git a/connectorx-python/src/pandas/transports/mysql.rs b/connectorx-python/src/pandas/transports/mysql.rs index 36d26c2639..9cd7213c75 100644 --- a/connectorx-python/src/pandas/transports/mysql.rs +++ b/connectorx-python/src/pandas/transports/mysql.rs @@ -85,7 +85,11 @@ impl_transport!( impl<'py, P> TypeConversion> for MysqlPandasTransport<'py, P> { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt got None from {:?}", val)), + Utc, + ) } } @@ -97,7 +101,7 @@ impl<'py, P> TypeConversion for MysqlPandasTransport<'py, P> impl<'py, P> TypeConversion> for MysqlPandasTransport<'py, P> { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } diff --git a/connectorx-python/src/pandas/transports/oracle.rs b/connectorx-python/src/pandas/transports/oracle.rs index f4bd77994f..5ff54fa5c1 100644 --- a/connectorx-python/src/pandas/transports/oracle.rs +++ b/connectorx-python/src/pandas/transports/oracle.rs @@ -35,6 +35,6 @@ impl_transport!( impl<'py> TypeConversion> for OraclePandasTransport<'py> { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } diff --git a/connectorx-python/src/pandas/transports/postgres.rs b/connectorx-python/src/pandas/transports/postgres.rs index d41c66f9cb..f4c6c217fe 100644 --- a/connectorx-python/src/pandas/transports/postgres.rs +++ b/connectorx-python/src/pandas/transports/postgres.rs @@ -112,13 +112,17 @@ impl<'py, P, C> TypeConversion> for PostgresPandasTransport<'py, P, C> { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } impl<'py, P, C> TypeConversion> for PostgresPandasTransport<'py, P, C> { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt got None from {:?}", val)), + Utc, + ) } } diff --git a/connectorx-python/src/pandas/transports/sqlite.rs b/connectorx-python/src/pandas/transports/sqlite.rs index aea7747dec..122ba2977b 100644 --- a/connectorx-python/src/pandas/transports/sqlite.rs +++ b/connectorx-python/src/pandas/transports/sqlite.rs @@ -31,13 +31,17 @@ impl_transport!( impl<'py> TypeConversion> for SqlitePandasTransport<'py> { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } impl<'py> TypeConversion> for SqlitePandasTransport<'py> { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt got None from {:?}", val)), + Utc, + ) } } diff --git a/connectorx-python/src/read_sql.rs b/connectorx-python/src/read_sql.rs index f033e968a1..e91c5bce25 100644 --- a/connectorx-python/src/read_sql.rs +++ b/connectorx-python/src/read_sql.rs @@ -10,7 +10,6 @@ use pyo3::{exceptions::PyValueError, PyResult}; use crate::errors::ConnectorXPythonError; - #[derive(FromPyObject)] pub struct PyPartitionQuery { query: String, @@ -22,7 +21,13 @@ pub struct PyPartitionQuery { impl Into for PyPartitionQuery { fn into(self) -> PartitionQuery { - PartitionQuery::new(self.query.as_str(), self.column.as_str(), self.min, self.max, self.num) + PartitionQuery::new( + self.query.as_str(), + self.column.as_str(), + self.min, + self.max, + self.num, + ) } } @@ -39,7 +44,8 @@ pub fn read_sql<'a>( (Some(queries), None) => (queries.into_iter().map(CXQuery::Naked).collect(), None), (None, Some(part)) => { let origin_query = Some(part.query.clone()); - let queries = partition(&part.into(), &source_conn).map_err(|e| ConnectorXPythonError::from(e))?; + let queries = partition(&part.into(), &source_conn) + .map_err(|e| ConnectorXPythonError::from(e))?; (queries, origin_query) } (Some(_), Some(_)) => throw!(PyValueError::new_err( diff --git a/connectorx/Cargo.toml b/connectorx/Cargo.toml index 1077a0e4db..9957c1fa1b 100644 --- a/connectorx/Cargo.toml +++ b/connectorx/Cargo.toml @@ -22,7 +22,7 @@ owning_ref = "0.4" serde_json = "1" chrono = "0.4" -arrow = {version = "26", optional = true, features = ["prettyprint", "ffi"]} +arrow = {workspace = true, optional = true} arrow2 = {workspace = true, default-features = false, optional = true} bb8 = {version = "0.7", optional = true} bb8-tiberius = {version = "0.5", optional = true} @@ -55,8 +55,8 @@ tokio = {version = "1", features = ["rt", "rt-multi-thread", "net"], optional = tokio-util = {version = "0.6", optional = true} urlencoding = {version = "2.1", optional = true} uuid = {version = "0.8", optional = true} -j4rs = {version = "0.13", optional = true} -datafusion = {version = "14", optional = true} +j4rs = {version = "0.15", optional = true} +datafusion = {version = "26", optional = true} [lib] crate-type = ["cdylib", "rlib"] diff --git a/connectorx/examples/batch_test.rs b/connectorx/examples/batch_test.rs index 5d2220d213..3e8a59f8bc 100644 --- a/connectorx/examples/batch_test.rs +++ b/connectorx/examples/batch_test.rs @@ -1,9 +1,9 @@ use connectorx::arrow_batch_iter::ArrowBatchIter; use connectorx::prelude::*; use connectorx::sources::postgres::{rewrite_tls_args, BinaryProtocol as PgBinaryProtocol}; -use connectorx::transports::PostgresArrowTransport; use postgres::NoTls; use std::convert::TryFrom; +use std::time::Instant; fn main() { // let queries = &[CXQuery::naked("select * from test_table")]; @@ -12,6 +12,8 @@ fn main() { // CXQuery::naked("select * from test_table where test_int >= 3"), // ]; + let start = Instant::now(); + let queries = &[ CXQuery::naked("select * from lineitem where l_orderkey < 1000000"), CXQuery::naked( @@ -37,10 +39,10 @@ fn main() { let source = PostgresSource::::new(config, NoTls, queries.len()).unwrap(); - let destination = ArrowDestination::new(); + let destination = ArrowStreamDestination::new_with_batch_size(2048); - let mut batch_iter: ArrowBatchIter<_, PostgresArrowTransport> = - ArrowBatchIter::new(source, destination, origin_query, queries, 1024).unwrap(); + let mut batch_iter: ArrowBatchIter<_, PostgresArrowStreamTransport> = + ArrowBatchIter::new(source, destination, origin_query, queries).unwrap(); batch_iter.prepare(); @@ -53,5 +55,10 @@ fn main() { num_batches += 1; // arrow::util::pretty::print_batches(&[record_batch]).unwrap(); } - println!("got {} batches, {} rows in total", num_batches, num_rows); + println!( + "got {} batches, {} rows in total, took {:?}", + num_batches, + num_rows, + start.elapsed() + ); } diff --git a/connectorx/examples/federated_test.rs b/connectorx/examples/federated_test.rs deleted file mode 100644 index 9ee1042676..0000000000 --- a/connectorx/examples/federated_test.rs +++ /dev/null @@ -1,214 +0,0 @@ -use connectorx::{ - prelude::*, - sources::{ - mysql::BinaryProtocol as MYSQLBinaryProtocol, - postgres::{rewrite_tls_args, BinaryProtocol, PostgresSource}, - }, - sql::CXQuery, - transports::PostgresArrowTransport, -}; -use datafusion::datasource::MemTable; -use datafusion::prelude::*; -use j4rs::{ClasspathEntry, InvocationArg, Jvm, JvmBuilder}; -use postgres::NoTls; -use std::collections::HashMap; -use std::convert::TryFrom; -use std::env; -use std::fs; -use std::iter::Iterator; -use std::sync::Arc; -use url::Url; - -fn main() { - let db_map = HashMap::from([("db1", "POSTGRES"), ("db2", "POSTGRES"), ("LOCAL", "LOCAL")]); - - let path = fs::canonicalize("../federated-rewriter.jar").unwrap(); - let entry = ClasspathEntry::new(path.to_str().unwrap()); - let jvm: Jvm = JvmBuilder::new().classpath_entry(entry).build().unwrap(); - - let args: Vec = env::args().collect(); - let file = &args[1]; - let sql = fs::read_to_string(file).unwrap(); - println!("input sql: {}", sql); - let sql = InvocationArg::try_from(sql).unwrap(); - - let ds1 = jvm - .invoke_static( - "org.apache.calcite.adapter.jdbc.JdbcSchema", - "dataSource", - &[ - InvocationArg::try_from(env::var("DB1_JDBC_URL").unwrap()).unwrap(), - InvocationArg::try_from(env::var("DB1_JDBC_DRIVER").unwrap()).unwrap(), - InvocationArg::try_from(env::var("DB1_USER").unwrap()).unwrap(), - InvocationArg::try_from(env::var("DB1_PASSWORD").unwrap()).unwrap(), - ], - ) - .unwrap(); - - let ds2 = jvm - .invoke_static( - "org.apache.calcite.adapter.jdbc.JdbcSchema", - "dataSource", - &[ - InvocationArg::try_from(env::var("DB2_JDBC_URL").unwrap()).unwrap(), - InvocationArg::try_from(env::var("DB2_JDBC_DRIVER").unwrap()).unwrap(), - InvocationArg::try_from(env::var("DB2_USER").unwrap()).unwrap(), - InvocationArg::try_from(env::var("DB2_PASSWORD").unwrap()).unwrap(), - ], - ) - .unwrap(); - - let db_conns = jvm.create_instance("java.util.HashMap", &[]).unwrap(); - jvm.invoke( - &db_conns, - "put", - &[ - InvocationArg::try_from("db1").unwrap(), - InvocationArg::try_from(ds1).unwrap(), - ], - ) - .unwrap(); - jvm.invoke( - &db_conns, - "put", - &[ - InvocationArg::try_from("db2").unwrap(), - InvocationArg::try_from(ds2).unwrap(), - ], - ) - .unwrap(); - - let db_conns = InvocationArg::try_from(db_conns).unwrap(); - - let rewriter = jvm - .create_instance("ai.dataprep.federated.FederatedQueryRewriter", &[]) - .unwrap(); - - let plan = jvm.invoke(&rewriter, "rewrite", &[db_conns, sql]).unwrap(); - - let count = jvm.invoke(&plan, "getCount", &[]).unwrap(); - let count: i32 = jvm.to_rust(count).unwrap(); - - let ctx = SessionContext::new(); - let mut local_sql = String::new(); - let mut alias_names = vec![]; - for i in 0..count { - println!("\nquery {i}:"); - - let db = jvm - .invoke( - &plan, - "getDBName", - &[InvocationArg::try_from(i) - .unwrap() - .into_primitive() - .unwrap()], - ) - .unwrap(); - let db: String = jvm.to_rust(db).unwrap(); - - let alias_db = jvm - .invoke( - &plan, - "getAliasDBName", - &[InvocationArg::try_from(i) - .unwrap() - .into_primitive() - .unwrap()], - ) - .unwrap(); - let alias_db: String = jvm.to_rust(alias_db).unwrap(); - - let rewrite_sql = jvm - .invoke( - &plan, - "getSql", - &[InvocationArg::try_from(i) - .unwrap() - .into_primitive() - .unwrap()], - ) - .unwrap(); - let rewrite_sql: String = jvm.to_rust(rewrite_sql).unwrap(); - println!("db: {}, rewrite sql: {}", db, rewrite_sql); - - if db == "LOCAL" { - local_sql = rewrite_sql; - } else { - let mut destination = ArrowDestination::new(); - let queries = [CXQuery::naked(rewrite_sql)]; - - let conn = match db.as_str() { - "db1" => env::var("DB1").unwrap(), - "db2" => env::var("DB2").unwrap(), - _ => unimplemented!(), - }; - - match db_map[db.as_str()] { - "POSTGRES" => { - let url = Url::parse(&conn).unwrap(); - let (config, _) = rewrite_tls_args(&url).unwrap(); - - let sb = - PostgresSource::::new(config, NoTls, 1).unwrap(); - let dispatcher = Dispatcher::< - _, - _, - PostgresArrowTransport, - >::new( - sb, &mut destination, &queries, None - ); - // println!("run dispatcher"); - dispatcher.run().unwrap(); - } - "MYSQL" => { - let source = MySQLSource::::new(conn.as_str(), 1).unwrap(); - let dispatcher = - Dispatcher::<_, _, MySQLArrowTransport>::new( - source, - &mut destination, - &queries, - None, - ); - dispatcher.run().unwrap(); - } - _ => {} - }; - let rbs = destination.arrow().unwrap(); - // println!("schema: {}", rbs[0].schema()); - // arrow::util::pretty::print_batches(&rbs).unwrap(); - let provider = MemTable::try_new(rbs[0].schema(), vec![rbs]).unwrap(); - ctx.register_table(alias_db.as_str(), Arc::new(provider)) - .unwrap(); - alias_names.push(alias_db); - } - } - - println!("\nquery final:"); - let rt = Arc::new(tokio::runtime::Runtime::new().expect("Failed to create runtime")); - // until datafusion fix the bug - for alias in alias_names { - local_sql = local_sql.replace(format!("\"{}\"", alias).as_str(), alias.as_str()); - } - println!("{}", local_sql); - - // let sql1 = "SELECT * FROM db2 INNER JOIN db1 ON db2.\"p_partkey\" = db1.\"l_partkey\" AND db2.\"EXPR$0\" AND (db2.\"EXPR$1\" AND db1.\"EXPR$1\") AND (db1.\"EXPR$2\" AND db2.\"EXPR$2\" AND (db1.\"EXPR$3\" AND db1.\"EXPR$4\"))"; - // println!("==== run sql 1 ===="); - // let t = rt.block_on(ctx.sql(sql1)).unwrap(); - // // rt.block_on(t.limit(5).unwrap().show()).unwrap(); - // let rbs1 = rt.block_on(t.collect()).unwrap(); - // arrow::util::pretty::print_batches(&rbs1).unwrap(); - // println!("==== run sql 2 ===="); - - let df = rt.block_on(ctx.sql(local_sql.as_str())).unwrap(); - rt.block_on(df.explain(false, false).unwrap().show()) - .unwrap(); - rt.block_on(df.limit(5, None).unwrap().show()).unwrap(); - let num_rows = rt - .block_on(df.collect()) - .unwrap() - .into_iter() - .map(|rb| rb.num_rows()) - .sum::(); - println!("Final # rows: {}", num_rows); -} diff --git a/connectorx/src/arrow_batch_iter.rs b/connectorx/src/arrow_batch_iter.rs index dd9a525d08..1794a96161 100644 --- a/connectorx/src/arrow_batch_iter.rs +++ b/connectorx/src/arrow_batch_iter.rs @@ -1,199 +1,180 @@ -use crate::{prelude::*, utils::*}; +use crate::prelude::*; use arrow::record_batch::RecordBatch; use itertools::Itertools; use log::debug; -use owning_ref::OwningHandle; use rayon::prelude::*; use std::marker::PhantomData; -type SourceParserHandle<'a, S> = OwningHandle< - Box<::Partition>, - DummyBox<<::Partition as SourcePartition>::Parser<'a>>, ->; +pub fn set_global_num_thread(num: usize) { + rayon::ThreadPoolBuilder::new() + .num_threads(num) + .build_global() + .unwrap(); +} /// The iterator that returns arrow in `RecordBatch` -pub struct ArrowBatchIter<'a, S, TP> +pub struct ArrowBatchIter where - S: Source + 'a, - TP: Transport, + S: Source, + TP: Transport< + TSS = S::TypeSystem, + TSD = ArrowStreamTypeSystem, + S = S, + D = ArrowStreamDestination, + >, + ::Partition: 'static, + ::TypeSystem: 'static, + ::Error: 'static, { - dst: ArrowDestination, - dst_parts: Vec, + dst: ArrowStreamDestination, + dst_parts: Option>, src_parts: Option>, - src_parsers: Vec>, dorder: DataOrder, src_schema: Vec, - dst_schema: Vec, - batch_size: usize, + dst_schema: Vec, _phantom: PhantomData, } -impl<'a, S, TP> ArrowBatchIter<'a, S, TP> +impl<'a, S, TP> ArrowBatchIter where S: Source + 'a, - TP: Transport, + TP: Transport< + TSS = S::TypeSystem, + TSD = ArrowStreamTypeSystem, + S = S, + D = ArrowStreamDestination, + >, { pub fn new( src: S, - mut dst: ArrowDestination, + mut dst: ArrowStreamDestination, origin_query: Option, queries: &[CXQuery], - batch_size: usize, ) -> Result { let dispatcher = Dispatcher::<_, _, TP>::new(src, &mut dst, queries, origin_query); let (dorder, src_parts, dst_parts, src_schema, dst_schema) = dispatcher.prepare()?; Ok(Self { dst, - dst_parts, + dst_parts: Some(dst_parts), src_parts: Some(src_parts), - src_parsers: vec![], dorder, src_schema, dst_schema, - batch_size, _phantom: PhantomData, }) } - fn run_batch(&mut self) -> Result<(), TP::Error> { - let schemas: Vec<_> = self - .src_schema - .iter() - .zip_eq(&self.dst_schema) - .map(|(&src_ty, &dst_ty)| (src_ty, dst_ty)) - .collect(); - - debug!("Start writing"); - + fn run(&mut self) { + let src_schema = self.src_schema.clone(); + let dst_schema = self.dst_schema.clone(); + let src_partitions = self.src_parts.take().unwrap(); + let dst_partitions = self.dst_parts.take().unwrap(); let dorder = self.dorder; - let batch_size = self.batch_size; - - // parse and write - self.dst_parts - .par_iter_mut() - .zip_eq(self.src_parsers.par_iter_mut()) - .enumerate() - .try_for_each(|(i, (dst, src))| -> Result<(), TP::Error> { - let parser: &mut ::Parser<'_> = - &mut *src; - let mut processed_rows = 0; - - match dorder { - DataOrder::RowMajor => loop { - let (mut n, is_last) = parser.fetch_next()?; - n = std::cmp::min(n, batch_size - processed_rows); // only process until batch size is reached - processed_rows += n; - dst.aquire_row(n)?; - for _ in 0..n { + + std::thread::spawn(move || -> Result<(), TP::Error> { + let schemas: Vec<_> = src_schema + .iter() + .zip_eq(&dst_schema) + .map(|(&src_ty, &dst_ty)| (src_ty, dst_ty)) + .collect(); + + debug!("Start writing"); + // parse and write + dst_partitions + .into_par_iter() + .zip_eq(src_partitions) + .enumerate() + .try_for_each(|(i, (mut dst, mut src))| -> Result<(), TP::Error> { + let mut parser = src.parser()?; + + match dorder { + DataOrder::RowMajor => loop { + let (n, is_last) = parser.fetch_next()?; + dst.aquire_row(n)?; + for _ in 0..n { + #[allow(clippy::needless_range_loop)] + for col in 0..dst.ncols() { + { + let (s1, s2) = schemas[col]; + TP::process(s1, s2, &mut parser, &mut dst)?; + } + } + } + if is_last { + break; + } + }, + DataOrder::ColumnMajor => loop { + let (n, is_last) = parser.fetch_next()?; + dst.aquire_row(n)?; #[allow(clippy::needless_range_loop)] for col in 0..dst.ncols() { - { - let (s1, s2) = schemas[col]; - TP::process(s1, s2, parser, dst)?; + for _ in 0..n { + { + let (s1, s2) = schemas[col]; + TP::process(s1, s2, &mut parser, &mut dst)?; + } } } - } - if is_last || processed_rows >= batch_size { - break; - } - }, - DataOrder::ColumnMajor => loop { - let (mut n, is_last) = parser.fetch_next()?; - n = std::cmp::min(n, batch_size - processed_rows); - processed_rows += n; - dst.aquire_row(n)?; - #[allow(clippy::needless_range_loop)] - for col in 0..dst.ncols() { - for _ in 0..n { - { - let (s1, s2) = schemas[col]; - TP::process(s1, s2, parser, dst)?; - } + if is_last { + break; } - } - if is_last || processed_rows >= batch_size { - break; - } - }, - } - - debug!("Finalize partition {}", i); - dst.finalize()?; - debug!("Partition {} finished", i); - Ok(()) - })?; - Ok(()) + }, + } + + debug!("Finalize partition {}", i); + dst.finalize()?; + debug!("Partition {} finished", i); + Ok(()) + })?; + + debug!("Writing finished"); + + Ok(()) + }); } } -impl<'a, S, TP> Iterator for ArrowBatchIter<'a, S, TP> +impl<'a, S, TP> Iterator for ArrowBatchIter where S: Source + 'a, - TP: Transport, + TP: Transport< + TSS = S::TypeSystem, + TSD = ArrowStreamTypeSystem, + S = S, + D = ArrowStreamDestination, + >, { type Item = RecordBatch; + /// NOTE: not thread safe fn next(&mut self) -> Option { - let res = self.dst.record_batch().unwrap(); - if res.is_some() { - return res; - } - self.run_batch().unwrap(); self.dst.record_batch().unwrap() } } -// impl<'a, S, TP> Iterator for ArrowBatchIter<'a, S, TP> -// where -// S: Source + 'a, -// TP: Transport, -// { -// type Item = Result; -// fn next(&mut self) -> Option { -// match self.dst.record_batch() { -// Ok(Some(res)) => return Some(Ok(res)), -// Ok(None) => {} -// Err(e) => return Some(Err(e.into())), -// } - -// match self.run_batch() { -// Err(e) => return Some(Err(e)), -// Ok(()) => {} -// } - -// match self.dst.record_batch() { -// Err(e) => Some(Err(e.into())), -// Ok(Some(res)) => Some(Ok(res)), -// Ok(None) => None, -// } -// } -// } - pub trait RecordBatchIterator { fn get_schema(&self) -> (RecordBatch, &[String]); fn prepare(&mut self); fn next_batch(&mut self) -> Option; } -impl<'a, S, TP> RecordBatchIterator for ArrowBatchIter<'a, S, TP> +impl<'a, S, TP> RecordBatchIterator for ArrowBatchIter where S: Source + 'a, - TP: Transport, + TP: Transport< + TSS = S::TypeSystem, + TSD = ArrowStreamTypeSystem, + S = S, + D = ArrowStreamDestination, + >, { fn get_schema(&self) -> (RecordBatch, &[String]) { (self.dst.empty_batch(), self.dst.names()) } fn prepare(&mut self) { - let src_parts = self.src_parts.take().unwrap(); - self.src_parsers = src_parts - .into_par_iter() - .map(|part| { - OwningHandle::new_with_fn(Box::new(part), |part: *const S::Partition| unsafe { - DummyBox((*(part as *mut S::Partition)).parser().unwrap()) - }) - }) - .collect(); + self.run(); } fn next_batch(&mut self) -> Option { diff --git a/connectorx/src/destinations/arrow/arrow_assoc.rs b/connectorx/src/destinations/arrow/arrow_assoc.rs index 499a2c0a4c..cd6b01da20 100644 --- a/connectorx/src/destinations/arrow/arrow_assoc.rs +++ b/connectorx/src/destinations/arrow/arrow_assoc.rs @@ -7,7 +7,7 @@ use arrow::array::{ }; use arrow::datatypes::Field; use arrow::datatypes::{DataType as ArrowDataType, TimeUnit}; -use chrono::{Date, DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc}; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc}; use fehler::throws; /// Associate arrow builder with native type @@ -181,40 +181,11 @@ impl ArrowAssoc for Option> { } } -impl ArrowAssoc for Date { - type Builder = Float64Builder; - - fn builder(_nrows: usize) -> Float64Builder { - unimplemented!() - } - - fn append(_builder: &mut Self::Builder, _value: Date) -> Result<()> { - unimplemented!() - } - - fn field(_header: &str) -> Field { - unimplemented!() - } -} - -impl ArrowAssoc for Option> { - type Builder = Float64Builder; - - fn builder(_nrows: usize) -> Float64Builder { - unimplemented!() - } - - fn append(_builder: &mut Self::Builder, _value: Option>) -> Result<()> { - unimplemented!() - } - - fn field(_header: &str) -> Field { - unimplemented!() - } -} - fn naive_date_to_arrow(nd: NaiveDate) -> i32 { - (nd.and_hms(0, 0, 0).timestamp() / SECONDS_IN_DAY) as i32 + match nd.and_hms_opt(0, 0, 0) { + Some(dt) => (dt.timestamp() / SECONDS_IN_DAY) as i32, + None => panic!("and_hms_opt got None from {:?}", nd), + } } fn naive_datetime_to_arrow(nd: NaiveDateTime) -> i64 { diff --git a/connectorx/src/destinations/arrow2/arrow_assoc.rs b/connectorx/src/destinations/arrow2/arrow_assoc.rs index 776af84f78..db6d5854b4 100644 --- a/connectorx/src/destinations/arrow2/arrow_assoc.rs +++ b/connectorx/src/destinations/arrow2/arrow_assoc.rs @@ -1,7 +1,8 @@ -use arrow2::array::*; -use arrow2::datatypes::{DataType as ArrowDataType, Field, TimeUnit}; - -use chrono::{Date, DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc}; +use arrow2::{ + array::*, + datatypes::{DataType as ArrowDataType, Field, TimeUnit}, +}; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc}; use crate::constants::SECONDS_IN_DAY; @@ -243,56 +244,11 @@ impl ArrowAssoc for Option> { } } -impl ArrowAssoc for Date { - type Builder = MutablePrimitiveArray; - - fn builder(nrows: usize) -> Self::Builder { - MutablePrimitiveArray::with_capacity(nrows).to(ArrowDataType::Timestamp( - TimeUnit::Second, - Some("UTC".to_string()), - )) - } - - #[inline] - fn push(builder: &mut Self::Builder, value: Date) { - builder.push(Some(value).map(|x| x.and_hms(0, 0, 0).timestamp())) - } - - fn field(header: &str) -> Field { - Field::new( - header, - ArrowDataType::Timestamp(TimeUnit::Second, Some("UTC".to_string())), - false, - ) - } -} - -impl ArrowAssoc for Option> { - type Builder = MutablePrimitiveArray; - - fn builder(nrows: usize) -> Self::Builder { - MutablePrimitiveArray::with_capacity(nrows).to(ArrowDataType::Timestamp( - TimeUnit::Second, - Some("UTC".to_string()), - )) - } - - fn push(builder: &mut Self::Builder, value: Option>) { - // time-aware are stored as naive (i64) + offset (on the datatype) - builder.push(value.map(|x| x.and_hms(0, 0, 0).timestamp())) - } - - fn field(header: &str) -> Field { - Field::new( - header, - ArrowDataType::Timestamp(TimeUnit::Second, Some("UTC".to_string())), - false, - ) - } -} - fn naive_date_to_date32(nd: NaiveDate) -> i32 { - (nd.and_hms(0, 0, 0).timestamp() / SECONDS_IN_DAY) as i32 + match nd.and_hms_opt(0, 0, 0) { + Some(dt) => (dt.timestamp() / SECONDS_IN_DAY) as i32, + None => panic!("and_hms_opt got None from {:?}", nd), + } } fn naive_time_to_time64_nanos(nd: NaiveTime) -> i64 { diff --git a/connectorx/src/destinations/arrowstream/arrow_assoc.rs b/connectorx/src/destinations/arrowstream/arrow_assoc.rs new file mode 100644 index 0000000000..cd6b01da20 --- /dev/null +++ b/connectorx/src/destinations/arrowstream/arrow_assoc.rs @@ -0,0 +1,338 @@ +use super::errors::{ArrowDestinationError, Result}; +use crate::constants::SECONDS_IN_DAY; +use arrow::array::{ + ArrayBuilder, BooleanBuilder, Date32Builder, Date64Builder, Float32Builder, Float64Builder, + Int32Builder, Int64Builder, LargeBinaryBuilder, StringBuilder, Time64NanosecondBuilder, + TimestampNanosecondBuilder, UInt32Builder, UInt64Builder, +}; +use arrow::datatypes::Field; +use arrow::datatypes::{DataType as ArrowDataType, TimeUnit}; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc}; +use fehler::throws; + +/// Associate arrow builder with native type +pub trait ArrowAssoc { + type Builder: ArrayBuilder + Send; + + fn builder(nrows: usize) -> Self::Builder; + fn append(builder: &mut Self::Builder, value: Self) -> Result<()>; + fn field(header: &str) -> Field; +} + +macro_rules! impl_arrow_assoc { + ($T:ty, $AT:expr, $B:ty) => { + impl ArrowAssoc for $T { + type Builder = $B; + + fn builder(nrows: usize) -> Self::Builder { + Self::Builder::with_capacity(nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: Self) { + builder.append_value(value); + } + + fn field(header: &str) -> Field { + Field::new(header, $AT, false) + } + } + + impl ArrowAssoc for Option<$T> { + type Builder = $B; + + fn builder(nrows: usize) -> Self::Builder { + Self::Builder::with_capacity(nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: Self) { + builder.append_option(value); + } + + fn field(header: &str) -> Field { + Field::new(header, $AT, true) + } + } + }; +} + +impl_arrow_assoc!(u32, ArrowDataType::UInt32, UInt32Builder); +impl_arrow_assoc!(u64, ArrowDataType::UInt64, UInt64Builder); +impl_arrow_assoc!(i32, ArrowDataType::Int32, Int32Builder); +impl_arrow_assoc!(i64, ArrowDataType::Int64, Int64Builder); +impl_arrow_assoc!(f32, ArrowDataType::Float32, Float32Builder); +impl_arrow_assoc!(f64, ArrowDataType::Float64, Float64Builder); +impl_arrow_assoc!(bool, ArrowDataType::Boolean, BooleanBuilder); + +impl ArrowAssoc for &str { + type Builder = StringBuilder; + + fn builder(nrows: usize) -> Self::Builder { + StringBuilder::with_capacity(1024, nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: Self) { + builder.append_value(value); + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Utf8, false) + } +} + +impl ArrowAssoc for Option<&str> { + type Builder = StringBuilder; + + fn builder(nrows: usize) -> Self::Builder { + StringBuilder::with_capacity(1024, nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: Self) { + match value { + Some(s) => builder.append_value(s), + None => builder.append_null(), + } + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Utf8, true) + } +} + +impl ArrowAssoc for String { + type Builder = StringBuilder; + + fn builder(nrows: usize) -> Self::Builder { + StringBuilder::with_capacity(1024, nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: String) { + builder.append_value(value.as_str()); + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Utf8, false) + } +} + +impl ArrowAssoc for Option { + type Builder = StringBuilder; + + fn builder(nrows: usize) -> Self::Builder { + StringBuilder::with_capacity(1024, nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: Self) { + match value { + Some(s) => builder.append_value(s.as_str()), + None => builder.append_null(), + } + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Utf8, true) + } +} + +impl ArrowAssoc for DateTime { + type Builder = TimestampNanosecondBuilder; + + fn builder(nrows: usize) -> Self::Builder { + TimestampNanosecondBuilder::with_capacity(nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: DateTime) { + builder.append_value(value.timestamp_nanos()) + } + + fn field(header: &str) -> Field { + Field::new( + header, + ArrowDataType::Timestamp(TimeUnit::Nanosecond, None), + false, + ) + } +} + +impl ArrowAssoc for Option> { + type Builder = TimestampNanosecondBuilder; + + fn builder(nrows: usize) -> Self::Builder { + TimestampNanosecondBuilder::with_capacity(nrows) + } + + #[throws(ArrowDestinationError)] + fn append(builder: &mut Self::Builder, value: Option>) { + builder.append_option(value.map(|x| x.timestamp_nanos())) + } + + fn field(header: &str) -> Field { + Field::new( + header, + ArrowDataType::Timestamp(TimeUnit::Nanosecond, None), + true, + ) + } +} + +fn naive_date_to_arrow(nd: NaiveDate) -> i32 { + match nd.and_hms_opt(0, 0, 0) { + Some(dt) => (dt.timestamp() / SECONDS_IN_DAY) as i32, + None => panic!("and_hms_opt got None from {:?}", nd), + } +} + +fn naive_datetime_to_arrow(nd: NaiveDateTime) -> i64 { + nd.timestamp_millis() +} + +impl ArrowAssoc for Option { + type Builder = Date32Builder; + + fn builder(nrows: usize) -> Self::Builder { + Date32Builder::with_capacity(nrows) + } + + fn append(builder: &mut Self::Builder, value: Option) -> Result<()> { + builder.append_option(value.map(naive_date_to_arrow)); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Date32, true) + } +} + +impl ArrowAssoc for NaiveDate { + type Builder = Date32Builder; + + fn builder(nrows: usize) -> Self::Builder { + Date32Builder::with_capacity(nrows) + } + + fn append(builder: &mut Self::Builder, value: NaiveDate) -> Result<()> { + builder.append_value(naive_date_to_arrow(value)); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Date32, false) + } +} + +impl ArrowAssoc for Option { + type Builder = Date64Builder; + + fn builder(nrows: usize) -> Self::Builder { + Date64Builder::with_capacity(nrows) + } + + fn append(builder: &mut Self::Builder, value: Option) -> Result<()> { + builder.append_option(value.map(naive_datetime_to_arrow)); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Date64, true) + } +} + +impl ArrowAssoc for NaiveDateTime { + type Builder = Date64Builder; + + fn builder(nrows: usize) -> Self::Builder { + Date64Builder::with_capacity(nrows) + } + + fn append(builder: &mut Self::Builder, value: NaiveDateTime) -> Result<()> { + builder.append_value(naive_datetime_to_arrow(value)); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Date64, false) + } +} + +impl ArrowAssoc for Option { + type Builder = Time64NanosecondBuilder; + + fn builder(nrows: usize) -> Self::Builder { + Time64NanosecondBuilder::with_capacity(nrows) + } + + fn append(builder: &mut Self::Builder, value: Option) -> Result<()> { + builder.append_option( + value.map(|t| { + t.num_seconds_from_midnight() as i64 * 1_000_000_000 + t.nanosecond() as i64 + }), + ); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Time64(TimeUnit::Nanosecond), true) + } +} + +impl ArrowAssoc for NaiveTime { + type Builder = Time64NanosecondBuilder; + + fn builder(nrows: usize) -> Self::Builder { + Time64NanosecondBuilder::with_capacity(nrows) + } + + fn append(builder: &mut Self::Builder, value: NaiveTime) -> Result<()> { + builder.append_value( + value.num_seconds_from_midnight() as i64 * 1_000_000_000 + value.nanosecond() as i64, + ); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::Time64(TimeUnit::Nanosecond), false) + } +} + +impl ArrowAssoc for Option> { + type Builder = LargeBinaryBuilder; + + fn builder(nrows: usize) -> Self::Builder { + LargeBinaryBuilder::with_capacity(1024, nrows) + } + + fn append(builder: &mut Self::Builder, value: Self) -> Result<()> { + match value { + Some(v) => builder.append_value(v), + None => builder.append_null(), + }; + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::LargeBinary, true) + } +} + +impl ArrowAssoc for Vec { + type Builder = LargeBinaryBuilder; + + fn builder(nrows: usize) -> Self::Builder { + LargeBinaryBuilder::with_capacity(1024, nrows) + } + + fn append(builder: &mut Self::Builder, value: Self) -> Result<()> { + builder.append_value(value); + Ok(()) + } + + fn field(header: &str) -> Field { + Field::new(header, ArrowDataType::LargeBinary, false) + } +} diff --git a/connectorx/src/destinations/arrowstream/errors.rs b/connectorx/src/destinations/arrowstream/errors.rs new file mode 100644 index 0000000000..85d4177ffd --- /dev/null +++ b/connectorx/src/destinations/arrowstream/errors.rs @@ -0,0 +1,16 @@ +use thiserror::Error; + +pub type Result = std::result::Result; + +#[derive(Error, Debug)] +pub enum ArrowDestinationError { + #[error(transparent)] + ArrowError(#[from] arrow::error::ArrowError), + + #[error(transparent)] + ConnectorXError(#[from] crate::errors::ConnectorXError), + + /// Any other errors that are too trivial to be put here explicitly. + #[error(transparent)] + Other(#[from] anyhow::Error), +} diff --git a/connectorx/src/destinations/arrowstream/funcs.rs b/connectorx/src/destinations/arrowstream/funcs.rs new file mode 100644 index 0000000000..0bcd0f7b5f --- /dev/null +++ b/connectorx/src/destinations/arrowstream/funcs.rs @@ -0,0 +1,74 @@ +use super::arrow_assoc::ArrowAssoc; +use super::Builder; +use crate::errors::Result; +use crate::typesystem::{ParameterizedFunc, ParameterizedOn}; +use anyhow::anyhow; +use arrow::array::{ArrayBuilder, ArrayRef}; +use arrow::datatypes::Field; + +pub struct FNewBuilder; + +impl ParameterizedFunc for FNewBuilder { + type Function = fn(nrows: usize) -> Builder; +} + +impl ParameterizedOn for FNewBuilder +where + T: ArrowAssoc, +{ + fn parameterize() -> Self::Function { + fn imp(nrows: usize) -> Builder + where + T: ArrowAssoc, + { + Box::new(T::builder(nrows)) as Builder + } + imp:: + } +} + +pub struct FFinishBuilder; + +impl ParameterizedFunc for FFinishBuilder { + type Function = fn(Builder) -> Result; +} + +impl ParameterizedOn for FFinishBuilder +where + T: ArrowAssoc, +{ + fn parameterize() -> Self::Function { + fn imp(mut builder: Builder) -> Result + where + T: ArrowAssoc, + { + let t = builder + .downcast_mut::() + .ok_or_else(|| anyhow!("cannot cast arrow builder for finish"))?; + let a = ArrayBuilder::finish(t); + Ok(a) + } + imp:: + } +} + +pub struct FNewField; + +impl ParameterizedFunc for FNewField { + type Function = fn(header: &str) -> Field; +} + +impl ParameterizedOn for FNewField +where + T: ArrowAssoc, +{ + fn parameterize() -> Self::Function { + fn imp(header: &str) -> Field + where + T: ArrowAssoc, + { + T::field(header) + } + imp:: + } +} diff --git a/connectorx/src/destinations/arrowstream/mod.rs b/connectorx/src/destinations/arrowstream/mod.rs new file mode 100644 index 0000000000..d8487a268c --- /dev/null +++ b/connectorx/src/destinations/arrowstream/mod.rs @@ -0,0 +1,290 @@ +//! Destination implementation for Arrow and Polars. + +mod arrow_assoc; +mod errors; +mod funcs; +pub mod typesystem; + +pub use self::errors::{ArrowDestinationError, Result}; +pub use self::typesystem::ArrowTypeSystem; +use super::{Consume, Destination, DestinationPartition}; +use crate::constants::RECORD_BATCH_SIZE; +use crate::data_order::DataOrder; +use crate::typesystem::{Realize, TypeAssoc, TypeSystem}; +use anyhow::anyhow; +use arrow::{datatypes::Schema, record_batch::RecordBatch}; +use arrow_assoc::ArrowAssoc; +use fehler::{throw, throws}; +use funcs::{FFinishBuilder, FNewBuilder, FNewField}; +use itertools::Itertools; +use std::{ + any::Any, + sync::{ + mpsc::{channel, Receiver, Sender}, + Arc, + }, +}; + +type Builder = Box; +type Builders = Vec; + +pub struct ArrowDestination { + schema: Vec, + names: Vec, + arrow_schema: Arc, + batch_size: usize, + sender: Option>, + receiver: Receiver, +} + +impl Default for ArrowDestination { + fn default() -> Self { + let (tx, rx) = channel(); + ArrowDestination { + schema: vec![], + names: vec![], + arrow_schema: Arc::new(Schema::empty()), + batch_size: RECORD_BATCH_SIZE, + sender: Some(tx), + receiver: rx, + } + } +} + +impl ArrowDestination { + pub fn new() -> Self { + Self::default() + } + + pub fn new_with_batch_size(batch_size: usize) -> Self { + let (tx, rx) = channel(); + ArrowDestination { + schema: vec![], + names: vec![], + arrow_schema: Arc::new(Schema::empty()), + batch_size, + sender: Some(tx), + receiver: rx, + } + } +} + +impl Destination for ArrowDestination { + const DATA_ORDERS: &'static [DataOrder] = &[DataOrder::ColumnMajor, DataOrder::RowMajor]; + type TypeSystem = ArrowTypeSystem; + type Partition<'a> = ArrowPartitionWriter; + type Error = ArrowDestinationError; + + fn needs_count(&self) -> bool { + false + } + + #[throws(ArrowDestinationError)] + fn allocate>( + &mut self, + _nrow: usize, + names: &[S], + schema: &[ArrowTypeSystem], + data_order: DataOrder, + ) { + // todo: support colmajor + if !matches!(data_order, DataOrder::RowMajor) { + throw!(crate::errors::ConnectorXError::UnsupportedDataOrder( + data_order + )) + } + + // parse the metadata + self.schema = schema.to_vec(); + self.names = names.iter().map(|n| n.as_ref().to_string()).collect(); + let fields = self + .schema + .iter() + .zip_eq(&self.names) + .map(|(&dt, h)| Ok(Realize::::realize(dt)?(h.as_str()))) + .collect::>>()?; + self.arrow_schema = Arc::new(Schema::new(fields)); + } + + #[throws(ArrowDestinationError)] + fn partition(&mut self, counts: usize) -> Vec> { + let mut partitions = vec![]; + let sender = self.sender.take().unwrap(); + for _ in 0..counts { + partitions.push(ArrowPartitionWriter::new( + self.schema.clone(), + Arc::clone(&self.arrow_schema), + self.batch_size, + sender.clone(), + )?); + } + partitions + // self.sender should be freed + } + + fn schema(&self) -> &[ArrowTypeSystem] { + self.schema.as_slice() + } +} + +impl ArrowDestination { + #[throws(ArrowDestinationError)] + pub fn arrow(self) -> Vec { + if self.sender.is_some() { + // should not happen since it is dropped after partition + // but need to make sure here otherwise recv will be blocked forever + std::mem::drop(self.sender); + } + let mut data = vec![]; + loop { + match self.receiver.recv() { + Ok(rb) => data.push(rb), + Err(_) => break, + } + } + data + } + + #[throws(ArrowDestinationError)] + pub fn record_batch(&mut self) -> Option { + match self.receiver.recv() { + Ok(rb) => Some(rb), + Err(_) => None, + } + } + + pub fn empty_batch(&self) -> RecordBatch { + RecordBatch::new_empty(self.arrow_schema.clone()) + } + + pub fn arrow_schema(&self) -> Arc { + self.arrow_schema.clone() + } + + pub fn names(&self) -> &[String] { + self.names.as_slice() + } +} + +pub struct ArrowPartitionWriter { + schema: Vec, + builders: Option, + current_row: usize, + current_col: usize, + arrow_schema: Arc, + batch_size: usize, + sender: Option>, +} + +// unsafe impl Sync for ArrowPartitionWriter {} + +impl ArrowPartitionWriter { + #[throws(ArrowDestinationError)] + fn new( + schema: Vec, + arrow_schema: Arc, + batch_size: usize, + sender: Sender, + ) -> Self { + let mut pw = ArrowPartitionWriter { + schema, + builders: None, + current_row: 0, + current_col: 0, + arrow_schema, + batch_size, + sender: Some(sender), + }; + pw.allocate()?; + pw + } + + #[throws(ArrowDestinationError)] + fn allocate(&mut self) { + let builders = self + .schema + .iter() + .map(|dt| Ok(Realize::::realize(*dt)?(self.batch_size))) + .collect::>>()?; + self.builders.replace(builders); + } + + #[throws(ArrowDestinationError)] + fn flush(&mut self) { + let builders = self + .builders + .take() + .unwrap_or_else(|| panic!("arrow builder is none when flush!")); + let columns = builders + .into_iter() + .zip(self.schema.iter()) + .map(|(builder, &dt)| Realize::::realize(dt)?(builder)) + .collect::, crate::errors::ConnectorXError>>()?; + let rb = RecordBatch::try_new(Arc::clone(&self.arrow_schema), columns)?; + self.sender.as_ref().unwrap().send(rb).unwrap(); + + self.current_row = 0; + self.current_col = 0; + } +} + +impl<'a> DestinationPartition<'a> for ArrowPartitionWriter { + type TypeSystem = ArrowTypeSystem; + type Error = ArrowDestinationError; + + #[throws(ArrowDestinationError)] + fn finalize(&mut self) { + if self.builders.is_some() { + self.flush()?; + } + // need to release the sender so receiver knows when the stream is exhasted + std::mem::drop(self.sender.take()); + } + + #[throws(ArrowDestinationError)] + fn aquire_row(&mut self, _n: usize) -> usize { + self.current_row + } + + fn ncols(&self) -> usize { + self.schema.len() + } +} + +impl<'a, T> Consume for ArrowPartitionWriter +where + T: TypeAssoc<>::TypeSystem> + ArrowAssoc + 'static, +{ + type Error = ArrowDestinationError; + + #[throws(ArrowDestinationError)] + fn consume(&mut self, value: T) { + let col = self.current_col; + self.current_col = (self.current_col + 1) % self.ncols(); + self.schema[col].check::()?; + + loop { + match &mut self.builders { + Some(builders) => { + ::append( + builders[col] + .downcast_mut::() + .ok_or_else(|| anyhow!("cannot cast arrow builder for append"))?, + value, + )?; + break; + } + None => self.allocate()?, // allocate if builders are not initialized + } + } + + // flush if exceed batch_size + if self.current_col == 0 { + self.current_row += 1; + if self.current_row >= self.batch_size { + self.flush()?; + self.allocate()?; + } + } + } +} diff --git a/connectorx/src/destinations/arrowstream/typesystem.rs b/connectorx/src/destinations/arrowstream/typesystem.rs new file mode 100644 index 0000000000..a6997a2ba2 --- /dev/null +++ b/connectorx/src/destinations/arrowstream/typesystem.rs @@ -0,0 +1,38 @@ +use crate::impl_typesystem; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub enum ArrowTypeSystem { + Int32(bool), + Int64(bool), + UInt32(bool), + UInt64(bool), + Float32(bool), + Float64(bool), + Boolean(bool), + LargeUtf8(bool), + LargeBinary(bool), + Date32(bool), + Date64(bool), + Time64(bool), + DateTimeTz(bool), +} + +impl_typesystem! { + system = ArrowTypeSystem, + mappings = { + { Int32 => i32 } + { Int64 => i64 } + { UInt32 => u32 } + { UInt64 => u64 } + { Float64 => f64 } + { Float32 => f32 } + { Boolean => bool } + { LargeUtf8 => String } + { LargeBinary => Vec } + { Date32 => NaiveDate } + { Date64 => NaiveDateTime } + { Time64 => NaiveTime } + { DateTimeTz => DateTime } + } +} diff --git a/connectorx/src/destinations/mod.rs b/connectorx/src/destinations/mod.rs index eae519a0bb..0082b9d846 100644 --- a/connectorx/src/destinations/mod.rs +++ b/connectorx/src/destinations/mod.rs @@ -3,6 +3,8 @@ #[cfg(feature = "dst_arrow")] pub mod arrow; +#[cfg(feature = "dst_arrow")] +pub mod arrowstream; #[cfg(feature = "dst_arrow2")] pub mod arrow2; diff --git a/connectorx/src/errors.rs b/connectorx/src/errors.rs index e73b11afdd..61682071fe 100644 --- a/connectorx/src/errors.rs +++ b/connectorx/src/errors.rs @@ -86,6 +86,10 @@ pub enum ConnectorXOutError { #[error(transparent)] ArrowError(#[from] crate::destinations::arrow::ArrowDestinationError), + #[cfg(feature = "dst_arrow")] + #[error(transparent)] + ArrowStreamError(#[from] crate::destinations::arrowstream::ArrowDestinationError), + #[cfg(feature = "dst_arrow2")] #[error(transparent)] Arrow2Error(#[from] crate::destinations::arrow2::Arrow2DestinationError), diff --git a/connectorx/src/fed_dispatcher.rs b/connectorx/src/fed_dispatcher.rs index d14c67779c..875a9fa296 100644 --- a/connectorx/src/fed_dispatcher.rs +++ b/connectorx/src/fed_dispatcher.rs @@ -20,7 +20,12 @@ pub fn run( for (k, v) in db_map.into_iter() { db_conn_map.insert( k, - FederatedDataSourceInfo::new_from_conn_str(SourceConn::try_from(v.as_str())?, false), + FederatedDataSourceInfo::new_from_conn_str( + SourceConn::try_from(v.as_str())?, + false, + "", + "", + ), ); } let fed_plan = rewrite_sql(sql.as_str(), &db_conn_map, j4rs_base)?; @@ -36,13 +41,16 @@ pub fn run( } _ => { debug!("start query {}: {}", i, p.sql); - let queries = [CXQuery::naked(p.sql)]; + let mut queries = vec![]; + p.sql.split(';').for_each(|ss| { + queries.push(CXQuery::naked(ss)); + }); let source_conn = &db_conn_map[p.db_name.as_str()] .conn_str_info .as_ref() .unwrap(); - let destination = get_arrow(source_conn, None, &queries)?; + let destination = get_arrow(source_conn, None, queries.as_slice())?; let rbs = destination.arrow()?; let provider = MemTable::try_new(rbs[0].schema(), vec![rbs])?; @@ -72,7 +80,7 @@ pub fn run( Ok(()) })?; - debug!("\nexecute query final..."); + debug!("\nexecute query final...\n{}\n", local_sql); let rt = Arc::new(tokio::runtime::Runtime::new().expect("Failed to create runtime")); // until datafusion fix the bug: https://github.com/apache/arrow-datafusion/issues/2147 for alias in alias_names { diff --git a/connectorx/src/fed_rewriter.rs b/connectorx/src/fed_rewriter.rs index e6d2bf1d58..9d717c3bdf 100644 --- a/connectorx/src/fed_rewriter.rs +++ b/connectorx/src/fed_rewriter.rs @@ -1,12 +1,9 @@ use crate::{ - constants::{ - CX_REWRITER_PATH, DUCKDB_JDBC_DRIVER, J4RS_BASE_PATH, MYSQL_JDBC_DRIVER, - POSTGRES_JDBC_DRIVER, - }, + constants::{CX_REWRITER_PATH, J4RS_BASE_PATH}, prelude::*, }; use fehler::throws; -use j4rs::{ClasspathEntry, Instance, InvocationArg, Jvm, JvmBuilder, Null}; +use j4rs::{ClasspathEntry, Instance, InvocationArg, Jvm, JvmBuilder}; use log::debug; use std::collections::HashMap; use std::convert::TryFrom; @@ -19,18 +16,27 @@ pub struct Plan { pub cardinality: usize, } -pub struct FederatedDataSourceInfo { +pub struct FederatedDataSourceInfo<'a> { pub conn_str_info: Option, pub manual_info: Option>>, pub is_local: bool, + pub jdbc_url: &'a str, + pub jdbc_driver: &'a str, } -impl FederatedDataSourceInfo { - pub fn new_from_conn_str(source_conn: SourceConn, is_local: bool) -> Self { +impl<'a> FederatedDataSourceInfo<'a> { + pub fn new_from_conn_str( + source_conn: SourceConn, + is_local: bool, + jdbc_url: &'a str, + jdbc_driver: &'a str, + ) -> Self { Self { conn_str_info: Some(source_conn), manual_info: None, is_local, + jdbc_url, + jdbc_driver, } } pub fn new_from_manual_schema( @@ -41,6 +47,8 @@ impl FederatedDataSourceInfo { conn_str_info: None, manual_info: Some(manual_schema), is_local, + jdbc_url: "", + jdbc_driver: "", } } } @@ -69,86 +77,21 @@ fn init_jvm(j4rs_base: Option<&str>) -> Jvm { .build()? } +#[allow(dead_code)] #[throws(ConnectorXOutError)] -fn create_sources(jvm: &Jvm, db_map: &HashMap) -> Instance { - let data_sources = jvm.create_instance("java.util.HashMap", &[])?; +fn create_sources( + jvm: &Jvm, + db_map: &HashMap, +) -> (Instance, Instance) { + let mut db_config = vec![]; + let db_manual = jvm.create_instance("java.util.HashMap", &[])?; for (db_name, db_info) in db_map.iter() { - if db_info.conn_str_info.is_some() { - let source_conn = db_info.conn_str_info.as_ref().unwrap(); - let url = &source_conn.conn; - debug!("url: {:?}", url); - let ds = match source_conn.ty { - SourceType::Postgres => jvm.invoke_static( - "ai.dataprep.federated.FederatedQueryRewriter", - "createDataSource", - &[ - InvocationArg::try_from(format!( - "jdbc:postgresql://{}:{}{}", - url.host_str().unwrap_or("localhost"), - url.port().unwrap_or(5432), - url.path() - )) - .unwrap(), - InvocationArg::try_from(POSTGRES_JDBC_DRIVER).unwrap(), - InvocationArg::try_from(url.username()).unwrap(), - InvocationArg::try_from(url.password().unwrap_or("")).unwrap(), - ], - )?, - SourceType::MySQL => jvm.invoke_static( - "ai.dataprep.federated.FederatedQueryRewriter", - "createDataSource", - &[ - InvocationArg::try_from(format!( - "jdbc:mysql://{}:{}{}", - url.host_str().unwrap_or("localhost"), - url.port().unwrap_or(3306), - url.path() - )) - .unwrap(), - InvocationArg::try_from(MYSQL_JDBC_DRIVER).unwrap(), - InvocationArg::try_from(url.username()).unwrap(), - InvocationArg::try_from(url.password().unwrap_or("")).unwrap(), - ], - )?, - SourceType::DuckDB => jvm.invoke_static( - "ai.dataprep.federated.FederatedQueryRewriter", - "createDataSource", - &[ - InvocationArg::try_from(format!("jdbc:duckdb:{}", url.path())).unwrap(), - InvocationArg::try_from(DUCKDB_JDBC_DRIVER).unwrap(), - InvocationArg::try_from(Null::String).unwrap(), - InvocationArg::try_from(Null::String).unwrap(), - ], - )?, - _ => unimplemented!("Connection: {:?} not supported!", url), - }; - let fed_ds = jvm.create_instance( - "ai.dataprep.federated.FederatedDataSource", - &[ - InvocationArg::try_from(url.scheme()).unwrap(), - InvocationArg::try_from(ds).unwrap(), - InvocationArg::try_from(db_info.is_local).unwrap(), - ], - )?; - jvm.invoke( - &data_sources, - "put", - &[ - InvocationArg::try_from(db_name).unwrap(), - InvocationArg::try_from(fed_ds).unwrap(), - ], - )?; - } else { - assert!(db_info.manual_info.is_some()); + if db_info.manual_info.is_some() { let manual_info = db_info.manual_info.as_ref().unwrap(); let schema_info = jvm.create_instance("java.util.HashMap", &[])?; for (name, columns) in manual_info { - let col_names: Vec = columns - .iter() - .map(|c| InvocationArg::try_from(c).unwrap()) - .collect(); - let arr_instance = jvm.create_java_list("java.lang.String", &col_names)?; + let arr_instance = jvm.java_list("java.lang.String", columns.to_vec())?; jvm.invoke( &schema_info, "put", @@ -160,19 +103,35 @@ fn create_sources(jvm: &Jvm, db_map: &HashMap) } let fed_ds = jvm.create_instance( "ai.dataprep.federated.FederatedDataSource", - &[InvocationArg::try_from(schema_info).unwrap()], + &[ + InvocationArg::try_from(db_info.is_local).unwrap(), + InvocationArg::try_from(schema_info).unwrap(), + ], )?; jvm.invoke( - &data_sources, + &db_manual, "put", &[ InvocationArg::try_from(db_name).unwrap(), InvocationArg::try_from(fed_ds).unwrap(), ], )?; + } else { + db_config.push(String::from(db_name)); } } - data_sources + let db_config = jvm.java_list("java.lang.String", db_config)?; + (db_config, db_manual) +} + +#[allow(dead_code)] +#[throws(ConnectorXOutError)] +fn create_sources2(jvm: &Jvm, db_map: &HashMap) -> Instance { + let mut dbs = vec![]; + for db in db_map.keys() { + dbs.push(String::from(db)); + } + jvm.java_list("java.lang.String", dbs)? } #[throws(ConnectorXOutError)] @@ -185,10 +144,11 @@ pub fn rewrite_sql( debug!("init jvm successfully!"); let sql = InvocationArg::try_from(sql).unwrap(); - let data_sources = create_sources(&jvm, db_map)?; + let (db_config, db_manual) = create_sources(&jvm, db_map)?; let rewriter = jvm.create_instance("ai.dataprep.federated.FederatedQueryRewriter", &[])?; - let data_sources = InvocationArg::try_from(data_sources).unwrap(); - let plan = jvm.invoke(&rewriter, "rewrite", &[data_sources, sql])?; + let db_config = InvocationArg::try_from(db_config).unwrap(); + let db_manual = InvocationArg::try_from(db_manual).unwrap(); + let plan = jvm.invoke(&rewriter, "rewrite3", &[sql, db_config, db_manual])?; let count = jvm.invoke(&plan, "getCount", &[])?; let count: i32 = jvm.to_rust(count)?; diff --git a/connectorx/src/get_arrow.rs b/connectorx/src/get_arrow.rs index 387d912fa6..735eae257d 100644 --- a/connectorx/src/get_arrow.rs +++ b/connectorx/src/get_arrow.rs @@ -241,7 +241,7 @@ pub fn new_record_batch_iter( queries: &[CXQuery], batch_size: usize, ) -> Box { - let destination = ArrowDestination::new(); + let destination = ArrowStreamDestination::new_with_batch_size(batch_size); let protocol = source_conn.proto.as_str(); debug!("Protocol: {}", protocol); @@ -257,14 +257,12 @@ pub fn new_record_batch_iter( queries.len(), ) .unwrap(); - let batch_iter = ArrowBatchIter::< - '_, - _, - PostgresArrowTransport, - >::new( - source, destination, origin_query, queries, batch_size - ) - .unwrap(); + let batch_iter = + ArrowBatchIter::< + _, + PostgresArrowStreamTransport, + >::new(source, destination, origin_query, queries) + .unwrap(); return Box::new(batch_iter); } ("csv", None) => { @@ -272,11 +270,10 @@ pub fn new_record_batch_iter( PostgresSource::::new(config, NoTls, queries.len()) .unwrap(); let batch_iter = ArrowBatchIter::< - '_, _, - PostgresArrowTransport, + PostgresArrowStreamTransport, >::new( - source, destination, origin_query, queries, batch_size + source, destination, origin_query, queries ) .unwrap(); return Box::new(batch_iter); @@ -288,14 +285,12 @@ pub fn new_record_batch_iter( queries.len(), ) .unwrap(); - let batch_iter = ArrowBatchIter::< - '_, - _, - PostgresArrowTransport, - >::new( - source, destination, origin_query, queries, batch_size - ) - .unwrap(); + let batch_iter = + ArrowBatchIter::< + _, + PostgresArrowStreamTransport, + >::new(source, destination, origin_query, queries) + .unwrap(); return Box::new(batch_iter); } ("binary", None) => { @@ -306,11 +301,10 @@ pub fn new_record_batch_iter( ) .unwrap(); let batch_iter = ArrowBatchIter::< - '_, _, - PostgresArrowTransport, + PostgresArrowStreamTransport, >::new( - source, destination, origin_query, queries, batch_size + source, destination, origin_query, queries ) .unwrap(); return Box::new(batch_iter); @@ -322,14 +316,12 @@ pub fn new_record_batch_iter( queries.len(), ) .unwrap(); - let batch_iter = ArrowBatchIter::< - '_, - _, - PostgresArrowTransport, - >::new( - source, destination, origin_query, queries, batch_size - ) - .unwrap(); + let batch_iter = + ArrowBatchIter::< + _, + PostgresArrowStreamTransport, + >::new(source, destination, origin_query, queries) + .unwrap(); return Box::new(batch_iter); } ("cursor", None) => { @@ -337,11 +329,10 @@ pub fn new_record_batch_iter( PostgresSource::::new(config, NoTls, queries.len()) .unwrap(); let batch_iter = ArrowBatchIter::< - '_, _, - PostgresArrowTransport, + PostgresArrowStreamTransport, >::new( - source, destination, origin_query, queries, batch_size + source, destination, origin_query, queries ) .unwrap(); return Box::new(batch_iter); @@ -356,12 +347,11 @@ pub fn new_record_batch_iter( MySQLSource::::new(&source_conn.conn[..], queries.len()) .unwrap(); let batch_iter = - ArrowBatchIter::<'_, _, MySQLArrowTransport>::new( + ArrowBatchIter::<_, MySQLArrowStreamTransport>::new( source, destination, origin_query, queries, - batch_size, ) .unwrap(); return Box::new(batch_iter); @@ -369,12 +359,11 @@ pub fn new_record_batch_iter( "text" => { let source = MySQLSource::::new(&source_conn.conn[..], queries.len()).unwrap(); - let batch_iter = ArrowBatchIter::<'_, _, MySQLArrowTransport>::new( + let batch_iter = ArrowBatchIter::<_, MySQLArrowStreamTransport>::new( source, destination, origin_query, queries, - batch_size, ) .unwrap(); return Box::new(batch_iter); @@ -386,12 +375,11 @@ pub fn new_record_batch_iter( // remove the first "sqlite://" manually since url.path is not correct for windows let path = &source_conn.conn.as_str()[9..]; let source = SQLiteSource::new(path, queries.len()).unwrap(); - let batch_iter = ArrowBatchIter::<'_, _, SQLiteArrowTransport>::new( + let batch_iter = ArrowBatchIter::<_, SQLiteArrowStreamTransport>::new( source, destination, origin_query, queries, - batch_size, ) .unwrap(); return Box::new(batch_iter); @@ -400,12 +388,11 @@ pub fn new_record_batch_iter( SourceType::MsSQL => { let rt = Arc::new(tokio::runtime::Runtime::new().expect("Failed to create runtime")); let source = MsSQLSource::new(rt, &source_conn.conn[..], queries.len()).unwrap(); - let batch_iter = ArrowBatchIter::<'_, _, MsSQLArrowTransport>::new( + let batch_iter = ArrowBatchIter::<_, MsSQLArrowStreamTransport>::new( source, destination, origin_query, queries, - batch_size, ) .unwrap(); return Box::new(batch_iter); @@ -413,12 +400,11 @@ pub fn new_record_batch_iter( #[cfg(feature = "src_oracle")] SourceType::Oracle => { let source = OracleSource::new(&source_conn.conn[..], queries.len()).unwrap(); - let batch_iter = ArrowBatchIter::<'_, _, OracleArrowTransport>::new( + let batch_iter = ArrowBatchIter::<_, OracleArrowStreamTransport>::new( source, destination, origin_query, queries, - batch_size, ) .unwrap(); return Box::new(batch_iter); @@ -427,12 +413,11 @@ pub fn new_record_batch_iter( SourceType::BigQuery => { let rt = Arc::new(tokio::runtime::Runtime::new().expect("Failed to create runtime")); let source = BigQuerySource::new(rt, &source_conn.conn[..]).unwrap(); - let batch_iter = ArrowBatchIter::<'_, _, BigQueryArrowTransport>::new( + let batch_iter = ArrowBatchIter::<_, BigQueryArrowStreamTransport>::new( source, destination, origin_query, queries, - batch_size, ) .unwrap(); return Box::new(batch_iter); diff --git a/connectorx/src/lib.rs b/connectorx/src/lib.rs index efe01f6529..84b043be89 100644 --- a/connectorx/src/lib.rs +++ b/connectorx/src/lib.rs @@ -170,12 +170,18 @@ pub mod utils; pub mod prelude { #[cfg(feature = "dst_arrow")] - pub use crate::arrow_batch_iter::RecordBatchIterator; + pub use crate::arrow_batch_iter::{set_global_num_thread, RecordBatchIterator}; pub use crate::data_order::{coordinate, DataOrder}; #[cfg(feature = "dst_arrow")] pub use crate::destinations::arrow::{ArrowDestination, ArrowPartitionWriter, ArrowTypeSystem}; #[cfg(feature = "dst_arrow2")] pub use crate::destinations::arrow2::Arrow2Destination; + #[cfg(feature = "dst_arrow")] + pub use crate::destinations::arrowstream::{ + ArrowDestination as ArrowStreamDestination, + ArrowPartitionWriter as ArrowStreamPartitionWriter, + ArrowTypeSystem as ArrowStreamTypeSystem, + }; pub use crate::destinations::{Consume, Destination, DestinationPartition}; pub use crate::dispatcher::Dispatcher; pub use crate::errors::{ConnectorXError, ConnectorXOutError}; diff --git a/connectorx/src/source_router.rs b/connectorx/src/source_router.rs index 8cb650d9b2..d307967668 100644 --- a/connectorx/src/source_router.rs +++ b/connectorx/src/source_router.rs @@ -14,6 +14,7 @@ pub enum SourceType { Oracle, BigQuery, DuckDB, + Unknown, } #[derive(Debug, Clone)] @@ -57,7 +58,7 @@ impl TryFrom<&str> for SourceConn { "oracle" => Ok(SourceConn::new(SourceType::Oracle, url, proto)), "bigquery" => Ok(SourceConn::new(SourceType::BigQuery, url, proto)), "duckdb" => Ok(SourceConn::new(SourceType::DuckDB, url, proto)), - _ => unimplemented!("Connection: {} not supported!", conn), + _ => Ok(SourceConn::new(SourceType::Unknown, url, proto)), } } } diff --git a/connectorx/src/sources/bigquery/mod.rs b/connectorx/src/sources/bigquery/mod.rs index d76640f68a..c291e27464 100644 --- a/connectorx/src/sources/bigquery/mod.rs +++ b/connectorx/src/sources/bigquery/mod.rs @@ -1059,7 +1059,11 @@ impl<'r, 'a> Produce<'r, DateTime> for BigQuerySourceParser { * 1e9) as i64; let secs = timestamp_ns / 1000000000; let nsecs = (timestamp_ns % 1000000000) as u32; - DateTime::::from_utc(NaiveDateTime::from_timestamp(secs, nsecs), Utc) + DateTime::::from_naive_utc_and_offset( + NaiveDateTime::from_timestamp_opt(secs, nsecs) + .ok_or_else(|| anyhow!("from_timestamp_opt return None"))?, + Utc, + ) } } @@ -1132,10 +1136,10 @@ impl<'r, 'a> Produce<'r, Option>> for BigQuerySourceParser { * 1e9) as i64; let secs = timestamp_ns / 1000000000; let nsecs = (timestamp_ns % 1000000000) as u32; - Some(DateTime::::from_utc( - NaiveDateTime::from_timestamp(secs, nsecs), - Utc, - )) + match NaiveDateTime::from_timestamp_opt(secs, nsecs) { + Some(ndt) => Some(DateTime::::from_naive_utc_and_offset(ndt, Utc)), + None => None, + } } } } diff --git a/connectorx/src/sources/dummy/mod.rs b/connectorx/src/sources/dummy/mod.rs index 72935fa54d..f880421138 100644 --- a/connectorx/src/sources/dummy/mod.rs +++ b/connectorx/src/sources/dummy/mod.rs @@ -8,7 +8,7 @@ use super::{PartitionParser, Produce, Source, SourcePartition}; use crate::data_order::DataOrder; use crate::errors::{ConnectorXError, Result}; use crate::sql::CXQuery; -use chrono::{offset, Date, DateTime, Utc}; +use chrono::{offset, DateTime, Utc}; use fehler::{throw, throws}; use num_traits::cast::FromPrimitive; @@ -245,27 +245,3 @@ impl<'r, 'a> Produce<'r, Option>> for DummySourcePartitionParser<' Ok(ret) } } - -impl<'r, 'a> Produce<'r, Date> for DummySourcePartitionParser<'a> { - type Error = ConnectorXError; - - fn produce(&mut self) -> Result> { - self.next_val(); - let ret = offset::Utc::now().date(); - Ok(ret) - } -} - -impl<'r, 'a> Produce<'r, Option>> for DummySourcePartitionParser<'a> { - type Error = ConnectorXError; - - fn produce(&mut self) -> Result>> { - self.next_val(); - let ret = match self.next_val() % 2 { - 0 => Some(offset::Utc::now().date()), - 1 => None, - _ => unreachable!(), - }; - Ok(ret) - } -} diff --git a/connectorx/src/transports/bigquery_arrowstream.rs b/connectorx/src/transports/bigquery_arrowstream.rs new file mode 100644 index 0000000000..c8350d54c5 --- /dev/null +++ b/connectorx/src/transports/bigquery_arrowstream.rs @@ -0,0 +1,50 @@ +//! Transport from BigQuery Source to Arrow Destination. + +use crate::{ + destinations::arrowstream::{ + typesystem::ArrowTypeSystem, ArrowDestination, ArrowDestinationError, + }, + impl_transport, + sources::bigquery::{BigQuerySource, BigQuerySourceError, BigQueryTypeSystem}, + typesystem::TypeConversion, +}; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc}; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum BigQueryArrowTransportError { + #[error(transparent)] + Source(#[from] BigQuerySourceError), + + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +/// Convert BigQuery data types to Arrow data types. +pub struct BigQueryArrowTransport; + +impl_transport!( + name = BigQueryArrowTransport, + error = BigQueryArrowTransportError, + systems = BigQueryTypeSystem => ArrowTypeSystem, + route = BigQuerySource => ArrowDestination, + mappings = { + { Bool[bool] => Boolean[bool] | conversion auto } + { Boolean[bool] => Boolean[bool] | conversion none } + { Int64[i64] => Int64[i64] | conversion auto } + { Integer[i64] => Int64[i64] | conversion none } + { Float64[f64] => Float64[f64] | conversion auto } + { Float[f64] => Float64[f64] | conversion none } + { Numeric[f64] => Float64[f64] | conversion none } + { Bignumeric[f64] => Float64[f64] | conversion none } + { String[String] => LargeUtf8[String] | conversion auto } + { Bytes[String] => LargeUtf8[String] | conversion none } + { Date[NaiveDate] => Date32[NaiveDate] | conversion auto } + { Datetime[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + { Time[NaiveTime] => Time64[NaiveTime] | conversion auto } + { Timestamp[DateTime] => DateTimeTz[DateTime] | conversion auto } + } +); diff --git a/connectorx/src/transports/dummy_arrow.rs b/connectorx/src/transports/dummy_arrow.rs index d1639567d5..9ebad0f81b 100644 --- a/connectorx/src/transports/dummy_arrow.rs +++ b/connectorx/src/transports/dummy_arrow.rs @@ -34,18 +34,23 @@ impl_transport!( impl TypeConversion, NaiveDateTime> for DummyArrowTransport { fn convert(val: DateTime) -> NaiveDateTime { - NaiveDateTime::from_timestamp(val.timestamp(), val.timestamp_subsec_nanos()) + NaiveDateTime::from_timestamp_opt(val.timestamp(), val.timestamp_subsec_nanos()) + .unwrap_or_else(|| panic!("from_timestamp_opt return None")) } } impl TypeConversion> for DummyArrowTransport { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } impl TypeConversion> for DummyArrowTransport { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt return None")), + Utc, + ) } } diff --git a/connectorx/src/transports/dummy_arrow2.rs b/connectorx/src/transports/dummy_arrow2.rs index f4d90ee51d..89c582df68 100644 --- a/connectorx/src/transports/dummy_arrow2.rs +++ b/connectorx/src/transports/dummy_arrow2.rs @@ -34,18 +34,23 @@ impl_transport!( impl TypeConversion, NaiveDateTime> for DummyArrow2Transport { fn convert(val: DateTime) -> NaiveDateTime { - NaiveDateTime::from_timestamp(val.timestamp(), val.timestamp_subsec_nanos()) + NaiveDateTime::from_timestamp_opt(val.timestamp(), val.timestamp_subsec_nanos()) + .unwrap_or_else(|| panic!("from_timestamp_opt return None")) } } impl TypeConversion> for DummyArrow2Transport { fn convert(val: NaiveDateTime) -> DateTime { - DateTime::from_utc(val, Utc) + DateTime::from_naive_utc_and_offset(val, Utc) } } impl TypeConversion> for DummyArrow2Transport { fn convert(val: NaiveDate) -> DateTime { - DateTime::from_utc(val.and_hms(0, 0, 0), Utc) + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("from_hms_opt return None")), + Utc, + ) } } diff --git a/connectorx/src/transports/dummy_arrowstream.rs b/connectorx/src/transports/dummy_arrowstream.rs new file mode 100644 index 0000000000..19436b2d82 --- /dev/null +++ b/connectorx/src/transports/dummy_arrowstream.rs @@ -0,0 +1,56 @@ +//! Transport from Dummy Source to Arrow Destination. + +use crate::destinations::arrowstream::{ArrowDestination, ArrowDestinationError, ArrowTypeSystem}; +use crate::sources::dummy::{DummySource, DummyTypeSystem}; +use crate::typesystem::TypeConversion; +use chrono::{DateTime, NaiveDate, NaiveDateTime, Utc}; +use thiserror::Error; + +/// Convert Dummy data types to Arrow data types. +pub struct DummyArrowTransport; + +#[derive(Error, Debug)] +pub enum DummyArrowTransportError { + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +impl_transport!( + name = DummyArrowTransport, + error = DummyArrowTransportError, + systems = DummyTypeSystem => ArrowTypeSystem, + route = DummySource => ArrowDestination, + mappings = { + { F64[f64] => Float64[f64] | conversion auto} + { I64[i64] => Int64[i64] | conversion auto} + { Bool[bool] => Boolean[bool] | conversion auto} + { String[String] => LargeUtf8[String] | conversion auto} + { DateTime[DateTime] => Date64[NaiveDateTime] | conversion option} + } +); + +impl TypeConversion, NaiveDateTime> for DummyArrowTransport { + fn convert(val: DateTime) -> NaiveDateTime { + NaiveDateTime::from_timestamp_opt(val.timestamp(), val.timestamp_subsec_nanos()) + .unwrap_or_else(|| panic!("from_timestamp_opt return None")) + } +} + +impl TypeConversion> for DummyArrowTransport { + fn convert(val: NaiveDateTime) -> DateTime { + DateTime::from_naive_utc_and_offset(val, Utc) + } +} + +impl TypeConversion> for DummyArrowTransport { + fn convert(val: NaiveDate) -> DateTime { + DateTime::from_naive_utc_and_offset( + val.and_hms_opt(0, 0, 0) + .unwrap_or_else(|| panic!("and_hms_opt return None")), + Utc, + ) + } +} diff --git a/connectorx/src/transports/mod.rs b/connectorx/src/transports/mod.rs index ab38fa12be..8be61dc2c0 100644 --- a/connectorx/src/transports/mod.rs +++ b/connectorx/src/transports/mod.rs @@ -4,37 +4,56 @@ mod bigquery_arrow; #[cfg(all(feature = "src_bigquery", feature = "dst_arrow2"))] mod bigquery_arrow2; +#[cfg(all(feature = "src_bigquery", feature = "dst_arrow"))] +mod bigquery_arrowstream; #[cfg(all(feature = "src_csv", feature = "dst_arrow"))] mod csv_arrow; #[cfg(all(feature = "src_dummy", feature = "dst_arrow"))] mod dummy_arrow; #[cfg(all(feature = "src_dummy", feature = "dst_arrow2"))] mod dummy_arrow2; +#[cfg(all(feature = "src_dummy", feature = "dst_arrow"))] +mod dummy_arrowstream; #[cfg(all(feature = "src_mssql", feature = "dst_arrow"))] mod mssql_arrow; #[cfg(all(feature = "src_mssql", feature = "dst_arrow2"))] mod mssql_arrow2; +#[cfg(all(feature = "src_mssql", feature = "dst_arrow"))] +mod mssql_arrowstream; #[cfg(all(feature = "src_mysql", feature = "dst_arrow"))] mod mysql_arrow; #[cfg(all(feature = "src_mysql", feature = "dst_arrow2"))] mod mysql_arrow2; +#[cfg(all(feature = "src_mysql", feature = "dst_arrow"))] +mod mysql_arrowstream; #[cfg(all(feature = "src_oracle", feature = "dst_arrow"))] mod oracle_arrow; #[cfg(all(feature = "src_oracle", feature = "dst_arrow2"))] mod oracle_arrow2; +#[cfg(all(feature = "src_oracle", feature = "dst_arrow"))] +mod oracle_arrowstream; #[cfg(all(feature = "src_postgres", feature = "dst_arrow"))] mod postgres_arrow; #[cfg(all(feature = "src_postgres", feature = "dst_arrow2"))] mod postgres_arrow2; +#[cfg(all(feature = "src_postgres", feature = "dst_arrow"))] +mod postgres_arrowstream; #[cfg(all(feature = "src_sqlite", feature = "dst_arrow"))] mod sqlite_arrow; #[cfg(all(feature = "src_sqlite", feature = "dst_arrow2"))] mod sqlite_arrow2; +#[cfg(all(feature = "src_sqlite", feature = "dst_arrow"))] +mod sqlite_arrowstream; #[cfg(all(feature = "src_bigquery", feature = "dst_arrow"))] pub use bigquery_arrow::{BigQueryArrowTransport, BigQueryArrowTransportError}; #[cfg(all(feature = "src_bigquery", feature = "dst_arrow2"))] pub use bigquery_arrow2::{BigQueryArrow2Transport, BigQueryArrow2TransportError}; +#[cfg(all(feature = "src_bigquery", feature = "dst_arrow"))] +pub use bigquery_arrowstream::{ + BigQueryArrowTransport as BigQueryArrowStreamTransport, + BigQueryArrowTransportError as BigQueryArrowStreamTransportError, +}; #[cfg(all(feature = "src_csv", feature = "dst_arrow"))] pub use csv_arrow::CSVArrowTransport; #[cfg(all(feature = "src_dummy", feature = "dst_arrow"))] @@ -45,19 +64,44 @@ pub use dummy_arrow2::DummyArrow2Transport; pub use mssql_arrow::{MsSQLArrowTransport, MsSQLArrowTransportError}; #[cfg(all(feature = "src_mssql", feature = "dst_arrow2"))] pub use mssql_arrow2::{MsSQLArrow2Transport, MsSQLArrow2TransportError}; +#[cfg(all(feature = "src_mssql", feature = "dst_arrow"))] +pub use mssql_arrowstream::{ + MsSQLArrowTransport as MsSQLArrowStreamTransport, + MsSQLArrowTransportError as MsSQLArrowStreamTransportError, +}; #[cfg(all(feature = "src_mysql", feature = "dst_arrow"))] pub use mysql_arrow::{MySQLArrowTransport, MySQLArrowTransportError}; #[cfg(all(feature = "src_mysql", feature = "dst_arrow2"))] pub use mysql_arrow2::{MySQLArrow2Transport, MySQLArrow2TransportError}; +#[cfg(all(feature = "src_mysql", feature = "dst_arrow"))] +pub use mysql_arrowstream::{ + MySQLArrowTransport as MySQLArrowStreamTransport, + MySQLArrowTransportError as MySQLArrowStreamTransportError, +}; #[cfg(all(feature = "src_oracle", feature = "dst_arrow"))] pub use oracle_arrow::{OracleArrowTransport, OracleArrowTransportError}; #[cfg(all(feature = "src_oracle", feature = "dst_arrow2"))] pub use oracle_arrow2::{OracleArrow2Transport, OracleArrow2TransportError}; +#[cfg(all(feature = "src_oracle", feature = "dst_arrow"))] +pub use oracle_arrowstream::{ + OracleArrowTransport as OracleArrowStreamTransport, + OracleArrowTransportError as OracleArrowStreamTransportError, +}; #[cfg(all(feature = "src_postgres", feature = "dst_arrow"))] pub use postgres_arrow::{PostgresArrowTransport, PostgresArrowTransportError}; #[cfg(all(feature = "src_postgres", feature = "dst_arrow2"))] pub use postgres_arrow2::{PostgresArrow2Transport, PostgresArrow2TransportError}; +#[cfg(all(feature = "src_postgres", feature = "dst_arrow"))] +pub use postgres_arrowstream::{ + PostgresArrowTransport as PostgresArrowStreamTransport, + PostgresArrowTransportError as PostgresArrowStreamTransportError, +}; #[cfg(all(feature = "src_sqlite", feature = "dst_arrow"))] pub use sqlite_arrow::{SQLiteArrowTransport, SQLiteArrowTransportError}; #[cfg(all(feature = "src_sqlite", feature = "dst_arrow2"))] pub use sqlite_arrow2::{SQLiteArrow2Transport, SQLiteArrow2TransportError}; +#[cfg(all(feature = "src_sqlite", feature = "dst_arrow"))] +pub use sqlite_arrowstream::{ + SQLiteArrowTransport as SQLiteArrowStreamTransport, + SQLiteArrowTransportError as SQLiteArrowStreamTransportError, +}; diff --git a/connectorx/src/transports/mssql_arrowstream.rs b/connectorx/src/transports/mssql_arrowstream.rs new file mode 100644 index 0000000000..9fa9ae926c --- /dev/null +++ b/connectorx/src/transports/mssql_arrowstream.rs @@ -0,0 +1,88 @@ +//! Transport from MsSQL Source to Arrow Destination. + +use crate::destinations::arrowstream::{ArrowDestination, ArrowDestinationError, ArrowTypeSystem}; +use crate::sources::mssql::{FloatN, IntN, MsSQLSource, MsSQLSourceError, MsSQLTypeSystem}; +use crate::typesystem::TypeConversion; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc}; +use num_traits::ToPrimitive; +use rust_decimal::Decimal; +use thiserror::Error; +use uuid::Uuid; + +/// Convert MsSQL data types to Arrow data types. +pub struct MsSQLArrowTransport; + +#[derive(Error, Debug)] +pub enum MsSQLArrowTransportError { + #[error(transparent)] + Source(#[from] MsSQLSourceError), + + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +impl_transport!( + name = MsSQLArrowTransport, + error = MsSQLArrowTransportError, + systems = MsSQLTypeSystem => ArrowTypeSystem, + route = MsSQLSource => ArrowDestination, + mappings = { + { Tinyint[u8] => Int64[i64] | conversion auto } + { Smallint[i16] => Int64[i64] | conversion auto } + { Int[i32] => Int64[i64] | conversion auto } + { Bigint[i64] => Int64[i64] | conversion auto } + { Intn[IntN] => Int64[i64] | conversion option } + { Float24[f32] => Float32[f32] | conversion auto } + { Float53[f64] => Float64[f64] | conversion auto } + { Floatn[FloatN] => Float64[f64] | conversion option } + { Bit[bool] => Boolean[bool] | conversion auto } + { Nvarchar[&'r str] => LargeUtf8[String] | conversion owned } + { Varchar[&'r str] => LargeUtf8[String] | conversion none } + { Nchar[&'r str] => LargeUtf8[String] | conversion none } + { Char[&'r str] => LargeUtf8[String] | conversion none } + { Text[&'r str] => LargeUtf8[String] | conversion none } + { Ntext[&'r str] => LargeUtf8[String] | conversion none } + { Binary[&'r [u8]] => LargeBinary[Vec] | conversion owned } + { Varbinary[&'r [u8]] => LargeBinary[Vec] | conversion none } + { Image[&'r [u8]] => LargeBinary[Vec] | conversion none } + { Numeric[Decimal] => Float64[f64] | conversion option } + { Decimal[Decimal] => Float64[f64] | conversion none } + { Datetime[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + { Datetime2[NaiveDateTime] => Date64[NaiveDateTime] | conversion none } + { Smalldatetime[NaiveDateTime] => Date64[NaiveDateTime] | conversion none } + { Date[NaiveDate] => Date32[NaiveDate] | conversion auto } + { Datetimeoffset[DateTime] => DateTimeTz[DateTime] | conversion auto } + { Uniqueidentifier[Uuid] => LargeUtf8[String] | conversion option } + { Time[NaiveTime] => Time64[NaiveTime] | conversion auto } + { SmallMoney[f32] => Float32[f32] | conversion none } + { Money[f64] => Float64[f64] | conversion none } + } +); + +impl TypeConversion for MsSQLArrowTransport { + fn convert(val: Uuid) -> String { + val.to_string() + } +} + +impl TypeConversion for MsSQLArrowTransport { + fn convert(val: IntN) -> i64 { + val.0 + } +} + +impl TypeConversion for MsSQLArrowTransport { + fn convert(val: FloatN) -> f64 { + val.0 + } +} + +impl TypeConversion for MsSQLArrowTransport { + fn convert(val: Decimal) -> f64 { + val.to_f64() + .unwrap_or_else(|| panic!("cannot convert decimal {:?} to float64", val)) + } +} diff --git a/connectorx/src/transports/mysql_arrowstream.rs b/connectorx/src/transports/mysql_arrowstream.rs new file mode 100644 index 0000000000..0d0bccd76e --- /dev/null +++ b/connectorx/src/transports/mysql_arrowstream.rs @@ -0,0 +1,122 @@ +//! Transport from MySQL Source to Arrow Destination. + +use crate::{ + destinations::arrowstream::{ + typesystem::ArrowTypeSystem, ArrowDestination, ArrowDestinationError, + }, + impl_transport, + sources::mysql::{ + BinaryProtocol, MySQLSource, MySQLSourceError, MySQLTypeSystem, TextProtocol, + }, + typesystem::TypeConversion, +}; +use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; +use num_traits::ToPrimitive; +use rust_decimal::Decimal; +use serde_json::{to_string, Value}; +use std::marker::PhantomData; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum MySQLArrowTransportError { + #[error(transparent)] + Source(#[from] MySQLSourceError), + + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +/// Convert MySQL data types to Arrow data types. +pub struct MySQLArrowTransport

(PhantomData

); + +impl_transport!( + name = MySQLArrowTransport, + error = MySQLArrowTransportError, + systems = MySQLTypeSystem => ArrowTypeSystem, + route = MySQLSource => ArrowDestination, + mappings = { + { Float[f32] => Float64[f64] | conversion auto } + { Double[f64] => Float64[f64] | conversion auto } + { Tiny[i8] => Boolean[bool] | conversion option } + { Short[i16] => Int64[i64] | conversion auto } + { Int24[i32] => Int64[i64] | conversion none } + { Long[i32] => Int64[i64] | conversion auto } + { LongLong[i64] => Int64[i64] | conversion auto } + { UTiny[u8] => Int64[i64] | conversion auto } + { UShort[u16] => Int64[i64] | conversion auto } + { ULong[u32] => Int64[i64] | conversion auto } + { UInt24[u32] => Int64[i64] | conversion none } + { ULongLong[u64] => Float64[f64] | conversion auto } + { Date[NaiveDate] => Date32[NaiveDate] | conversion auto } + { Time[NaiveTime] => Time64[NaiveTime] | conversion auto } + { Datetime[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + { Year[i16] => Int64[i64] | conversion none} + { Timestamp[NaiveDateTime] => Date64[NaiveDateTime] | conversion none } + { Decimal[Decimal] => Float64[f64] | conversion option } + { VarChar[String] => LargeUtf8[String] | conversion auto } + { Char[String] => LargeUtf8[String] | conversion none } + { Enum[String] => LargeUtf8[String] | conversion none } + { TinyBlob[Vec] => LargeBinary[Vec] | conversion auto } + { Blob[Vec] => LargeBinary[Vec] | conversion none } + { MediumBlob[Vec] => LargeBinary[Vec] | conversion none } + { LongBlob[Vec] => LargeBinary[Vec] | conversion none } + { Json[Value] => LargeUtf8[String] | conversion option } + } +); + +impl_transport!( + name = MySQLArrowTransport, + error = MySQLArrowTransportError, + systems = MySQLTypeSystem => ArrowTypeSystem, + route = MySQLSource => ArrowDestination, + mappings = { + { Float[f32] => Float64[f64] | conversion auto } + { Double[f64] => Float64[f64] | conversion auto } + { Tiny[i8] => Boolean[bool] | conversion option } + { Short[i16] => Int64[i64] | conversion auto } + { Int24[i32] => Int64[i64] | conversion none } + { Long[i32] => Int64[i64] | conversion auto } + { LongLong[i64] => Int64[i64] | conversion auto } + { UTiny[u8] => Int64[i64] | conversion auto } + { UShort[u16] => Int64[i64] | conversion auto } + { ULong[u32] => Int64[i64] | conversion auto } + { UInt24[u32] => Int64[i64] | conversion none } + { ULongLong[u64] => Float64[f64] | conversion auto } + { Date[NaiveDate] => Date32[NaiveDate] | conversion auto } + { Time[NaiveTime] => Time64[NaiveTime] | conversion auto } + { Datetime[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + { Year[i16] => Int64[i64] | conversion none} + { Timestamp[NaiveDateTime] => Date64[NaiveDateTime] | conversion none } + { Decimal[Decimal] => Float64[f64] | conversion option } + { VarChar[String] => LargeUtf8[String] | conversion auto } + { Char[String] => LargeUtf8[String] | conversion none } + { Enum[String] => LargeUtf8[String] | conversion none } + { TinyBlob[Vec] => LargeBinary[Vec] | conversion auto } + { Blob[Vec] => LargeBinary[Vec] | conversion none } + { MediumBlob[Vec] => LargeBinary[Vec] | conversion none } + { LongBlob[Vec] => LargeBinary[Vec] | conversion none } + { Json[Value] => LargeUtf8[String] | conversion option } + } +); + +impl

TypeConversion for MySQLArrowTransport

{ + fn convert(val: Decimal) -> f64 { + val.to_f64() + .unwrap_or_else(|| panic!("cannot convert decimal {:?} to float64", val)) + } +} + +impl

TypeConversion for MySQLArrowTransport

{ + fn convert(val: Value) -> String { + to_string(&val).unwrap() + } +} + +impl

TypeConversion for MySQLArrowTransport

{ + fn convert(val: i8) -> bool { + val != 0 + } +} diff --git a/connectorx/src/transports/oracle_arrowstream.rs b/connectorx/src/transports/oracle_arrowstream.rs new file mode 100644 index 0000000000..c6f53bcc69 --- /dev/null +++ b/connectorx/src/transports/oracle_arrowstream.rs @@ -0,0 +1,47 @@ +use crate::{ + destinations::arrowstream::{ + typesystem::ArrowTypeSystem, ArrowDestination, ArrowDestinationError, + }, + impl_transport, + sources::oracle::{OracleSource, OracleSourceError, OracleTypeSystem}, + typesystem::TypeConversion, +}; +use chrono::{DateTime, NaiveDateTime, Utc}; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum OracleArrowTransportError { + #[error(transparent)] + Source(#[from] OracleSourceError), + + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +pub struct OracleArrowTransport; + +impl_transport!( + name = OracleArrowTransport, + error = OracleArrowTransportError, + systems = OracleTypeSystem => ArrowTypeSystem, + route = OracleSource => ArrowDestination, + mappings = { + { NumFloat[f64] => Float64[f64] | conversion auto } + { Float[f64] => Float64[f64] | conversion none } + { BinaryFloat[f64] => Float64[f64] | conversion none } + { BinaryDouble[f64] => Float64[f64] | conversion none } + { NumInt[i64] => Int64[i64] | conversion auto } + { Blob[Vec] => LargeBinary[Vec] | conversion auto } + { Clob[String] => LargeUtf8[String] | conversion none } + { VarChar[String] => LargeUtf8[String] | conversion auto } + { Char[String] => LargeUtf8[String] | conversion none } + { NVarChar[String] => LargeUtf8[String] | conversion none } + { NChar[String] => LargeUtf8[String] | conversion none } + { Date[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + { Timestamp[NaiveDateTime] => Date64[NaiveDateTime] | conversion none } + { TimestampTz[DateTime] => DateTimeTz[DateTime] | conversion auto } + } +); diff --git a/connectorx/src/transports/postgres_arrowstream.rs b/connectorx/src/transports/postgres_arrowstream.rs new file mode 100644 index 0000000000..7d1c20d9e3 --- /dev/null +++ b/connectorx/src/transports/postgres_arrowstream.rs @@ -0,0 +1,95 @@ +//! Transport from Postgres Source to Arrow Destination. + +use crate::destinations::arrowstream::{ + typesystem::ArrowTypeSystem, ArrowDestination, ArrowDestinationError, +}; +use crate::sources::postgres::{ + BinaryProtocol, CSVProtocol, CursorProtocol, PostgresSource, PostgresSourceError, + PostgresTypeSystem, SimpleProtocol, +}; +use crate::typesystem::TypeConversion; +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc}; +use num_traits::ToPrimitive; +use postgres::NoTls; +use postgres_openssl::MakeTlsConnector; +use rust_decimal::Decimal; +use serde_json::Value; +use std::marker::PhantomData; +use thiserror::Error; +use uuid::Uuid; + +#[derive(Error, Debug)] +pub enum PostgresArrowTransportError { + #[error(transparent)] + Source(#[from] PostgresSourceError), + + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +/// Convert Postgres data types to Arrow data types. +pub struct PostgresArrowTransport(PhantomData

, PhantomData); + +macro_rules! impl_postgres_transport { + ($proto:ty, $tls:ty) => { + impl_transport!( + name = PostgresArrowTransport<$proto, $tls>, + error = PostgresArrowTransportError, + systems = PostgresTypeSystem => ArrowTypeSystem, + route = PostgresSource<$proto, $tls> => ArrowDestination, + mappings = { + { Float4[f32] => Float64[f64] | conversion auto } + { Float8[f64] => Float64[f64] | conversion auto } + { Numeric[Decimal] => Float64[f64] | conversion option } + { Int2[i16] => Int64[i64] | conversion auto } + { Int4[i32] => Int64[i64] | conversion auto } + { Int8[i64] => Int64[i64] | conversion auto } + { Bool[bool] => Boolean[bool] | conversion auto } + { Text[&'r str] => LargeUtf8[String] | conversion owned } + { BpChar[&'r str] => LargeUtf8[String] | conversion none } + { VarChar[&'r str] => LargeUtf8[String] | conversion none } + { Name[&'r str] => LargeUtf8[String] | conversion none } + { Timestamp[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + { Date[NaiveDate] => Date32[NaiveDate] | conversion auto } + { Time[NaiveTime] => Time64[NaiveTime] | conversion auto } + { TimestampTz[DateTime] => DateTimeTz[DateTime] | conversion auto } + { UUID[Uuid] => LargeUtf8[String] | conversion option } + { Char[&'r str] => LargeUtf8[String] | conversion none } + { ByteA[Vec] => LargeBinary[Vec] | conversion auto } + { JSON[Value] => LargeUtf8[String] | conversion option } + { JSONB[Value] => LargeUtf8[String] | conversion none } + } + ); + } +} + +impl_postgres_transport!(BinaryProtocol, NoTls); +impl_postgres_transport!(BinaryProtocol, MakeTlsConnector); +impl_postgres_transport!(CSVProtocol, NoTls); +impl_postgres_transport!(CSVProtocol, MakeTlsConnector); +impl_postgres_transport!(CursorProtocol, NoTls); +impl_postgres_transport!(CursorProtocol, MakeTlsConnector); +impl_postgres_transport!(SimpleProtocol, NoTls); +impl_postgres_transport!(SimpleProtocol, MakeTlsConnector); + +impl TypeConversion for PostgresArrowTransport { + fn convert(val: Uuid) -> String { + val.to_string() + } +} + +impl TypeConversion for PostgresArrowTransport { + fn convert(val: Decimal) -> f64 { + val.to_f64() + .unwrap_or_else(|| panic!("cannot convert decimal {:?} to float64", val)) + } +} + +impl TypeConversion for PostgresArrowTransport { + fn convert(val: Value) -> String { + val.to_string() + } +} diff --git a/connectorx/src/transports/sqlite_arrowstream.rs b/connectorx/src/transports/sqlite_arrowstream.rs new file mode 100644 index 0000000000..0c23db5eaf --- /dev/null +++ b/connectorx/src/transports/sqlite_arrowstream.rs @@ -0,0 +1,52 @@ +//! Transport from SQLite Source to Arrow Destination. + +use crate::{ + destinations::arrowstream::{ + typesystem::ArrowTypeSystem, ArrowDestination, ArrowDestinationError, + }, + impl_transport, + sources::sqlite::{SQLiteSource, SQLiteSourceError, SQLiteTypeSystem}, + typesystem::TypeConversion, +}; +use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum SQLiteArrowTransportError { + #[error(transparent)] + Source(#[from] SQLiteSourceError), + + #[error(transparent)] + Destination(#[from] ArrowDestinationError), + + #[error(transparent)] + ConnectorX(#[from] crate::errors::ConnectorXError), +} + +/// Convert SQLite data types to Arrow data types. +pub struct SQLiteArrowTransport; + +impl_transport!( + name = SQLiteArrowTransport, + error = SQLiteArrowTransportError, + systems = SQLiteTypeSystem => ArrowTypeSystem, + route = SQLiteSource => ArrowDestination, + mappings = { + { Bool[bool] => Boolean[bool] | conversion auto } + { Int8[i64] => Int64[i64] | conversion auto } + { Int4[i32] => Int64[i64] | conversion auto } + { Int2[i16] => Int64[i64] | conversion auto } + { Real[f64] => Float64[f64] | conversion auto } + { Text[Box] => LargeUtf8[String] | conversion option } + { Blob[Vec] => LargeBinary[Vec] | conversion auto } + { Date[NaiveDate] => Date32[NaiveDate] | conversion auto } + { Time[NaiveTime] => Time64[NaiveTime] | conversion auto } + { Timestamp[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto } + } +); + +impl TypeConversion, String> for SQLiteArrowTransport { + fn convert(val: Box) -> String { + val.to_string() + } +}