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/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..12f303ced3 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,26 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: github-actions + directory: '/' + schedule: + # Check for updates to GitHub Actions every week + interval: weekly + + # copy over from https://github.com/pola-rs/polars/blob/main/.github/dependabot.yml + # Rust Polars + - package-ecosystem: cargo + directory: '/' + schedule: + interval: weekly + #ignore: + # - dependency-name: '*' + # update-types: ['version-update:semver-patch'] + commit-message: + prefix: build(rust) + prefix-development: chore(rust) + #labels: ['skip changelog'] diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 51af80f445..90322bd566 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -14,7 +14,7 @@ jobs: benchmark: runs-on: [self-hosted, linux, x64, connectorx-benchmark] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install tools run: | @@ -26,7 +26,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.71.1 + toolchain: stable components: rustfmt default: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af0c0adfed..2b310a7ce0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,7 @@ jobs: # --health-timeout 5s # --health-retries 20 # steps: - # - uses: actions/checkout@v2 + # - uses: actions/checkout@v4 # - name: Install tools # run: | @@ -69,11 +69,11 @@ jobs: # - name: Install Rust # uses: actions-rs/toolchain@v1 # with: - # toolchain: 1.71.1 + # toolchain: stable # components: rustfmt # default: true - # - uses: actions/cache@v2 + # - uses: actions/cache@v4 # with: # path: | # ~/.cargo/bin/ @@ -176,7 +176,7 @@ jobs: --health-retries 20 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install tools run: | @@ -191,16 +191,16 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.71.1 + toolchain: stable components: rustfmt default: true - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: "temurin" - java-version: "8" + java-version: "17" - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: | ~/.cargo/bin/ @@ -238,7 +238,7 @@ jobs: args: --features all --all - name: Cache venv - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/pypoetry/virtualenvs key: ${{ runner.os }}-venv-${{ secrets.CACHE_VERSION }}-${{ hashFiles('connectorx-python/poetry.lock') }} @@ -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/.github/workflows/docs.yml b/.github/workflows/docs.yml index 74cda1cd16..a61afcf89d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -9,17 +9,17 @@ jobs: docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.71.1 + toolchain: stable components: rustfmt default: true - name: Intall Python - uses: actions/setup-python@v1 + uses: actions/setup-python@v5 with: python-version: 3.7 @@ -46,7 +46,7 @@ jobs: run: touch ./docs/_build/html/.nojekyll - name: Deploy Docs 🚀 - uses: JamesIves/github-pages-deploy-action@4.0.0 + uses: JamesIves/github-pages-deploy-action@v4.5.0 with: branch: gh-pages # The branch the action should deploy to. folder: ./docs/_build/html # The folder the action should deploy. diff --git a/.github/workflows/import-test.yml b/.github/workflows/import-test.yml index 20aa1d79f8..b01c9ef9fd 100644 --- a/.github/workflows/import-test.yml +++ b/.github/workflows/import-test.yml @@ -20,10 +20,10 @@ jobs: os: [ubuntu-latest, macos-10.15, windows-latest] python-version: ["3.7", "3.8", "3.9", "3.10"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} architecture: x64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 573d845d2a..33dd32d98a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: matrix: python-version: [[38, "3.8"], [39, "3.9"], [310, "3.10"], [311, "3.11"]] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set python version run: | @@ -22,16 +22,16 @@ jobs: - uses: actions-rs/toolchain@v1 with: - toolchain: 1.71.1 + toolchain: stable components: rustfmt target: aarch64-unknown-linux-gnu default: true - - uses: extractions/setup-just@v1 + - uses: extractions/setup-just@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: Gr1N/setup-poetry@v8 + - uses: Gr1N/setup-poetry@v9 - name: Install tools run: | @@ -44,7 +44,8 @@ jobs: - uses: PyO3/maturin-action@v1 with: - rust-toolchain: 1.71.1 + rust-toolchain: stable + maturin-version: v0.14.15 command: build args: -m connectorx-python/Cargo.toml -i python --release --manylinux 2_28 --features integrated-auth-gssapi env: @@ -57,13 +58,14 @@ jobs: # rebuild the wheel to incorporate j4rs dependencies - uses: PyO3/maturin-action@v1 with: - rust-toolchain: 1.71.1 + rust-toolchain: stable + maturin-version: v0.14.15 command: build args: -m connectorx-python/Cargo.toml -i python --release --manylinux 2_28 --features integrated-auth-gssapi env: SQLITE3_STATIC: 1 - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: "ubuntu-latest-${{ matrix.python-version[1] }}" path: connectorx-python/target/wheels/*.whl @@ -139,28 +141,28 @@ jobs: - os: "macos-latest" features: "--features integrated-auth-gssapi" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: ankane/setup-mysql@v1 with: mysql-version: 8 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} architecture: x64 - uses: actions-rs/toolchain@v1 with: - toolchain: 1.71.1 + toolchain: stable components: rustfmt default: true - - uses: extractions/setup-just@v1 + - uses: extractions/setup-just@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: Gr1N/setup-poetry@v8 + - uses: Gr1N/setup-poetry@v9 - name: Setup project run: | @@ -168,7 +170,8 @@ jobs: - uses: PyO3/maturin-action@v1 with: - rust-toolchain: 1.71.1 + rust-toolchain: stable + maturin-version: v0.14.15 command: build args: -m connectorx-python/Cargo.toml -i python --release ${{ matrix.features }} env: @@ -181,13 +184,14 @@ jobs: # rebuild the wheel to incorporate j4rs dependencies - uses: PyO3/maturin-action@v1 with: - rust-toolchain: 1.71.1 + rust-toolchain: stable + maturin-version: v0.14.15 command: build args: -m connectorx-python/Cargo.toml -i python --release ${{ matrix.features }} env: SQLITE3_STATIC: 1 - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: "${{ matrix.os }}-${{ matrix.python-version }}" path: connectorx-python/target/wheels/*.whl @@ -198,28 +202,28 @@ jobs: matrix: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: ankane/setup-mysql@v1 with: mysql-version: 8 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - uses: actions-rs/toolchain@v1 with: - toolchain: 1.71.1 + toolchain: stable components: rustfmt target: aarch64-apple-darwin default: true - - uses: extractions/setup-just@v1 + - uses: extractions/setup-just@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: Gr1N/setup-poetry@v8 + - uses: Gr1N/setup-poetry@v9 - name: Setup project run: | @@ -227,7 +231,8 @@ jobs: - uses: PyO3/maturin-action@v1 with: - rust-toolchain: 1.71.1 + rust-toolchain: stable + maturin-version: v0.14.15 command: build args: -m connectorx-python/Cargo.toml --target aarch64-apple-darwin -i python --release --features integrated-auth-gssapi env: @@ -240,13 +245,14 @@ jobs: # rebuild the wheel to incorporate j4rs dependencies - uses: PyO3/maturin-action@v1 with: - rust-toolchain: 1.71.1 + rust-toolchain: stable + maturin-version: v0.14.15 command: build args: -m connectorx-python/Cargo.toml --target aarch64-apple-darwin -i python --release --features integrated-auth-gssapi env: SQLITE3_STATIC: 1 - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: "macos-${{ matrix.python-version }}" path: connectorx-python/target/wheels/*.whl @@ -260,14 +266,14 @@ jobs: python-version: ["3.8", "3.9", "3.10", "3.11"] os: [macos-latest, ubuntu-latest, windows-latest] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} architecture: x64 - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: "${{ matrix.os }}-${{ matrix.python-version }}" @@ -280,7 +286,7 @@ jobs: needs: [verify] steps: - name: Download all artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 - name: Setup environment run: | diff --git a/.gitignore b/.gitignore index e9b003dc5e..34023c9436 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*.swp + **/target .vscode connectorx-python/connectorx/*.so @@ -19,3 +21,7 @@ docs/_build connectorx/examples/test.rs *.duckdb federated-query/ +flake.nix +flake.lock +.envrc +.direnv/ diff --git a/Cargo.lock b/Cargo.lock index 77e14bfe16..a06f54aaa8 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", ] @@ -19,33 +19,34 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.12", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", "const-random", - "getrandom 0.2.10", + "getrandom 0.2.12", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -97,9 +98,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "argminmax" @@ -130,64 +131,111 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "arrow" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e2bcd431a4aa0ff003fdd2dc21c78cfb42f31459c89d2312c2746fe17a5ac" +checksum = "04a8801ebb147ad240b2d978d3ab9f73c9ccd4557ba6a03e7800496770ed10e0" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", + "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 = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "895263144bd4a69751cbe6a34a53f26626e19770b313a9fa792c415cd0e78f11" +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 = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9044300874385f19e77cbf90911e239bd23630d8f23bb0f948f9067998a13b7" +checksum = "226fdc6c3a4ae154a74c24091d36a90b514f0ed7112f5b8322c1d8f354d8e20d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow-buffer", "arrow-data", "arrow-schema", "chrono", + "chrono-tz", "half 2.3.1", - "hashbrown 0.12.3", + "hashbrown 0.14.3", "num", ] [[package]] name = "arrow-buffer" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78476cbe9e3f808dcecab86afe42d573863c63e149c62e6e379ed2522743e626" +checksum = "fc4843af4dd679c2f35b69c572874da8fde33be53eb549a5fb128e7a4b763510" dependencies = [ + "bytes", "half 2.3.1", "num", ] +[[package]] +name = "arrow-cast" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e8b9990733a9b635f656efda3c9b8308c7a19695c9ec2c7046dd154f9b144b" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "chrono", + "comfy-table", + "half 2.3.1", + "lexical-core", + "num", +] + +[[package]] +name = "arrow-csv" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "646fbb4e11dd0afb8083e883f53117713b8caadb4413b3c9e63e3f535da3683c" +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 = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d916feee158c485dad4f701cba31bc9a90a8db87d9df8e2aa8adc0c20a2bbb9" +checksum = "da900f31ff01a0a84da0572209be72b2b6f980f3ea58803635de47913191c188" dependencies = [ "arrow-buffer", "arrow-schema", @@ -205,23 +253,106 @@ dependencies = [ "serde", ] +[[package]] +name = "arrow-ipc" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2707a8d7ee2d345d045283ece3ae43416175873483e5d96319c929da542a0b1f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1b91a63c356d14eedc778b76d66a88f35ac8498426bb0799a769a49a74a8b4" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.3.1", + "indexmap 2.1.0", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584325c91293abbca7aaaabf8da9fe303245d641f5f4a18a6058dc68009c7ebf" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half 2.3.1", + "num", +] + +[[package]] +name = "arrow-row" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e32afc1329f7b372463b21c6ca502b07cf237e1ed420d87706c1770bb0ebd38" +dependencies = [ + "ahash 0.8.7", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half 2.3.1", + "hashbrown 0.14.3", +] + [[package]] name = "arrow-schema" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9406eb7834ca6bd8350d1baa515d18b9fcec487eddacfb62f5e19511f7bd37" +checksum = "b104f5daa730f00fde22adc03a12aa5a2ae9ccbbf99cbd53d284119ddc90e03d" +dependencies = [ + "bitflags 2.4.2", +] [[package]] name = "arrow-select" -version = "26.0.0" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b3ca55356d1eae07cf48808d8c462cea674393ae6ad1e0b120f40b422eb2b4" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6593a01586751c74498495d2f5a01fcd438102b52965c11dd98abf4ebcacef37" +checksum = "af1433ce02590cae68da0a18ed3a3ed868ffac2c6f24c533ddd2067f7ee04b4a" dependencies = [ "arrow-array", "arrow-buffer", "arrow-data", "arrow-schema", + "arrow-select", "num", + "regex", + "regex-syntax 0.7.5", ] [[package]] @@ -230,7 +361,7 @@ version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59c468daea140b747d781a1da9f7db5f0a8e6636d4af20cc539e43d05b0604fa" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow-format", "bytemuck", "chrono", @@ -239,18 +370,18 @@ dependencies = [ "ethnum", "foreign_vec", "futures", - "getrandom 0.2.10", + "getrandom 0.2.12", "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 0.12.4", ] [[package]] @@ -266,9 +397,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.3.15" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" dependencies = [ "bzip2", "flate2", @@ -277,13 +408,16 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", + "xz2", + "zstd 0.13.0", + "zstd-safe 7.0.0", ] [[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 +494,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] name = "async-trait" -version = "0.1.71" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -415,9 +549,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 +570,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bb8" @@ -485,7 +619,7 @@ version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", "cexpr", "clang-sys", "clap", @@ -504,15 +638,15 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.3.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "bitvec" @@ -532,30 +666,20 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec", "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", ] [[package]] @@ -569,54 +693,33 @@ dependencies = [ [[package]] name = "borsh" -version = "0.10.3" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667" dependencies = [ "borsh-derive", - "hashbrown 0.13.2", + "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "0.10.3" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd" dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", + "once_cell", "proc-macro-crate", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" -dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.48", + "syn_derive", ] [[package]] name = "brotli" -version = "3.3.4" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -625,9 +728,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -641,9 +744,9 @@ checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytecheck" @@ -669,35 +772,35 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9" 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.48", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "bzip2" @@ -728,11 +831,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]] @@ -756,31 +860,58 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.52.0", +] + +[[package]] +name = "chrono-tz" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d7b79e99bfaa0d47da0687c43aa3b7381938a62ad3a6498599039321f660b7" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", ] [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" dependencies = [ "glob", "libc", - "libloading 0.7.4", + "libloading 0.8.1", ] [[package]] @@ -791,7 +922,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags 1.3.2", + "bitflags 1.2.1", "strsim 0.8.0", "textwrap", "unicode-width", @@ -809,32 +940,21 @@ dependencies = [ [[package]] name = "comfy-table" -version = "6.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" -dependencies = [ - "strum", - "strum_macros 0.24.3", - "unicode-width", -] - -[[package]] -name = "comfy-table" -version = "7.0.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" +checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686" dependencies = [ "crossterm", "strum", - "strum_macros 0.24.3", + "strum_macros", "unicode-width", ] [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] @@ -851,7 +971,7 @@ dependencies = [ [[package]] name = "connectorx" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" dependencies = [ "anyhow", "arrow", @@ -869,7 +989,7 @@ dependencies = [ "gcp-bigquery-client", "hex", "iai", - "itertools", + "itertools 0.11.0", "j4rs", "log", "mysql_common", @@ -895,7 +1015,7 @@ dependencies = [ "rust_decimal", "rust_decimal_macros", "serde_json", - "sqlparser 0.11.0", + "sqlparser 0.37.0", "thiserror", "tiberius", "tokio", @@ -907,32 +1027,31 @@ dependencies = [ [[package]] name = "connectorx-cpp" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" dependencies = [ "arrow", "connectorx", "libc", + "openssl", ] [[package]] name = "const-random" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" dependencies = [ "const-random-macro", - "proc-macro-hack", ] [[package]] name = "const-random-macro" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.12", "once_cell", - "proc-macro-hack", "tiny-keccak", ] @@ -944,9 +1063,9 @@ checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -954,9 +1073,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cpp_demangle" @@ -969,9 +1088,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -996,7 +1115,7 @@ dependencies = [ "clap", "criterion-plot", "csv", - "itertools", + "itertools 0.10.5", "lazy_static", "num-traits", "oorandom", @@ -1018,16 +1137,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] [[package]] name = "crossbeam" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ - "cfg-if", "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", @@ -1037,70 +1155,57 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.8" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crossterm" -version = "0.26.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "crossterm_winapi", "libc", - "mio", "parking_lot 0.12.1", - "signal-hook", - "signal-hook-mio", "winapi", ] @@ -1131,9 +1236,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ "csv-core", "itoa", @@ -1143,9 +1248,9 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] @@ -1185,83 +1290,129 @@ 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.3", + "lock_api", + "once_cell", + "parking_lot_core 0.9.9", +] + [[package]] name = "datafusion" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a8411475928479fe57af18698626f0a44f3c29153e051dce45f7455c08a6d5" +checksum = "6a4e4fc25698a14c90b34dda647ba10a5a966dc04b036d22e77fb1048663375d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow", + "arrow-array", + "arrow-schema", "async-compression", "async-trait", "bytes", "bzip2", "chrono", + "dashmap", "datafusion-common", + "datafusion-execution", "datafusion-expr", "datafusion-optimizer", "datafusion-physical-expr", - "datafusion-row", "datafusion-sql", "flate2", "futures", "glob", - "hashbrown 0.12.3", - "itertools", - "lazy_static", + "half 2.3.1", + "hashbrown 0.14.3", + "indexmap 2.1.0", + "itertools 0.11.0", "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.37.0", "tempfile", "tokio", - "tokio-stream", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "url", - "uuid 1.4.0", + "uuid 1.7.0", + "xz2", + "zstd 0.12.4", ] [[package]] name = "datafusion-common" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ffcbc1f040c9ab99f41db1c743d95aff267bb2e7286aaa010738b7402251" +checksum = "c23ad0229ea4a85bf76b236d8e75edf539881fdb02ce4e2394f9a76de6055206" dependencies = [ "arrow", + "arrow-array", + "async-compression", + "bytes", + "bzip2", "chrono", + "flate2", + "futures", + "num_cpus", "object_store", - "ordered-float 3.7.0", "parquet", - "sqlparser 0.26.0", + "sqlparser 0.37.0", + "tokio", + "tokio-util 0.7.10", + "xz2", + "zstd 0.12.4", ] [[package]] -name = "datafusion-expr" -version = "14.0.0" +name = "datafusion-execution" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1883d9590d303ef38fa295567e7fdb9f8f5f511fcc167412d232844678cd295c" +checksum = "9b37d2fc1a213baf34e0a57c85b8e6648f1a95152798fd6738163ee96c19203f" dependencies = [ - "ahash 0.8.3", "arrow", + "dashmap", "datafusion-common", + "datafusion-expr", + "futures", + "hashbrown 0.14.3", "log", - "sqlparser 0.26.0", + "object_store", + "parking_lot 0.12.1", + "rand 0.8.5", + "tempfile", + "url", +] + +[[package]] +name = "datafusion-expr" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ea9844395f537730a145e5d87f61fecd37c2bc9d54e1dc89b35590d867345d" +dependencies = [ + "ahash 0.8.7", + "arrow", + "datafusion-common", + "sqlparser 0.37.0", + "strum", + "strum_macros", ] [[package]] name = "datafusion-optimizer" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2127d46d566ab3463d70da9675fc07b9d634be8d17e80d0e1ce79600709fe651" +checksum = "c8a30e0f79c5d59ba14d3d70f2500e87e0ff70236ad5e47f9444428f054fd2be" dependencies = [ "arrow", "async-trait", @@ -1269,63 +1420,58 @@ dependencies = [ "datafusion-common", "datafusion-expr", "datafusion-physical-expr", - "hashbrown 0.12.3", + "hashbrown 0.14.3", + "itertools 0.11.0", "log", + "regex-syntax 0.7.5", ] [[package]] name = "datafusion-physical-expr" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d108b6fe8eeb317ecad1d74619e8758de49cccc8c771b56c97962fd52eaae23" +checksum = "766c567082c9bbdcb784feec8fe40c7049cedaeb3a18d54f563f75fe0dc1932c" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow", + "arrow-array", "arrow-buffer", "arrow-schema", + "base64 0.21.7", "blake2", "blake3", "chrono", "datafusion-common", "datafusion-expr", - "datafusion-row", "half 2.3.1", - "hashbrown 0.12.3", - "itertools", - "lazy_static", + "hashbrown 0.14.3", + "hex", + "indexmap 2.1.0", + "itertools 0.11.0", + "libc", + "log", "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", -] - -[[package]] -name = "datafusion-row" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43537b6377d506e4788bf21e9ed943340e076b48ca4d077e6ea4405ca5e54a1c" -dependencies = [ - "arrow", - "datafusion-common", - "paste", - "rand 0.8.5", + "uuid 1.7.0", ] [[package]] name = "datafusion-sql" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244d08d4710e1088d9c0949c9b5b8d68d9cf2cde7203134a4cc389e870fe2354" +checksum = "811fd084cf2d78aa0c76b74320977c7084ad0383690612528b580795764b4dd0" dependencies = [ "arrow", + "arrow-schema", "datafusion-common", "datafusion-expr", - "sqlparser 0.26.0", + "log", + "sqlparser 0.37.0", ] [[package]] @@ -1338,23 +1484,24 @@ dependencies = [ ] [[package]] -name = "derive_utils" -version = "0.13.1" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ce151e1b790e3e36d767ae57691240feafe8b605e1c2fe081183d64ac1bff3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.26", + "powerfmt", + "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.48", ] [[package]] @@ -1363,16 +1510,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 +1541,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.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[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 +1625,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,27 +1641,27 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] name = "enumflags2" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -1526,36 +1679,25 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] name = "ethnum" -version = "1.3.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0198b9d0078e0f30dedc7acbb21c974e838fc8fae3ee170128658a98cb2c1c04" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] name = "event-listener" @@ -1569,6 +1711,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fallible-streaming-iterator" version = "0.1.9" @@ -1583,12 +1731,9 @@ checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fehler" @@ -1610,21 +1755,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", + "bitflags 1.2.1", + "rustc_version", ] [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "libz-sys", @@ -1660,9 +1817,9 @@ checksum = "ee1b05cbd864bcaecbd3455d6d967862d446e4ebfc3c2e5e5b9841e53cba6673" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1692,7 +1849,7 @@ checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" dependencies = [ "frunk_proc_macro_helpers", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -1704,7 +1861,7 @@ dependencies = [ "frunk_core", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -1716,7 +1873,7 @@ dependencies = [ "frunk_core", "frunk_proc_macro_helpers", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -1733,9 +1890,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1748,9 +1905,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1758,15 +1915,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1775,38 +1932,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1834,7 +1991,7 @@ dependencies = [ "serde", "serde_json", "thiserror", - "time 0.3.23", + "time", "tokio", "tokio-stream", "url", @@ -1864,9 +2021,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "js-sys", @@ -1877,9 +2034,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -1889,9 +2046,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "h2" -version = "0.3.20" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -1899,10 +2056,10 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", ] @@ -1929,51 +2086,33 @@ version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c" -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash 0.7.6", -] - [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 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", + "ahash 0.7.7", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "allocator-api2", "rayon", ] [[package]] name = "hashlink" -version = "0.7.0" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.14.3", ] [[package]] @@ -1993,9 +2132,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "hex" @@ -2009,23 +2148,23 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -2034,9 +2173,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -2051,9 +2190,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" @@ -2063,9 +2202,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -2078,7 +2217,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.5", "tokio", "tower-service", "tracing", @@ -2094,7 +2233,7 @@ dependencies = [ "http", "hyper", "log", - "rustls 0.20.8", + "rustls 0.20.9", "rustls-native-certs", "tokio", "tokio-rustls 0.23.4", @@ -2102,14 +2241,14 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", "hyper", - "rustls 0.21.5", + "rustls 0.21.10", "tokio", "tokio-rustls 0.24.1", ] @@ -2122,16 +2261,16 @@ checksum = "71a816c97c42258aa5834d07590b718b4c9a598944cd39a52dc25b351185d678" [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -2151,9 +2290,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2171,12 +2310,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", ] [[package]] @@ -2185,7 +2324,7 @@ version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3886428c6400486522cf44b8626e7b94ad794c14390290f2a274dcf728a58f" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", "atty", "indexmap 1.9.3", "itoa", @@ -2219,25 +2358,14 @@ 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.48", ] [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itertools" @@ -2248,30 +2376,41 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[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 0.7.4", "log", "serde", "serde_json", - "sha2 0.9.9", + "sha2", ] [[package]] @@ -2292,9 +2431,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] @@ -2395,9 +2534,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.147" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libgssapi" @@ -2405,7 +2544,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "724dbcd1f871da9c67983537a47ac510c278656f6392418ad67c7a52720e54b2" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", "bytes", "lazy_static", "libgssapi-sys", @@ -2423,9 +2562,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.6.7" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", "winapi", @@ -2433,25 +2572,36 @@ dependencies = [ [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "libsqlite3-sys" -version = "0.24.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" dependencies = [ "cc", "pkg-config", @@ -2460,9 +2610,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.9" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" dependencies = [ "cc", "pkg-config", @@ -2471,15 +2621,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2487,9 +2637,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,11 +2670,22 @@ 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" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" dependencies = [ "autocfg", "rawpointer", @@ -2532,11 +2693,12 @@ dependencies = [ [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ - "digest 0.10.7", + "cfg-if", + "digest", ] [[package]] @@ -2553,9 +2715,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memmap2" @@ -2577,9 +2739,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.9.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] @@ -2607,23 +2769,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", - "log", "wasi 0.11.0+wasi-snapshot-preview1", - "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", + "windows-sys 0.48.0", ] [[package]] @@ -2632,21 +2784,10 @@ 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" @@ -2680,7 +2821,7 @@ dependencies = [ "percent-encoding", "serde", "serde_json", - "socket2 0.4.9", + "socket2 0.4.10", "twox-hash", "url", ] @@ -2694,7 +2835,7 @@ dependencies = [ "base64 0.13.1", "bigdecimal", "bindgen", - "bitflags 1.3.2", + "bitflags 1.2.1", "bitvec", "byteorder", "bytes", @@ -2715,12 +2856,12 @@ dependencies = [ "serde", "serde_json", "sha1", - "sha2 0.10.7", + "sha2", "smallvec", "subprocess", "thiserror", - "time 0.3.23", - "uuid 1.4.0", + "time", + "uuid 1.7.0", ] [[package]] @@ -2765,14 +2906,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.20.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" +checksum = "f5e06129fb611568ef4e868c14b326274959aa70ff7776e9d55323531c374945" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", "cc", "cfg-if", "libc", + "memoffset", ] [[package]] @@ -2819,9 +2961,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 +2972,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 +3024,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -2896,7 +3038,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.4", "libc", ] @@ -2911,24 +3053,25 @@ dependencies = [ [[package]] name = "object" -version = "0.31.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "object_store" -version = "0.5.6" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9cd6ca25e796a49fa242876d1c4de36a24a6da5258e9f0bc062dbf5e81c53b" +checksum = "f930c88a43b1c3f6e776dfe495b4afab89882dbc81530c632db2ed65451ebcb4" dependencies = [ "async-trait", "bytes", "chrono", "futures", - "itertools", + "humantime", + "itertools 0.11.0", "parking_lot 0.12.1", "percent-encoding", "snafu", @@ -2940,9 +3083,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" @@ -2950,19 +3093,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.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "cfg-if", "foreign-types", "libc", @@ -2979,7 +3116,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -2988,14 +3125,24 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "300.2.1+3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -3041,18 +3188,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.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc2dbde8f8a79f2102cc474ceb0ad68e3b80b85289ea62389b60e66777e4213" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" dependencies = [ "num-traits", ] @@ -3084,7 +3222,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] @@ -3103,47 +3241,65 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] name = "parquet" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf8fa7ab6572791325a8595f55dc532dde88b996ae10a5ca8a2db746784ecc4" +checksum = "1ad2cba786ae07da4d73371a88b9e0f9d3ffac1a9badc83922e0e15814f5c5fa" dependencies = [ - "ahash 0.8.3", - "arrow", - "base64 0.13.1", + "ahash 0.8.7", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64 0.21.7", "brotli", "bytes", "chrono", "flate2", "futures", - "hashbrown 0.12.3", + "hashbrown 0.14.3", "lz4", "num", "num-bigint", + "object_store", + "paste", "seq-macro", "snap", "thrift", "tokio", - "zstd 0.11.2+zstd.1.5.2", + "twox-hash", + "zstd 0.12.4", +] + +[[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" @@ -3162,9 +3318,19 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] [[package]] name = "phf" @@ -3175,6 +3341,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 +3372,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" @@ -3198,9 +3384,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" [[package]] name = "planus" @@ -3245,7 +3431,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1362d4a136c0ebacb40d88a37ba361738b222fd8a2ee9340a3d8642f698c52b" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.12", "polars-core", "polars-io", "polars-lazy", @@ -3262,8 +3448,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f967c901fa5da4ca7f64e813d1268488ba97e9b3004cefc579ff851c197a1138" dependencies = [ "arrow2", - "hashbrown 0.14.0", - "multiversion 0.7.3", + "hashbrown 0.14.3", + "multiversion", "num-traits", "polars-error", "thiserror", @@ -3276,14 +3462,14 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b24f92fc5b167f668ff85ab9607dfa72e2c09664cacef59297ee8601dee60126" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow2", - "bitflags 2.4.0", + "bitflags 2.4.2", "chrono", - "comfy-table 7.0.1", + "comfy-table", "either", - "hashbrown 0.14.0", - "indexmap 2.0.0", + "hashbrown 0.14.3", + "indexmap 2.1.0", "num-traits", "once_cell", "polars-arrow", @@ -3317,7 +3503,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92cab0df9f2a35702fa5aec99edfaabf9ae8e9cdd0acf69e143ad2d132f34f9c" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow2", "async-trait", "bytes", @@ -3348,8 +3534,8 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c33762ec2a55e01c9f8776b34db86257c70a0a3b3929bd4eb91a52aacf61456" dependencies = [ - "ahash 0.8.3", - "bitflags 2.4.0", + "ahash 0.8.7", + "bitflags 2.4.2", "glob", "once_cell", "polars-arrow", @@ -3374,7 +3560,7 @@ dependencies = [ "argminmax", "arrow2", "either", - "indexmap 2.0.0", + "indexmap 2.1.0", "memchr", "polars-arrow", "polars-core", @@ -3390,7 +3576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f2bc9a12da9ed043fb0cb51dbcb87b365e4845b7ab6399d7a81e838460c6974" dependencies = [ "enum_dispatch", - "hashbrown 0.14.0", + "hashbrown 0.14.3", "num-traits", "polars-arrow", "polars-core", @@ -3410,7 +3596,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb67b014f0295e8e9dbb84404a91d666d477b3bc248a2ed51bc442833b16da35" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "arrow2", "once_cell", "polars-arrow", @@ -3422,7 +3608,7 @@ dependencies = [ "rayon", "regex", "smartstring", - "strum_macros 0.25.1", + "strum_macros", "version_check", ] @@ -3477,8 +3663,8 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c326708a370d71dc6e11a8f4bbc10a8479e1c314dc048ba73543b815cd0bf339" dependencies = [ - "ahash 0.8.3", - "hashbrown 0.14.0", + "ahash 0.8.7", + "hashbrown 0.14.3", "num-traits", "once_cell", "polars-error", @@ -3490,12 +3676,12 @@ 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", + "fallible-iterator 0.2.0", "futures-util", "log", "tokio", @@ -3530,37 +3716,43 @@ 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.7", "byteorder", "bytes", - "fallible-iterator", + "fallible-iterator 0.2.0", "hmac", "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", - "fallible-iterator", + "fallible-iterator 0.2.0", "postgres-protocol", "serde", "serde_json", "uuid 0.8.2", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "pprof" version = "0.5.1" @@ -3593,24 +3785,41 @@ checksum = "be91bcc43e73799dc46a6c194a55e7aae1d86cc867c860fd4a436019af21bd8c" [[package]] name = "proc-macro-crate" -version = "0.1.5" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ - "toml", + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", ] [[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" +name = "proc-macro-error-attr" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -3646,9 +3855,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.29" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -3666,9 +3875,9 @@ dependencies = [ [[package]] name = "r2d2-oracle" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca5358dca54423e557b30e7b5a6d950d3a442ab4a56cc916965030cead8b02b" +checksum = "e592c29a9d04b2eb9aa5adc8775087200343b486efa8a374cb43a02f4269d67f" dependencies = [ "oracle", "r2d2", @@ -3696,12 +3905,13 @@ dependencies = [ [[package]] name = "r2d2_sqlite" -version = "0.20.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fdc8e4da70586127893be32b7adf21326a4c6b1aba907611edf467d13ffe895" +checksum = "4dc290b669d30e20751e813517bbe13662d020419c5c8818ff10b6e8bb7777f6" dependencies = [ "r2d2", "rusqlite", + "uuid 1.7.0", ] [[package]] @@ -3769,7 +3979,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.12", ] [[package]] @@ -3799,9 +4009,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -3809,14 +4019,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -3825,50 +4033,50 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", + "getrandom 0.2.12", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.9.1" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] @@ -3879,26 +4087,32 @@ 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 = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rend" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" +checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" dependencies = [ "bytecheck", ] [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" dependencies = [ - "base64 0.21.2", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -3907,7 +4121,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls 0.24.1", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", @@ -3915,11 +4129,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.5", - "rustls-pemfile 1.0.3", + "rustls 0.21.10", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-rustls 0.24.1", "tower-service", @@ -3933,9 +4148,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.36" +version = "0.8.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" dependencies = [ "bytemuck", ] @@ -3949,34 +4164,49 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom 0.2.12", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "rkyv" -version = "0.7.42" +version = "0.7.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" +checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" dependencies = [ "bitvec", "bytecheck", + "bytes", "hashbrown 0.12.3", "ptr_meta", "rend", "rkyv_derive", "seahash", "tinyvec", - "uuid 1.4.0", + "uuid 1.7.0", ] [[package]] name = "rkyv_derive" -version = "0.7.42" +version = "0.7.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" +checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" dependencies = [ "proc-macro2", "quote", @@ -3985,30 +4215,27 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85127183a999f7db96d1a976a309eebbfb6ea3b0b400ddd8340190129de6eb7a" +checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "chrono", - "fallible-iterator", + "fallible-iterator 0.3.0", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", - "memchr", "smallvec", ] [[package]] name = "rust_decimal" -version = "1.30.0" +version = "1.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0446843641c69436765a35a5a77088e28c2e6a12da93e84aa3ab1cd4aa5a042" +checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4" dependencies = [ "arrayvec", "borsh", - "bytecheck", - "byteorder", "bytes", "num-traits", "postgres", @@ -4020,9 +4247,9 @@ dependencies = [ [[package]] name = "rust_decimal_macros" -version = "1.30.0" +version = "1.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca5c398d85f83b9a44de754a2048625a8c5eafcf070da7b8f116b685e2f6608" +checksum = "2e43721f4ef7060ebc2c3ede757733209564ca8207f47674181bcd425dd76945" dependencies = [ "quote", "rust_decimal", @@ -4051,38 +4278,37 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[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", + "ring 0.16.20", "sct", "webpki", ] [[package]] name = "rustls" -version = "0.21.5" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring", + "ring 0.17.7", "rustls-webpki", "sct", ] @@ -4094,7 +4320,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile 1.0.3", + "rustls-pemfile 1.0.4", "schannel", "security-framework", ] @@ -4110,34 +4336,34 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.2", + "base64 0.21.7", ] [[package]] name = "rustls-webpki" -version = "0.101.1" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[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.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "same-file" @@ -4156,11 +4382,11 @@ checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -4174,18 +4400,18 @@ 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" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] @@ -4196,11 +4422,11 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.9.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", "core-foundation", "core-foundation-sys", "libc", @@ -4209,9 +4435,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 +4445,21 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" [[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.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] @@ -4250,20 +4476,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.171" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.102" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -4284,74 +4510,31 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] name = "shlex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" - -[[package]] -name = "signal-hook" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b824b6e687aff278cdbf3b36f07aa52d4bd4099699324d5da86a2ebce3aa00b3" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" -dependencies = [ - "libc", - "mio", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simdutf8" @@ -4361,24 +4544,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.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "smartstring" @@ -4415,15 +4598,15 @@ dependencies = [ [[package]] name = "snap" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -4431,12 +4614,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -4445,31 +4628,40 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "sqlparser" -version = "0.11.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10e1ce16b71375ad72d28d111131069ce0d5f8603f4f86d8acd3456b41b57a51" +checksum = "2eaa1e88e78d2c2460d78b7dc3f0c08dbb606ab4222f9aff36f420d36e307d87" dependencies = [ "log", ] [[package]] name = "sqlparser" -version = "0.26.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86be66ea0b2b22749cfa157d16e2e84bf793e626a3375f4d378dc289fa03affb" +checksum = "37ae05a8250b968a3f7db93155a84d68b2e6cea1583949af5ca5b5170c76c075" dependencies = [ "log", + "sqlparser_derive", ] [[package]] -name = "sqlparser" -version = "0.36.1" +name = "sqlparser_derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eaa1e88e78d2c2460d78b7dc3f0c08dbb606ab4222f9aff36f420d36e307d87" +checksum = "55fe75cb4a364c7f7ae06c7dbbc8d84bddd85d6cdf9975963c3935bc1991761e" dependencies = [ - "log", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -4498,10 +4690,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", ] @@ -4520,34 +4713,24 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" - -[[package]] -name = "strum_macros" -version = "0.24.3" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", + "strum_macros", ] [[package]] name = "strum_macros" -version = "0.25.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6069ca09d878a33f883cc06aaa9718ede171841d3832450354410b718b097232" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -4602,20 +4785,32 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.26" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "sysinfo" -version = "0.29.4" +version = "0.29.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751e810399bba86e9326f5762b7f32ac5a085542df78da6a78d94e07d14d7c11" +checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666" dependencies = [ "cfg-if", "core-foundation-sys", @@ -4625,6 +4820,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.2.1", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -4633,29 +4849,28 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-features" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06f6b473c37f9add4cf1df5b4d66a8ef58ab6c895f1a3b3f949cf3e21230140e" +checksum = "cfb5fa503293557c5158bd215fdc225695e567a77e453f5d4452a50a193969bd" [[package]] name = "tempfile" -version = "3.6.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ - "autocfg", "cfg-if", "fastrand", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "rustix", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -4671,33 +4886,33 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[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]] @@ -4734,24 +4949,15 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.23" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ + "deranged", "itoa", "libc", "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -4759,15 +4965,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] @@ -4808,11 +5014,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", @@ -4820,20 +5025,20 @@ dependencies = [ "num_cpus", "parking_lot 0.12.1", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.5", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] @@ -4848,9 +5053,9 @@ dependencies = [ [[package]] name = "tokio-openssl" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08f9ffb7809f1b20c1b398d92acf4cc719874b3b2b2d9ea2f09b4a80350878a" +checksum = "6ffab79df67727f6acf57f1ff743091873c24c579b1e2ce4d8f53e47ded4d63d" dependencies = [ "futures-util", "openssl", @@ -4860,14 +5065,14 @@ 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", "bytes", - "fallible-iterator", + "fallible-iterator 0.2.0", "futures-channel", "futures-util", "log", @@ -4877,9 +5082,11 @@ dependencies = [ "pin-project-lite", "postgres-protocol", "postgres-types", - "socket2 0.5.3", + "rand 0.8.5", + "socket2 0.5.5", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", + "whoami", ] [[package]] @@ -4888,7 +5095,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 +5106,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.10", "tokio", ] @@ -4931,9 +5138,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -4944,12 +5151,20 @@ dependencies = [ ] [[package]] -name = "toml" -version = "0.5.11" +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ - "serde", + "indexmap 2.1.0", + "toml_datetime", + "winnow", ] [[package]] @@ -4960,11 +5175,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -4973,29 +5187,29 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.48", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" @@ -5010,21 +5224,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -5043,9 +5257,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "untrusted" @@ -5053,11 +5267,17 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -5066,9 +5286,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" @@ -5076,17 +5296,18 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.12", "md5 0.7.0", ] [[package]] name = "uuid" -version = "1.4.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.12", + "rand 0.8.5", ] [[package]] @@ -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", @@ -5132,12 +5353,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -5222,32 +5437,40 @@ dependencies = [ [[package]] name = "webpki" -version = "0.22.0" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[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]] @@ -5268,9 +5491,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -5287,7 +5510,7 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f820cd208ce9c6b050812dc2d724ba98c6c1e9db5ce9b3f58d925ae5723a5e6" dependencies = [ - "bitflags 1.3.2", + "bitflags 1.2.1", "byteorder", "md5 0.6.1", "rand 0.7.3", @@ -5295,12 +5518,12 @@ dependencies = [ ] [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets", + "windows-targets 0.52.0", ] [[package]] @@ -5309,73 +5532,149 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +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", ] [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[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_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[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 = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[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 = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[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 = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +dependencies = [ + "memchr", +] [[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 0.48.0", ] [[package]] @@ -5389,9 +5688,18 @@ dependencies = [ [[package]] name = "xxhash-rust" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" +checksum = "53be06678ed9e83edb1745eb72efc0bbcd7b5c3c35711a860906aed827a13d61" + +[[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" @@ -5406,43 +5714,63 @@ dependencies = [ "http", "hyper", "hyper-rustls 0.23.2", - "itertools", + "itertools 0.10.5", "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", "tokio", "tower-service", "url", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[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", + "zstd-safe 6.0.6", ] [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", + "zstd-safe 7.0.0", ] [[package]] name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", @@ -5450,21 +5778,19 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" dependencies = [ - "libc", "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 8660f3f7e1..0bbd4998ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,12 @@ [workspace] default-members = ["connectorx"] members = ["connectorx", "connectorx-cpp"] +resolver = "2" [profile.release] debug = true lto = true [workspace.dependencies] +arrow = {version = "46", features = ["prettyprint", "ffi"]} arrow2 = {version = "0.17", default-features = false} diff --git a/README.md b/README.md index 88bc5b241a..bd760fffa0 100644 --- a/README.md +++ b/README.md @@ -31,19 +31,6 @@ 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)** - -```python -import connectorx as cx - -db1 = "postgresql://username1:password1@server1:port1/database1" -db2 = "postgresql://username2:password2@server2:port2/database2" - -cx.read_sql({"db1": db1, "db2": db2}, "SELECT * FROM db1.nation n, db2.region r where n.n_regionkey = r.r_regionkey") -``` - -Check out more detailed usage and examples [here](https://sfu-db.github.io/connector-x/api.html). A general introduction of the project can be found in this [blog post](https://towardsdatascience.com/connectorx-the-fastest-way-to-load-data-from-databases-a65d4d4062d5). - # Installation ```bash 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..a2eaa8b8cf 100644 --- a/connectorx-cpp/Cargo.toml +++ b/connectorx-cpp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "connectorx-cpp" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" edition = "2021" license = "MIT" @@ -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..d6e48d6814 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,127 @@ 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 = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "04a8801ebb147ad240b2d978d3ab9f73c9ccd4557ba6a03e7800496770ed10e0" +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 = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e2bcd431a4aa0ff003fdd2dc21c78cfb42f31459c89d2312c2746fe17a5ac" +checksum = "895263144bd4a69751cbe6a34a53f26626e19770b313a9fa792c415cd0e78f11" 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 = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9044300874385f19e77cbf90911e239bd23630d8f23bb0f948f9067998a13b7" +checksum = "226fdc6c3a4ae154a74c24091d36a90b514f0ed7112f5b8322c1d8f354d8e20d" 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.14.0", "num", ] [[package]] name = "arrow-buffer" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78476cbe9e3f808dcecab86afe42d573863c63e149c62e6e379ed2522743e626" +checksum = "fc4843af4dd679c2f35b69c572874da8fde33be53eb549a5fb128e7a4b763510" dependencies = [ - "half 2.1.0", + "bytes", + "half 2.3.1", + "num", +] + +[[package]] +name = "arrow-cast" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e8b9990733a9b635f656efda3c9b8308c7a19695c9ec2c7046dd154f9b144b" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "chrono", + "comfy-table", + "half 2.3.1", + "lexical-core", "num", ] +[[package]] +name = "arrow-csv" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "646fbb4e11dd0afb8083e883f53117713b8caadb4413b3c9e63e3f535da3683c" +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 = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d916feee158c485dad4f701cba31bc9a90a8db87d9df8e2aa8adc0c20a2bbb9" +checksum = "da900f31ff01a0a84da0572209be72b2b6f980f3ea58803635de47913191c188" dependencies = [ "arrow-buffer", "arrow-schema", - "half 2.1.0", + "half 2.3.1", "num", ] @@ -208,17 +252,84 @@ dependencies = [ "serde", ] +[[package]] +name = "arrow-ipc" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2707a8d7ee2d345d045283ece3ae43416175873483e5d96319c929da542a0b1f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1b91a63c356d14eedc778b76d66a88f35ac8498426bb0799a769a49a74a8b4" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.3.1", + "indexmap 2.0.0", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584325c91293abbca7aaaabf8da9fe303245d641f5f4a18a6058dc68009c7ebf" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half 2.3.1", + "num", +] + +[[package]] +name = "arrow-row" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e32afc1329f7b372463b21c6ca502b07cf237e1ed420d87706c1770bb0ebd38" +dependencies = [ + "ahash 0.8.3", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half 2.3.1", + "hashbrown 0.14.0", +] + [[package]] name = "arrow-schema" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9406eb7834ca6bd8350d1baa515d18b9fcec487eddacfb62f5e19511f7bd37" +checksum = "b104f5daa730f00fde22adc03a12aa5a2ae9ccbbf99cbd53d284119ddc90e03d" +dependencies = [ + "bitflags 2.4.0", +] [[package]] name = "arrow-select" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6593a01586751c74498495d2f5a01fcd438102b52965c11dd98abf4ebcacef37" +checksum = "73b3ca55356d1eae07cf48808d8c462cea674393ae6ad1e0b120f40b422eb2b4" dependencies = [ "arrow-array", "arrow-buffer", @@ -227,13 +338,29 @@ dependencies = [ "num", ] +[[package]] +name = "arrow-string" +version = "46.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1433ce02590cae68da0a18ed3a3ed868ffac2c6f24c533ddd2067f7ee04b4a" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "num", + "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 +369,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 +396,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 +407,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 +465,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 +482,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 +504,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -404,7 +535,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 +548,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 +563,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 +603,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 +671,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 +763,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 +771,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 +781,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 +860,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 +880,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 +917,50 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.22" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "serde", - "time 0.1.44", "wasm-bindgen", - "winapi", + "windows-targets 0.52.4", +] + +[[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,24 +980,13 @@ 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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85914173c2f558d61613bfbbf1911f14e630895087a7ed2fafc0f5319e1536e7" -dependencies = [ - "strum", - "strum_macros 0.24.3", - "unicode-width", -] - [[package]] name = "comfy-table" version = "7.0.1" @@ -872,32 +994,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" dependencies = [ "crossterm", - "strum", + "strum 0.24.1", "strum_macros 0.24.3", "unicode-width", ] [[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", ] [[package]] name = "connectorx" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" dependencies = [ "anyhow", "arrow", @@ -912,7 +1035,7 @@ dependencies = [ "futures", "gcp-bigquery-client", "hex", - "itertools", + "itertools 0.11.0", "j4rs", "log", "mysql_common", @@ -935,7 +1058,7 @@ dependencies = [ "rust_decimal", "rust_decimal_macros", "serde_json", - "sqlparser 0.11.0", + "sqlparser 0.37.0", "thiserror", "tiberius", "tokio", @@ -947,7 +1070,7 @@ dependencies = [ [[package]] name = "connectorx-python" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" dependencies = [ "anyhow", "arrow", @@ -963,7 +1086,7 @@ dependencies = [ "env_logger", "fehler", "iai", - "itertools", + "itertools 0.10.5", "lazy_static", "libc", "log", @@ -979,7 +1102,7 @@ dependencies = [ "rayon", "rust_decimal", "serde_json", - "sqlparser 0.11.0", + "sqlparser 0.37.0", "thiserror", "tokio", "tokio-util 0.6.10", @@ -990,9 +1113,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 +1123,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 +1151,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 +1166,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", ] @@ -1070,7 +1193,7 @@ dependencies = [ "clap", "criterion-plot", "csv", - "itertools", + "itertools 0.10.5", "lazy_static", "num-traits", "oorandom", @@ -1102,7 +1225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] [[package]] @@ -1121,9 +1244,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 +1254,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 +1265,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 +1288,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 +1313,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 +1338,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 +1378,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -1269,86 +1389,132 @@ 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 = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a8411475928479fe57af18698626f0a44f3c29153e051dce45f7455c08a6d5" +checksum = "6a4e4fc25698a14c90b34dda647ba10a5a966dc04b036d22e77fb1048663375d" 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", - "datafusion-row", "datafusion-sql", "flate2", "futures", - "glob 0.3.0", - "hashbrown 0.12.3", - "itertools", - "lazy_static", + "glob", + "half 2.3.1", + "hashbrown 0.14.0", + "indexmap 2.0.0", + "itertools 0.11.0", "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.37.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 = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ffcbc1f040c9ab99f41db1c743d95aff267bb2e7286aaa010738b7402251" +checksum = "c23ad0229ea4a85bf76b236d8e75edf539881fdb02ce4e2394f9a76de6055206" dependencies = [ "arrow", + "arrow-array", + "async-compression", + "bytes", + "bzip2", "chrono", + "flate2", + "futures", + "num_cpus", "object_store", - "ordered-float 3.4.0", "parquet", - "sqlparser 0.26.0", + "sqlparser 0.37.0", + "tokio", + "tokio-util 0.7.8", + "xz2", + "zstd", ] [[package]] -name = "datafusion-expr" -version = "14.0.0" +name = "datafusion-execution" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1883d9590d303ef38fa295567e7fdb9f8f5f511fcc167412d232844678cd295c" +checksum = "9b37d2fc1a213baf34e0a57c85b8e6648f1a95152798fd6738163ee96c19203f" dependencies = [ - "ahash 0.8.0", "arrow", + "dashmap", "datafusion-common", + "datafusion-expr", + "futures", + "hashbrown 0.14.0", "log", - "sqlparser 0.26.0", + "object_store", + "parking_lot 0.12.1", + "rand 0.8.5", + "tempfile", + "url", +] + +[[package]] +name = "datafusion-expr" +version = "31.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ea9844395f537730a145e5d87f61fecd37c2bc9d54e1dc89b35590d867345d" +dependencies = [ + "ahash 0.8.3", + "arrow", + "datafusion-common", + "sqlparser 0.37.0", + "strum 0.25.0", + "strum_macros 0.25.2", ] [[package]] name = "datafusion-optimizer" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2127d46d566ab3463d70da9675fc07b9d634be8d17e80d0e1ce79600709fe651" +checksum = "c8a30e0f79c5d59ba14d3d70f2500e87e0ff70236ad5e47f9444428f054fd2be" dependencies = [ "arrow", "async-trait", @@ -1356,63 +1522,58 @@ dependencies = [ "datafusion-common", "datafusion-expr", "datafusion-physical-expr", - "hashbrown 0.12.3", + "hashbrown 0.14.0", + "itertools 0.11.0", "log", + "regex-syntax 0.7.5", ] [[package]] name = "datafusion-physical-expr" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d108b6fe8eeb317ecad1d74619e8758de49cccc8c771b56c97962fd52eaae23" +checksum = "766c567082c9bbdcb784feec8fe40c7049cedaeb3a18d54f563f75fe0dc1932c" dependencies = [ - "ahash 0.8.0", + "ahash 0.8.3", "arrow", + "arrow-array", "arrow-buffer", "arrow-schema", + "base64 0.21.3", "blake2", "blake3", "chrono", "datafusion-common", "datafusion-expr", - "datafusion-row", - "half 2.1.0", - "hashbrown 0.12.3", - "itertools", - "lazy_static", + "half 2.3.1", + "hashbrown 0.14.0", + "hex", + "indexmap 2.0.0", + "itertools 0.11.0", + "libc", + "log", "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", -] - -[[package]] -name = "datafusion-row" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43537b6377d506e4788bf21e9ed943340e076b48ca4d077e6ea4405ca5e54a1c" -dependencies = [ - "arrow", - "datafusion-common", - "paste 1.0.9", - "rand 0.8.5", + "uuid 1.4.1", ] [[package]] name = "datafusion-sql" -version = "14.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244d08d4710e1088d9c0949c9b5b8d68d9cf2cde7203134a4cc389e870fe2354" +checksum = "811fd084cf2d78aa0c76b74320977c7084ad0383690612528b580795764b4dd0" dependencies = [ "arrow", + "arrow-schema", "datafusion-common", "datafusion-expr", - "sqlparser 0.26.0", + "log", + "sqlparser 0.37.0", ] [[package]] @@ -1424,15 +1585,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 +1613,25 @@ checksum = "6207f46b33b2bf00858b0edb03d188d31a46fedfde4aa53a27d69fe25acd80cf" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", + "syn 1.0.109", ] [[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 +1653,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 +1667,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 +1737,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 +1753,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 +1795,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" @@ -1646,6 +1834,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fallible-streaming-iterator" version = "0.1.9" @@ -1660,12 +1854,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 +1875,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 +1946,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 +1966,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 +2073,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1921,15 +2112,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", "tokio", "tokio-stream", "url", @@ -1938,9 +2129,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 +2150,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 +2163,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 +2185,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 +2200,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", ] @@ -2031,20 +2217,20 @@ checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c" [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash 0.7.6", ] [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.7.6", + "ahash 0.8.3", ] [[package]] @@ -2053,18 +2239,18 @@ 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", ] [[package]] name = "hashlink" -version = "0.7.0" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.14.0", ] [[package]] @@ -2091,6 +2277,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 +2295,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 +2304,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 +2337,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 +2349,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 +2362,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 +2373,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 +2408,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 +2437,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 +2447,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 +2484,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", "unindent", ] @@ -2280,8 +2496,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 +2523,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" @@ -2333,44 +2547,49 @@ dependencies = [ ] [[package]] -name = "itoa" -version = "0.4.8" +name = "itertools" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] [[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 +2601,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 +2732,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,15 +2742,15 @@ 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" -version = "0.24.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" dependencies = [ "cc", "pkg-config", @@ -2550,20 +2759,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 +2786,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 +2819,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 +2846,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 +2863,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 +2887,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 +2908,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 +2933,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 +2951,7 @@ checksum = "26a83d8500ed06d68877e9de1dde76c1dbb83885dcdbda4ef44ccbc3fbda2ac8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", "target-features", ] @@ -2772,7 +2976,7 @@ dependencies = [ "percent-encoding", "serde", "serde_json", - "socket2", + "socket2 0.4.9", "twox-hash", "url", ] @@ -2783,7 +2987,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 +3011,12 @@ dependencies = [ "serde", "serde_json", "sha1", - "sha2 0.10.6", + "sha2", "smallvec", "subprocess", "thiserror", - "time 0.3.14", - "uuid 1.2.1", + "time", + "uuid 1.4.1", ] [[package]] @@ -2826,9 +3030,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 +3071,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 +3101,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 +3115,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 +3126,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 +3178,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 +3188,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,24 +3221,25 @@ 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.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce10a205d9f610ae3532943039c34c145930065ce0c4284134c897fe6073b1" +checksum = "f930c88a43b1c3f6e776dfe495b4afab89882dbc81530c632db2ed65451ebcb4" dependencies = [ "async-trait", "bytes", "chrono", "futures", - "itertools", + "humantime", + "itertools 0.11.0", "parking_lot 0.12.1", "percent-encoding", "snafu", @@ -3052,9 +3251,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 +3261,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 +3278,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 +3295,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 +3331,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 +3380,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -3207,59 +3390,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 0.48.5", ] [[package]] name = "parquet" -version = "26.0.0" +version = "46.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf8fa7ab6572791325a8595f55dc532dde88b996ae10a5ca8a2db746784ecc4" +checksum = "1ad2cba786ae07da4d73371a88b9e0f9d3ffac1a9badc83922e0e15814f5c5fa" 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.14.0", "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 +3475,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 +3496,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 +3515,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 +3581,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 +3596,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 +3609,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 +3628,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 +3646,7 @@ checksum = "f967c901fa5da4ca7f64e813d1268488ba97e9b3004cefc579ff851c197a1138" dependencies = [ "arrow2", "hashbrown 0.14.0", - "multiversion 0.7.3", + "multiversion", "num-traits", "polars-error", "thiserror", @@ -3428,11 +3659,11 @@ 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", - "comfy-table 7.0.1", + "comfy-table", "either", "hashbrown 0.14.0", "indexmap 2.0.0", @@ -3469,7 +3700,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 +3731,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 +3793,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 +3860,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,12 +3873,12 @@ 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", + "fallible-iterator 0.2.0", "futures-util", "log", "tokio", @@ -3682,31 +3913,31 @@ 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", + "fallible-iterator 0.2.0", "hmac", "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", - "fallible-iterator", + "fallible-iterator 0.2.0", "postgres-protocol", "serde", "serde_json", @@ -3737,9 +3968,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 +3989,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" @@ -3789,10 +4020,10 @@ checksum = "355f634b43cdd80724ee7848f95770e7e70eefa6dcf14fea676216573b8fd603" dependencies = [ "bytes", "heck 0.3.3", - "itertools", + "itertools 0.10.5", "log", "multimap", - "petgraph", + "petgraph 0.5.1", "prost", "prost-types", "tempfile", @@ -3806,10 +4037,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3839,7 +4070,7 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ "proc-macro2", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3881,7 +4112,7 @@ checksum = "00b247e8c664be87998d8628e86f282c25066165f1f8dda66100c48202fdb93a" dependencies = [ "pyo3-macros-backend", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3893,7 +4124,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -3927,9 +4158,9 @@ dependencies = [ [[package]] name = "r2d2-oracle" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca5358dca54423e557b30e7b5a6d950d3a442ab4a56cc916965030cead8b02b" +checksum = "e592c29a9d04b2eb9aa5adc8775087200343b486efa8a374cb43a02f4269d67f" dependencies = [ "oracle", "r2d2", @@ -3957,12 +4188,13 @@ dependencies = [ [[package]] name = "r2d2_sqlite" -version = "0.20.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fdc8e4da70586127893be32b7adf21326a4c6b1aba907611edf467d13ffe895" +checksum = "4dc290b669d30e20751e813517bbe13662d020419c5c8818ff10b6e8bb7777f6" dependencies = [ "r2d2", "rusqlite", + "uuid 1.4.1", ] [[package]] @@ -4030,7 +4262,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 +4321,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" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +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 +4400,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls", + "hyper-rustls 0.24.1", "ipnet", "js-sys", "log", @@ -4182,13 +4408,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 +4426,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,55 +4450,55 @@ 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]] name = "rusqlite" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85127183a999f7db96d1a976a309eebbfb6ea3b0b400ddd8340190129de6eb7a" +checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "chrono", - "fallible-iterator", + "fallible-iterator 0.3.0", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", - "memchr", "smallvec", ] [[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 +4510,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 +4520,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 +4539,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 +4564,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 +4594,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 +4645,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 +4685,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 +4698,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 +4708,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 +4742,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 +4769,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 +4782,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 +4825,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 +4840,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 +4872,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 +4882,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 +4900,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" @@ -4669,29 +4926,32 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "sqlparser" -version = "0.11.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10e1ce16b71375ad72d28d111131069ce0d5f8603f4f86d8acd3456b41b57a51" +checksum = "2eaa1e88e78d2c2460d78b7dc3f0c08dbb606ab4222f9aff36f420d36e307d87" dependencies = [ "log", ] [[package]] name = "sqlparser" -version = "0.26.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86be66ea0b2b22749cfa157d16e2e84bf793e626a3375f4d378dc289fa03affb" +checksum = "37ae05a8250b968a3f7db93155a84d68b2e6cea1583949af5ca5b5170c76c075" dependencies = [ "log", + "sqlparser_derive", ] [[package]] -name = "sqlparser" -version = "0.36.1" +name = "sqlparser_derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eaa1e88e78d2c2460d78b7dc3f0c08dbb606ab4222f9aff36f420d36e307d87" +checksum = "55fe75cb4a364c7f7ae06c7dbbc8d84bddd85d6cdf9975963c3935bc1991761e" dependencies = [ - "log", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -4714,16 +4974,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", ] @@ -4746,6 +5007,15 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.2", +] + [[package]] name = "strum_macros" version = "0.24.3" @@ -4756,7 +5026,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 1.0.100", + "syn 1.0.109", ] [[package]] @@ -4769,7 +5039,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -4784,9 +5054,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 +5065,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 +5083,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 +5094,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 +5105,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 +5131,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 +5162,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,25 +5225,32 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" dependencies = [ + "deranged", + "itoa", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", + "num_threads", + "serde", + "time-core", + "time-macros", ] [[package]] -name = "time" -version = "0.3.14" +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 = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" dependencies = [ - "itoa 1.0.3", - "libc", - "num_threads", - "serde", + "time-core", ] [[package]] @@ -5007,45 +5283,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,14 +5340,14 @@ 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", "bytes", - "fallible-iterator", + "fallible-iterator 0.2.0", "futures-channel", "futures-util", "log", @@ -5082,9 +5357,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 +5370,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 +5413,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 +5427,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 +5442,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 +5455,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 +5492,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 +5519,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 +5531,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 +5543,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 +5554,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 +5564,18 @@ 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", + "rand 0.8.5", ] [[package]] @@ -5310,22 +5598,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", ] @@ -5335,12 +5621,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -5349,9 +5629,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 +5639,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 +5666,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 +5676,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 +5705,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 +5715,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 +5786,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 0.48.5", ] [[package]] @@ -5528,21 +5803,6 @@ 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", -] - [[package]] name = "windows-targets" version = "0.48.5" @@ -5559,10 +5819,19 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "windows-targets" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] [[package]] name = "windows_aarch64_gnullvm" @@ -5571,16 +5840,10 @@ 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" +name = "windows_aarch64_gnullvm" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" @@ -5589,16 +5852,10 @@ 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" +name = "windows_aarch64_msvc" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" @@ -5607,16 +5864,10 @@ 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" +name = "windows_i686_gnu" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" @@ -5625,16 +5876,10 @@ 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" +name = "windows_i686_msvc" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" @@ -5643,10 +5888,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +name = "windows_x86_64_gnu" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" @@ -5655,30 +5900,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" +name = "windows_x86_64_gnullvm" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[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 +5942,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 +5959,32 @@ checksum = "98748970d2ddf05253e6525810d989740334aa7509457864048a829902db76f3" dependencies = [ "anyhow", "async-trait", - "base64", + "base64 0.13.1", "futures", "http", "hyper", - "hyper-rustls", - "itertools", + "hyper-rustls 0.23.2", + "itertools 0.10.5", "log", "percent-encoding", - "rustls", + "rustls 0.20.9", "rustls-pemfile 0.3.0", "seahash", "serde", "serde_json", - "time 0.3.14", + "time", "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..4ed86b30e3 100644 --- a/connectorx-python/Cargo.toml +++ b/connectorx-python/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Weiyuan Wu "] edition = "2018" name = "connectorx-python" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" license = "MIT" readme = "README.md" @@ -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 = "46" } +arrow2 = {version = "0.17", default-features = false} bitfield = "0.13" bytes = "1.4" chrono = "0.4" @@ -36,7 +36,7 @@ pyo3 = {version = "0.15", default-features = false, features = ["macros"]} pyo3-built = "0.4" rust_decimal = {version = "1", features = ["db-postgres"]} serde_json = "1" -sqlparser = "0.11" +sqlparser = "0.37" thiserror = "1" tokio = {version = "1", features = ["rt", "rt-multi-thread", "net"]} tokio-util = "0.6" 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..569f31a995 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/pyproject.toml b/connectorx-python/pyproject.toml index aebc2f81cd..8cfd3fd532 100644 --- a/connectorx-python/pyproject.toml +++ b/connectorx-python/pyproject.toml @@ -18,7 +18,7 @@ license = "MIT" maintainers = ["Weiyuan Wu "] name = "connectorx" readme = "README.md" # Markdown files are supported -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" [project] name = "connectorx" # Target file name of maturin build 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..7ad1c1430b 100644 --- a/connectorx/Cargo.toml +++ b/connectorx/Cargo.toml @@ -7,22 +7,22 @@ license = "MIT" name = "connectorx" readme = "../README.md" repository = "https://github.com/sfu-db/connector-x" -version = "0.3.3-alpha.1" +version = "0.3.3-alpha.2" [dependencies] anyhow = "1" fehler = "1" -itertools = "0.10" +itertools = "0.11" log = "0.4" rayon = "1" -sqlparser = "0.11" +sqlparser = "0.37" thiserror = "1" url = "2" 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} @@ -42,12 +42,12 @@ postgres-native-tls = {version = "0.5", optional = true} postgres-openssl = {version = "0.5", optional = true} mysql_common = {version = "0.29", features = ["chrono"], optional = true} r2d2 = {version = "0.8", optional = true} -r2d2-oracle = {version = "0.5.0", features = ["chrono"], optional = true} +r2d2-oracle = {version = "0.6", features = ["chrono"], optional = true} r2d2_mysql = {version = "23", optional = true} r2d2_postgres = {version = "0.18.1", optional = true} -r2d2_sqlite = {version = "0.20.0", optional = true} +r2d2_sqlite = {version = "0.23.0", optional = true} regex = {version = "1", optional = true} -rusqlite = {version = "0.27.0", features = ["column_decltype", "chrono", "bundled"], optional = true} +rusqlite = {version = "0.30.0", features = ["column_decltype", "chrono", "bundled"], optional = true} rust_decimal = {version = "1", features = ["db-postgres"], optional = true} rust_decimal_macros = {version = "1", optional = true} tiberius = {version = "0.5", features = ["rust_decimal", "chrono", "integrated-auth-gssapi"], 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 = "31", optional = true} [lib] crate-type = ["cdylib", "rlib"] diff --git a/connectorx/examples/batch_test.rs b/connectorx/examples/batch_test.rs index 5d2220d213..aa8bb1611f 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,21 +39,26 @@ 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(); let mut num_rows = 0; let mut num_batches = 0; - while let Some(record_batch) = batch_iter.next() { + for record_batch in batch_iter { let record_batch = record_batch; println!("got 1 batch, with {} rows", record_batch.num_rows()); num_rows += record_batch.num_rows(); 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/constants.rs b/connectorx/src/constants.rs index c711f1c1b6..b65cca47d1 100644 --- a/connectorx/src/constants.rs +++ b/connectorx/src/constants.rs @@ -16,7 +16,7 @@ pub const RECORD_BATCH_SIZE: usize = 64 * KILO; pub const DB_BUFFER_SIZE: usize = 32; #[cfg(any(feature = "src_oracle"))] -pub const ORACLE_ARRAY_SIZE: u32 = (1 * KILO) as u32; +pub const ORACLE_ARRAY_SIZE: u32 = KILO as u32; #[cfg(all(not(debug_assertions), feature = "federation"))] pub const J4RS_BASE_PATH: &str = "../target/release"; 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..d7bbe3d521 100644 --- a/connectorx/src/sources/bigquery/mod.rs +++ b/connectorx/src/sources/bigquery/mod.rs @@ -36,11 +36,11 @@ impl Dialect for BigQueryDialect { } fn is_identifier_start(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) || ch == '_' || ch == '-' + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() || ch == '_' || ch == '-' } fn is_identifier_part(&self, ch: char) -> bool { - self.is_identifier_start(ch) || ('0'..='9').contains(&ch) + self.is_identifier_start(ch) || ch.is_ascii_digit() } } @@ -232,7 +232,7 @@ impl SourcePartition for BigQuerySourcePartition { } #[throws(BigQuerySourceError)] - fn parser<'a>(&'a mut self) -> Self::Parser<'a> { + fn parser(&mut self) -> Self::Parser<'_> { let job = self.client.job(); let qry = self.rt.block_on(job.query( self.project_id.as_str(), @@ -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,7 @@ 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, - )) + NaiveDateTime::from_timestamp_opt(secs, nsecs).map(|ndt| DateTime::::from_naive_utc_and_offset(ndt, Utc)) } } } 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/sources/mssql/typesystem.rs b/connectorx/src/sources/mssql/typesystem.rs index 03bd95dc91..2da6aa427a 100644 --- a/connectorx/src/sources/mssql/typesystem.rs +++ b/connectorx/src/sources/mssql/typesystem.rs @@ -112,7 +112,7 @@ impl<'a> FromSql<'a> for IntN { ColumnData::U8(Some(d)) => Ok(Some(IntN(*d as i64))), ColumnData::I16(Some(d)) => Ok(Some(IntN(*d as i64))), ColumnData::I32(Some(d)) => Ok(Some(IntN(*d as i64))), - ColumnData::I64(Some(d)) => Ok(Some(IntN(*d as i64))), + ColumnData::I64(Some(d)) => Ok(Some(IntN(*d))), v => Err(tiberius::error::Error::Conversion( format!("cannot interpret {:?} as a intn value", v).into(), )), @@ -126,7 +126,7 @@ impl<'a> FromSql<'a> for FloatN { match value { ColumnData::F32(None) | ColumnData::F64(None) => Ok(None), ColumnData::F32(Some(d)) => Ok(Some(FloatN(*d as f64))), - ColumnData::F64(Some(d)) => Ok(Some(FloatN(*d as f64))), + ColumnData::F64(Some(d)) => Ok(Some(FloatN(*d))), v => Err(tiberius::error::Error::Conversion( format!("cannot interpret {:?} as a floatn value", v).into(), )), diff --git a/connectorx/src/sources/mysql/mod.rs b/connectorx/src/sources/mysql/mod.rs index 4c82619d17..5b3d039609 100644 --- a/connectorx/src/sources/mysql/mod.rs +++ b/connectorx/src/sources/mysql/mod.rs @@ -98,7 +98,7 @@ where let mut conn = self.pool.get()?; let first_query = &self.queries[0]; - match conn.prep(&*first_query) { + match conn.prep(first_query) { Ok(stmt) => { let (names, types) = stmt .columns() diff --git a/connectorx/src/sources/oracle/mod.rs b/connectorx/src/sources/oracle/mod.rs index af5faf503a..07d4c3337c 100644 --- a/connectorx/src/sources/oracle/mod.rs +++ b/connectorx/src/sources/oracle/mod.rs @@ -34,13 +34,13 @@ pub struct OracleDialect {} // implementation copy from AnsiDialect impl Dialect for OracleDialect { fn is_identifier_start(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) || ('A'..='Z').contains(&ch) + ch.is_ascii_lowercase() || ch.is_ascii_uppercase() } fn is_identifier_part(&self, ch: char) -> bool { - ('a'..='z').contains(&ch) - || ('A'..='Z').contains(&ch) - || ('0'..='9').contains(&ch) + ch.is_ascii_lowercase() + || ch.is_ascii_uppercase() + || ch.is_ascii_digit() || ch == '_' } } @@ -264,7 +264,7 @@ impl<'a> OracleTextSourceParser<'a> { .build()?; let rows: OwningHandle>, DummyBox>> = OwningHandle::new_with_fn(Box::new(stmt), |stmt: *const Statement<'a>| unsafe { - DummyBox((&mut *(stmt as *mut Statement<'_>)).query(&[]).unwrap()) + DummyBox((*(stmt as *mut Statement<'_>)).query(&[]).unwrap()) }); Self { diff --git a/connectorx/src/sources/postgres/mod.rs b/connectorx/src/sources/postgres/mod.rs index e83a57fb89..0799d17af7 100644 --- a/connectorx/src/sources/postgres/mod.rs +++ b/connectorx/src/sources/postgres/mod.rs @@ -167,7 +167,7 @@ where self.names = names; self.schema = pg_types .iter() - .map(|t| PostgresTypeSystem::from(t)) + .map(PostgresTypeSystem::from) .collect(); self.pg_schema = self .schema @@ -476,14 +476,113 @@ impl_produce!( &'r str, Vec, NaiveTime, - NaiveDateTime, - DateTime, - NaiveDate, + // NaiveDateTime, + // DateTime, + // NaiveDate, Uuid, Value, Vec, ); +impl<'r, 'a> Produce<'r, NaiveDateTime> for PostgresBinarySourcePartitionParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> NaiveDateTime { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + postgres::types::Timestamp::PosInfinity => NaiveDateTime::MAX, + postgres::types::Timestamp::NegInfinity => NaiveDateTime::MIN, + postgres::types::Timestamp::Value(t) => t, + } + } +} + +impl<'r, 'a> Produce<'r, Option> for PostgresBinarySourcePartitionParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + Some(postgres::types::Timestamp::PosInfinity) => Some(NaiveDateTime::MAX), + Some(postgres::types::Timestamp::NegInfinity) => Some(NaiveDateTime::MIN), + Some(postgres::types::Timestamp::Value(t)) => t, + None => None + } + } +} + +impl<'r, 'a> Produce<'r, DateTime> for PostgresBinarySourcePartitionParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> DateTime { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + postgres::types::Timestamp::PosInfinity => DateTime::::MAX_UTC, + postgres::types::Timestamp::NegInfinity => DateTime::::MIN_UTC, + postgres::types::Timestamp::Value(t) => t, + } + } +} + +impl<'r, 'a> Produce<'r, Option>> for PostgresBinarySourcePartitionParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option> { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + Some(postgres::types::Timestamp::PosInfinity) => Some(DateTime::::MAX_UTC), + Some(postgres::types::Timestamp::NegInfinity) => Some(DateTime::::MIN_UTC), + Some(postgres::types::Timestamp::Value(t)) => t, + None => None + } + } +} + +impl<'r, 'a> Produce<'r, NaiveDate> for PostgresBinarySourcePartitionParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> NaiveDate { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + postgres::types::Date::PosInfinity => NaiveDate::MAX, + postgres::types::Date::NegInfinity => NaiveDate::MIN, + postgres::types::Date::Value(t) => t, + } + } +} + +impl<'r, 'a> Produce<'r, Option> for PostgresBinarySourcePartitionParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + Some(postgres::types::Date::PosInfinity) => Some(NaiveDate::MAX), + Some(postgres::types::Date::NegInfinity) => Some(NaiveDate::MIN), + Some(postgres::types::Date::Value(t)) => t, + None => None + } + } +} + impl<'r, 'a> Produce<'r, HashMap>> for PostgresBinarySourcePartitionParser<'a> { @@ -601,7 +700,7 @@ macro_rules! impl_csv_produce { }; } -impl_csv_produce!(i8, i16, i32, i64, f32, f64, Decimal, Uuid,); +impl_csv_produce!(i8, i16, i32, i64, f32, f64, Uuid,); macro_rules! impl_csv_vec_produce { ($($t: ty,)+) => { @@ -718,7 +817,7 @@ impl<'r, 'a> Produce<'r, Vec> for PostgresCSVSourceParser<'a> { "{}" => vec![], _ if s.len() < 3 => throw!(ConnectorXError::cannot_produce::(Some(s.into()))), s => s[1..s.len() - 1] - .split(",") + .split(',') .map(|v| match v { "t" => Ok(true), "f" => Ok(false), @@ -742,7 +841,7 @@ impl<'r, 'a> Produce<'r, Option>> for PostgresCSVSourceParser<'a> { _ if s.len() < 3 => throw!(ConnectorXError::cannot_produce::(Some(s.into()))), s => Some( s[1..s.len() - 1] - .split(",") + .split(',') .map(|v| match v { "t" => Ok(true), "f" => Ok(false), @@ -754,17 +853,56 @@ impl<'r, 'a> Produce<'r, Option>> for PostgresCSVSourceParser<'a> { } } + +impl<'r, 'a> Produce<'r, Decimal> for PostgresCSVSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Decimal { + let (ridx, cidx) = self.next_loc()?; + match &self.rowbuf[ridx][cidx][..] { + "Infinity" => Decimal::MAX, + "-Infinity" => Decimal::MIN, + v => v.parse().map_err(|_| { + ConnectorXError::cannot_produce::(Some(v.into())) + })? + } + } +} + + +impl<'r, 'a> Produce<'r, Option> for PostgresCSVSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option { + let (ridx, cidx) = self.next_loc()?; + match &self.rowbuf[ridx][cidx][..] { + "" => None, + "Infinity" => Some(Decimal::MAX), + "-Infinity" => Some(Decimal::MIN), + v => Some(v.parse().map_err(|_| { + ConnectorXError::cannot_produce::(Some(v.into())) + })?), + } + } +} + + impl<'r, 'a> Produce<'r, DateTime> for PostgresCSVSourceParser<'a> { type Error = PostgresSourceError; #[throws(PostgresSourceError)] fn produce(&mut self) -> DateTime { let (ridx, cidx) = self.next_loc()?; - let s: &str = &self.rowbuf[ridx][cidx][..]; - // postgres csv return example: 1970-01-01 00:00:01+00 - format!("{}:00", s).parse().map_err(|_| { - ConnectorXError::cannot_produce::>(Some(self.rowbuf[ridx][cidx].into())) - })? + match &self.rowbuf[ridx][cidx][..] { + "infinity" => DateTime::::MAX_UTC, + "-infinity" => DateTime::::MIN_UTC, + // postgres csv return example: 1970-01-01 00:00:01+00 + v => format!("{}:00", v).parse().map_err(|_| { + ConnectorXError::cannot_produce::>(Some(v.into())) + })? + } } } @@ -776,6 +914,8 @@ impl<'r, 'a> Produce<'r, Option>> for PostgresCSVSourceParser<'a> let (ridx, cidx) = self.next_loc()?; match &self.rowbuf[ridx][cidx][..] { "" => None, + "infinity" => Some(DateTime::::MAX_UTC), + "-infinity" => Some(DateTime::::MIN_UTC), v => { // postgres csv return example: 1970-01-01 00:00:01+00 Some(format!("{}:00", v).parse().map_err(|_| { @@ -792,9 +932,13 @@ impl<'r, 'a> Produce<'r, NaiveDate> for PostgresCSVSourceParser<'a> { #[throws(PostgresSourceError)] fn produce(&mut self) -> NaiveDate { let (ridx, cidx) = self.next_loc()?; - NaiveDate::parse_from_str(&self.rowbuf[ridx][cidx], "%Y-%m-%d").map_err(|_| { - ConnectorXError::cannot_produce::(Some(self.rowbuf[ridx][cidx].into())) - })? + match &self.rowbuf[ridx][cidx][..] { + "infinity" => NaiveDate::MAX, + "-infinity" => NaiveDate::MIN, + v => NaiveDate::parse_from_str(v, "%Y-%m-%d").map_err(|_| { + ConnectorXError::cannot_produce::(Some(v.into())) + })? + } } } @@ -806,6 +950,8 @@ impl<'r, 'a> Produce<'r, Option> for PostgresCSVSourceParser<'a> { let (ridx, cidx) = self.next_loc()?; match &self.rowbuf[ridx][cidx][..] { "" => None, + "infinity" => Some(NaiveDate::MAX), + "-infinity" => Some(NaiveDate::MIN), v => Some( NaiveDate::parse_from_str(v, "%Y-%m-%d") .map_err(|_| ConnectorXError::cannot_produce::(Some(v.into())))?, @@ -820,13 +966,17 @@ impl<'r, 'a> Produce<'r, NaiveDateTime> for PostgresCSVSourceParser<'a> { #[throws(PostgresSourceError)] fn produce(&mut self) -> NaiveDateTime { let (ridx, cidx) = self.next_loc()?; - NaiveDateTime::parse_from_str(&self.rowbuf[ridx][cidx], "%Y-%m-%d %H:%M:%S").map_err( - |_| { - ConnectorXError::cannot_produce::(Some( - self.rowbuf[ridx][cidx].into(), - )) - }, - )? + match &self.rowbuf[ridx][cidx] { + "infinity" => NaiveDateTime::MAX, + "-infinity" => NaiveDateTime::MIN, + v => NaiveDateTime::parse_from_str(v, "%Y-%m-%d %H:%M:%S").map_err( + |_| { + ConnectorXError::cannot_produce::(Some( + v.into(), + )) + }, + )? + } } } @@ -838,6 +988,8 @@ impl<'r, 'a> Produce<'r, Option> for PostgresCSVSourceParser<'a> let (ridx, cidx) = self.next_loc()?; match &self.rowbuf[ridx][cidx][..] { "" => None, + "infinity" => Some(NaiveDateTime::MAX), + "-infinity" => Some(NaiveDateTime::MIN), v => Some( NaiveDateTime::parse_from_str(v, "%Y-%m-%d %H:%M:%S").map_err(|_| { ConnectorXError::cannot_produce::(Some(v.into())) @@ -1059,15 +1211,114 @@ impl_produce!( &'r str, Vec, NaiveTime, - NaiveDateTime, - DateTime, - NaiveDate, Uuid, Value, HashMap>, Vec, ); +impl<'r, 'a> Produce<'r, DateTime> for PostgresRawSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> DateTime { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val: postgres::types::Timestamp> = row.try_get(cidx)?; + match val { + postgres::types::Timestamp::PosInfinity => DateTime::::MAX_UTC, + postgres::types::Timestamp::NegInfinity => DateTime::::MIN_UTC, + postgres::types::Timestamp::Value(t) => t, + } + } +} + +impl<'r, 'a> Produce<'r, Option>> for PostgresRawSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option> { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + Some(postgres::types::Timestamp::PosInfinity) => Some(DateTime::::MAX_UTC), + Some(postgres::types::Timestamp::NegInfinity) => Some(DateTime::::MIN_UTC), + Some(postgres::types::Timestamp::Value(t)) => t, + None => None + } + + } +} + +impl<'r, 'a> Produce<'r, NaiveDateTime> for PostgresRawSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> NaiveDateTime { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val: postgres::types::Timestamp = row.try_get(cidx)?; + match val { + postgres::types::Timestamp::PosInfinity => NaiveDateTime::MAX, + postgres::types::Timestamp::NegInfinity => NaiveDateTime::MIN, + postgres::types::Timestamp::Value(t) => t, + } + } +} + +impl<'r, 'a> Produce<'r, Option> for PostgresRawSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + Some(postgres::types::Timestamp::PosInfinity) => Some(NaiveDateTime::MAX), + Some(postgres::types::Timestamp::NegInfinity) => Some(NaiveDateTime::MIN), + Some(postgres::types::Timestamp::Value(t)) => t, + None => None + } + + } +} + +impl<'r, 'a> Produce<'r, NaiveDate> for PostgresRawSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> NaiveDate { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val: postgres::types::Date = row.try_get(cidx)?; + match val { + postgres::types::Date::PosInfinity => NaiveDate::MAX, + postgres::types::Date::NegInfinity => NaiveDate::MIN, + postgres::types::Date::Value(t) => t, + } + } +} + +impl<'r, 'a> Produce<'r, Option> for PostgresRawSourceParser<'a> { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option { + let (ridx, cidx) = self.next_loc()?; + let row = &self.rowbuf[ridx]; + let val = row.try_get(cidx)?; + match val { + Some(postgres::types::Date::PosInfinity) => Some(NaiveDate::MAX), + Some(postgres::types::Date::NegInfinity) => Some(NaiveDate::MIN), + Some(postgres::types::Date::Value(t)) => t, + None => None, + } + + } +} + impl SourcePartition for PostgresSourcePartition where C: MakeTlsConnect + Clone + 'static + Sync + Send, @@ -1217,7 +1468,63 @@ macro_rules! impl_simple_produce { }; } -impl_simple_produce!(i8, i16, i32, i64, f32, f64, Decimal, Uuid, bool,); +impl_simple_produce!(i8, i16, i32, i64, f32, f64, Uuid, bool,); + +impl<'r> Produce<'r, Decimal> for PostgresSimpleSourceParser { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Decimal { + let (ridx, cidx) = self.next_loc()?; + let val = match &self.rows[ridx] { + SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { + Some("Infinity") => Decimal::MAX, + Some("-Infinity") => Decimal::MIN, + Some(s) => s + .parse() + .map_err(|_| ConnectorXError::cannot_produce::(Some(s.into())))?, + None => throw!(anyhow!( + "Cannot parse NULL in NOT NULL column." + )), + }, + SimpleQueryMessage::CommandComplete(c) => { + panic!("get command: {}", c); + } + _ => { + panic!("what?"); + } + }; + val + } +} + +impl<'r, 'a> Produce<'r, Option> for PostgresSimpleSourceParser { + type Error = PostgresSourceError; + + #[throws(PostgresSourceError)] + fn produce(&'r mut self) -> Option { + let (ridx, cidx) = self.next_loc()?; + let val = match &self.rows[ridx] { + SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { + Some("Infinity") => Some(Decimal::MAX), + Some("-Infinity") => Some(Decimal::MIN), + Some(s) => Some( + s.parse() + .map_err(|_| ConnectorXError::cannot_produce::(Some(s.into())))?, + ), + None => None, + }, + SimpleQueryMessage::CommandComplete(c) => { + panic!("get command: {}", c); + } + _ => { + panic!("what?"); + } + }; + val + } +} + impl_simple_produce_unimplemented!( Value, HashMap>,); @@ -1409,7 +1716,7 @@ impl<'r> Produce<'r, Vec> for PostgresSimpleSourceParser { "" => throw!(anyhow!("Cannot parse NULL in non-NULL column.")), "{}" => vec![], _ => rem_first_and_last(s) - .split(",") + .split(',') .map(|token| match token { "t" => Ok(true), "f" => Ok(false), @@ -1445,7 +1752,7 @@ impl<'r> Produce<'r, Option>> for PostgresSimpleSourceParser { "{}" => Some(vec![]), _ => Some( rem_first_and_last(s) - .split(",") + .split(',') .map(|token| match token { "t" => Ok(true), "f" => Ok(false), @@ -1477,8 +1784,12 @@ impl<'r> Produce<'r, NaiveDate> for PostgresSimpleSourceParser { let (ridx, cidx) = self.next_loc()?; let val = match &self.rows[ridx] { SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { - Some(s) => NaiveDate::parse_from_str(s, "%Y-%m-%d") - .map_err(|_| ConnectorXError::cannot_produce::(Some(s.into())))?, + Some(s) => match s { + "infinity" => NaiveDate::MAX, + "-infinity" => NaiveDate::MIN, + s => NaiveDate::parse_from_str(s, "%Y-%m-%d") + .map_err(|_| ConnectorXError::cannot_produce::(Some(s.into())))?, + } None => throw!(anyhow!("Cannot parse NULL in non-NULL column.")), }, SimpleQueryMessage::CommandComplete(c) => { @@ -1500,9 +1811,13 @@ impl<'r> Produce<'r, Option> for PostgresSimpleSourceParser { let (ridx, cidx) = self.next_loc()?; let val = match &self.rows[ridx] { SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { - Some(s) => Some(NaiveDate::parse_from_str(s, "%Y-%m-%d").map_err(|_| { - ConnectorXError::cannot_produce::>(Some(s.into())) - })?), + Some(s) => match s { + "infinity" => Some(NaiveDate::MAX), + "-infinity" => Some(NaiveDate::MIN), + s => Some(NaiveDate::parse_from_str(s, "%Y-%m-%d").map_err(|_| { + ConnectorXError::cannot_produce::>(Some(s.into())) + })?), + }, None => None, }, SimpleQueryMessage::CommandComplete(c) => { @@ -1571,9 +1886,13 @@ impl<'r> Produce<'r, NaiveDateTime> for PostgresSimpleSourceParser { let (ridx, cidx) = self.next_loc()?; let val = match &self.rows[ridx] { SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { - Some(s) => NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S").map_err(|_| { - ConnectorXError::cannot_produce::(Some(s.into())) - })?, + Some(s) => match s { + "infinity" => NaiveDateTime::MAX, + "-infinity" => NaiveDateTime::MIN, + s => NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S").map_err(|_| { + ConnectorXError::cannot_produce::(Some(s.into())) + })?, + }, None => throw!(anyhow!("Cannot parse NULL in non-NULL column.")), }, SimpleQueryMessage::CommandComplete(c) => { @@ -1595,11 +1914,15 @@ impl<'r> Produce<'r, Option> for PostgresSimpleSourceParser { let (ridx, cidx) = self.next_loc()?; let val = match &self.rows[ridx] { SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { - Some(s) => Some( - NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S").map_err(|_| { - ConnectorXError::cannot_produce::>(Some(s.into())) - })?, - ), + Some(s) => match s { + "infinity" => Some(NaiveDateTime::MAX), + "-infinity" => Some(NaiveDateTime::MIN), + s => Some( + NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S").map_err(|_| { + ConnectorXError::cannot_produce::>(Some(s.into())) + })?, + ), + }, None => None, }, SimpleQueryMessage::CommandComplete(c) => { @@ -1621,6 +1944,8 @@ impl<'r> Produce<'r, DateTime> for PostgresSimpleSourceParser { let (ridx, cidx) = self.next_loc()?; let val = match &self.rows[ridx] { SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { + Some("infinity") => DateTime::::MAX_UTC, + Some("-infinity") => DateTime::::MIN_UTC, Some(s) => { let time_string = format!("{}:00", s).to_owned(); let slice: &str = &time_string[..]; @@ -1650,6 +1975,8 @@ impl<'r> Produce<'r, Option>> for PostgresSimpleSourceParser { let (ridx, cidx) = self.next_loc()?; let val = match &self.rows[ridx] { SimpleQueryMessage::Row(row) => match row.try_get(cidx)? { + Some("infinity") => Some(DateTime::::MAX_UTC), + Some("-infinity") => Some(DateTime::::MIN_UTC), Some(s) => { let time_string = format!("{}:00", s).to_owned(); let slice: &str = &time_string[..]; diff --git a/connectorx/src/sources/sqlite/mod.rs b/connectorx/src/sources/sqlite/mod.rs index 3b11ac56de..6187a54e3b 100644 --- a/connectorx/src/sources/sqlite/mod.rs +++ b/connectorx/src/sources/sqlite/mod.rs @@ -265,7 +265,7 @@ impl<'a> SQLiteSourcePartitionParser<'a> { // keeps its address static on the heap, thus the borrow of MyRows keeps valid. let rows: OwningHandle>, DummyBox>> = OwningHandle::new_with_fn(Box::new(stmt), |stmt: *const Statement<'a>| unsafe { - DummyBox((&mut *(stmt as *mut Statement<'_>)).query([]).unwrap()) + DummyBox((*(stmt as *mut Statement<'_>)).query([]).unwrap()) }); Self { rows, diff --git a/connectorx/src/sql.rs b/connectorx/src/sql.rs index 4173076442..cd22c06f42 100644 --- a/connectorx/src/sql.rs +++ b/connectorx/src/sql.rs @@ -4,8 +4,9 @@ use crate::sources::oracle::OracleDialect; use fehler::{throw, throws}; use log::{debug, trace, warn}; use sqlparser::ast::{ - BinaryOperator, Expr, Function, FunctionArg, Ident, ObjectName, Query, Select, SelectItem, - SetExpr, Statement, TableAlias, TableFactor, TableWithJoins, Value, + BinaryOperator, Expr, Function, FunctionArg, FunctionArgExpr, Ident, ObjectName, Query, Select, + SelectItem, SetExpr, Statement, TableAlias, TableFactor, TableWithJoins, Value, + WildcardAdditionalOptions, }; use sqlparser::dialect::Dialect; use sqlparser::parser::Parser; @@ -118,8 +119,9 @@ fn wrap_query( }; Statement::Query(Box::new(Query { with, - body: SetExpr::Select(Box::new(Select { - distinct: false, + locks: vec![], + body: Box::new(SetExpr::Select(Box::new(Select { + distinct: None, top: None, projection, from: vec![TableWithJoins { @@ -137,7 +139,10 @@ fn wrap_query( distribute_by: vec![], sort_by: vec![], having: None, - })), + into: None, + named_window: vec![], + qualify: None, + }))), order_by: vec![], limit: None, offset: None, @@ -164,7 +169,7 @@ trait QueryExt { impl QueryExt for Query { fn as_select_mut(&mut self) -> Option<&mut Select> { - match self.body { + match *self.body { SetExpr::Select(ref mut select) => Some(select), _ => None, } @@ -198,9 +203,11 @@ pub fn count_query(sql: &CXQuery, dialect: &T) -> CXQuery { @@ -393,7 +400,7 @@ pub fn single_col_partition_query( ast_part = wrap_query( &mut query, - vec![SelectItem::Wildcard], + vec![SelectItem::Wildcard(WildcardAdditionalOptions::default())], Some(selection), table_alias, ); @@ -417,16 +424,18 @@ pub fn get_partition_range_query(sql: &str, col: &str, dialect: &T) #[allow(unused_mut)] let mut table_alias = RANGE_TMP_TAB_NAME; #[allow(unused_mut)] - let mut args = vec![FunctionArg::Unnamed(Expr::CompoundIdentifier(vec![ - Ident { - value: RANGE_TMP_TAB_NAME.to_string(), - quote_style: None, - }, - Ident { - value: col.to_string(), - quote_style: None, - }, - ]))]; + let mut args = vec![FunctionArg::Unnamed(FunctionArgExpr::Expr( + Expr::CompoundIdentifier(vec![ + Ident { + value: RANGE_TMP_TAB_NAME.to_string(), + quote_style: None, + }, + Ident { + value: col.to_string(), + quote_style: None, + }, + ]), + ))]; // HACK: Some dialect (e.g. Oracle) does not support "AS" for alias #[cfg(feature = "src_oracle")] @@ -463,6 +472,8 @@ pub fn get_partition_range_query(sql: &str, col: &str, dialect: &T) args: args.clone(), over: None, distinct: false, + order_by: vec![], + special: false, })), SelectItem::UnnamedExpr(Expr::Function(Function { name: ObjectName(vec![Ident { @@ -472,6 +483,8 @@ pub fn get_partition_range_query(sql: &str, col: &str, dialect: &T) args, over: None, distinct: false, + order_by: vec![], + special: false, })), ]; ast_range = wrap_query(&mut query, projection, None, table_alias); @@ -519,36 +532,44 @@ pub fn get_partition_range_query_sep( value: "min".to_string(), quote_style: None, }]), - args: vec![FunctionArg::Unnamed(Expr::CompoundIdentifier(vec![ - Ident { - value: RANGE_TMP_TAB_NAME.to_string(), - quote_style: None, - }, - Ident { - value: col.to_string(), - quote_style: None, - }, - ]))], + args: vec![FunctionArg::Unnamed(FunctionArgExpr::Expr( + Expr::CompoundIdentifier(vec![ + Ident { + value: RANGE_TMP_TAB_NAME.to_string(), + quote_style: None, + }, + Ident { + value: col.to_string(), + quote_style: None, + }, + ]), + ))], over: None, distinct: false, + order_by: vec![], + special: false, }))]; let max_proj = vec![SelectItem::UnnamedExpr(Expr::Function(Function { name: ObjectName(vec![Ident { value: "max".to_string(), quote_style: None, }]), - args: vec![FunctionArg::Unnamed(Expr::CompoundIdentifier(vec![ - Ident { - value: RANGE_TMP_TAB_NAME.into(), - quote_style: None, - }, - Ident { - value: col.into(), - quote_style: None, - }, - ]))], + args: vec![FunctionArg::Unnamed(FunctionArgExpr::Expr( + Expr::CompoundIdentifier(vec![ + Ident { + value: RANGE_TMP_TAB_NAME.into(), + quote_style: None, + }, + Ident { + value: col.into(), + quote_style: None, + }, + ]), + ))], over: None, distinct: false, + order_by: vec![], + special: false, }))]; ast_range_min = wrap_query(&mut query.clone(), min_proj, None, RANGE_TMP_TAB_NAME); ast_range_max = wrap_query(&mut query, max_proj, None, RANGE_TMP_TAB_NAME); 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() + } +} diff --git a/connectorx/tests/test_mssql.rs b/connectorx/tests/test_mssql.rs index 724682a68d..ba241af186 100644 --- a/connectorx/tests/test_mssql.rs +++ b/connectorx/tests/test_mssql.rs @@ -112,7 +112,7 @@ pub fn verify_arrow_results(result: Vec) { .as_any() .downcast_ref::() .unwrap() - .eq(&Float64Array::from(vec![None, Some(3.1 as f64)]))); + .eq(&Float64Array::from(vec![None, Some(3.1_f64)]))); assert!(rb .column(4) @@ -154,10 +154,10 @@ pub fn verify_arrow_results(result: Vec) { .downcast_ref::() .unwrap() .eq(&Float64Array::from(vec![ - Some(2.2 as f64), - Some(3 as f64), - Some(7.8 as f64), - Some(-10 as f64), + Some(2.2_f64), + Some(3_f64), + Some(7.8_f64), + Some(-10_f64), ]))); assert!(rb diff --git a/connectorx/tests/test_postgres.rs b/connectorx/tests/test_postgres.rs index df4850be02..6ece56f653 100644 --- a/connectorx/tests/test_postgres.rs +++ b/connectorx/tests/test_postgres.rs @@ -1,3 +1,5 @@ +use chrono::{NaiveDate, NaiveDateTime, DateTime, Utc}; +use rust_decimal::Decimal; use arrow::{ array::{BooleanArray, Float64Array, Int64Array, StringArray}, record_batch::RecordBatch, @@ -5,7 +7,7 @@ use arrow::{ use connectorx::{ destinations::arrow::ArrowDestination, prelude::*, - sources::postgres::{rewrite_tls_args, BinaryProtocol, CSVProtocol, PostgresSource}, + sources::postgres::{rewrite_tls_args, BinaryProtocol, CSVProtocol, PostgresSource, SimpleProtocol, CursorProtocol}, sources::PartitionParser, sql::CXQuery, transports::PostgresArrowTransport, @@ -149,6 +151,355 @@ fn test_postgres() { verify_arrow_results(result); } +#[test] +fn test_csv_infinite_values_binary_proto_option() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(Option, Option, Option>); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("SELECT test_date, test_timestamp, test_timestamp_timezone FROM test_infinite_values")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(3, partition.nrows()); + assert_eq!(3, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(Some(NaiveDate::MAX), Some(NaiveDateTime::MAX), Some(DateTime::::MAX_UTC)), + Row(Some(NaiveDate::MIN), Some(NaiveDateTime::MIN), Some(DateTime::::MIN_UTC)), + Row(None, None, None), + ], + rows + ); +} + +#[test] +fn test_infinite_values_cursor_proto_option() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(Option, Option, Option>); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("SELECT test_date, test_timestamp, test_timestamp_timezone FROM test_infinite_values")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(3, partition.nrows()); + assert_eq!(3, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(Some(NaiveDate::MAX), Some(NaiveDateTime::MAX), Some(DateTime::::MAX_UTC)), + Row(Some(NaiveDate::MIN), Some(NaiveDateTime::MIN), Some(DateTime::::MIN_UTC)), + Row(None, None, None), + ], + rows + ); +} + +#[test] +fn test_csv_infinite_values_cursor_proto() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(NaiveDate, NaiveDateTime, DateTime); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("SELECT test_date, test_timestamp, test_timestamp_timezone FROM test_infinite_values WHERE test_date IS NOT NULL")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(2, partition.nrows()); + assert_eq!(3, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(NaiveDate::MAX, NaiveDateTime::MAX, DateTime::::MAX_UTC), + Row(NaiveDate::MIN, NaiveDateTime::MIN, DateTime::::MIN_UTC), + ], + rows + ); +} + +#[test] +fn test_csv_infinite_values_simple_proto() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(i32, NaiveDate, NaiveDateTime, Decimal, DateTime); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("select * from test_infinite_values WHERE test_date IS NOT NULL")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(2, partition.nrows()); + assert_eq!(5, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(1, NaiveDate::MAX, NaiveDateTime::MAX, Decimal::MAX, DateTime::::MAX_UTC), + Row(2, NaiveDate::MIN, NaiveDateTime::MIN, Decimal::MIN, DateTime::::MIN_UTC), + ], + rows + ); +} + +#[test] +fn test_csv_infinite_values_simple_proto_option() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(i32, Option, Option, Option, Option>); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("select * from test_infinite_values")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(3, partition.nrows()); + assert_eq!(5, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(1, Some(NaiveDate::MAX), Some(NaiveDateTime::MAX), Some(Decimal::MAX), Some(DateTime::::MAX_UTC)), + Row(2, Some(NaiveDate::MIN), Some(NaiveDateTime::MIN), Some(Decimal::MIN), Some(DateTime::::MIN_UTC)), + Row(3, None, None, None, None, ) + ], + rows + ); +} + +#[test] +fn test_csv_infinite_values() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(i32, NaiveDate, NaiveDateTime, Decimal, DateTime); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("select * from test_infinite_values WHERE test_date IS NOT NULL")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(2, partition.nrows()); + assert_eq!(5, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(1, NaiveDate::MAX, NaiveDateTime::MAX, Decimal::MAX, DateTime::::MAX_UTC), + Row(2, NaiveDate::MIN, NaiveDateTime::MIN, Decimal::MIN, DateTime::::MIN_UTC), + ], + rows + ); +} + +#[test] +fn test_csv_infinite_values_option() { + + let _ = env_logger::builder().is_test(true).try_init(); + + let dburl = env::var("POSTGRES_URL").unwrap(); + #[derive(Debug, PartialEq)] + struct Row(i32, Option, Option, Option, Option>); + + let url = Url::parse(dburl.as_str()).unwrap(); + let (config, _tls) = rewrite_tls_args(&url).unwrap(); + let mut source = PostgresSource::::new(config, NoTls, 1).unwrap(); + source.set_queries(&[CXQuery::naked("select * from test_infinite_values")]); + source.fetch_metadata().unwrap(); + + let mut partitions = source.partition().unwrap(); + assert!(partitions.len() == 1); + let mut partition = partitions.remove(0); + partition.result_rows().expect("run query"); + + assert_eq!(3, partition.nrows()); + assert_eq!(5, partition.ncols()); + + let mut parser = partition.parser().unwrap(); + + let mut rows: Vec = Vec::new(); + loop { + let (n, is_last) = parser.fetch_next().unwrap(); + for _i in 0..n { + rows.push(Row( + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + parser.produce().unwrap(), + )); + } + if is_last { + break; + } + } + assert_eq!( + vec![ + Row(1, Some(NaiveDate::MAX), Some(NaiveDateTime::MAX), Some(Decimal::MAX), Some(DateTime::::MAX_UTC)), + Row(2, Some(NaiveDate::MIN), Some(NaiveDateTime::MIN), Some(Decimal::MIN), Some(DateTime::::MIN_UTC)), + Row(3, None, None, None, None, ) + ], + rows + ); +} + + #[test] fn test_postgres_csv() { let _ = env_logger::builder().is_test(true).try_init(); @@ -190,9 +541,7 @@ fn test_postgres_agg() { builder, &mut destination, &queries, - Some(format!( - "SELECT test_bool, SUM(test_float) FROM test_table GROUP BY test_bool" - )), + Some("SELECT test_bool, SUM(test_float) FROM test_table GROUP BY test_bool".to_string()), ); dispatcher.run().expect("run dispatcher"); diff --git a/docs/databases/mssql.md b/docs/databases/mssql.md index b345fd8705..f637f4ec81 100644 --- a/docs/databases/mssql.md +++ b/docs/databases/mssql.md @@ -9,6 +9,9 @@ SQLServer does not need to specify protocol. By adding `trusted_connection=true` to connection uri parameter, windows authentication will be enabled. Example: `mssql://host:port/db?trusted_connection=true` By adding `encrypt=true` to connection uri parameter, SQLServer will use SSL encryption. Example: `mssql://host:port/db?encrypt=true&trusted_connection=true` ``` +```{hint} +if the user password has special characters, they need to be sanitized. example: `from urllib import parse; password = parse.quote_plus(password)` +``` ```py import connectorx as cx diff --git a/scripts/postgres.sql b/scripts/postgres.sql index 559f22273b..9b9bb1b042 100644 --- a/scripts/postgres.sql +++ b/scripts/postgres.sql @@ -1,6 +1,7 @@ DROP TABLE IF EXISTS test_table; DROP TABLE IF EXISTS test_str; DROP TABLE IF EXISTS test_types; +DROP TABLE IF EXISTS test_infinite_values; DROP TYPE IF EXISTS happiness; DROP EXTENSION IF EXISTS citext; DROP EXTENSION IF EXISTS ltree; @@ -20,6 +21,19 @@ INSERT INTO test_table VALUES (3, 7, 'b', 3, FALSE); INSERT INTO test_table VALUES (4, 9, 'c', 7.8, NULL); INSERT INTO test_table VALUES (1314, 2, NULL, -10, TRUE); +CREATE TABLE IF NOT EXISTS test_infinite_values( + test_int INTEGER NOT NULL, + test_date DATE, + test_timestamp TIMESTAMP, + test_real REAL, + test_timestamp_timezone TIMESTAMP WITH TIME ZONE +); + +INSERT INTO test_infinite_values VALUES (1, 'infinity'::DATE, 'infinity'::TIMESTAMP, 'infinity'::REAL, 'infinity'::TIMESTAMP); +INSERT INTO test_infinite_values VALUES (2, '-infinity'::DATE, '-infinity'::TIMESTAMP, '-infinity'::REAL, '-infinity'::TIMESTAMP); +INSERT INTO test_infinite_values VALUES (3,NULL, NULL, NULL, NULL); + + CREATE TABLE IF NOT EXISTS test_str( id INTEGER NOT NULL, test_language TEXT,