├── .github ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── dependabot.yml ├── release-drafter.yml └── workflows │ ├── bump-versions.yml │ ├── lint.yml │ ├── pr-labeler.yml │ ├── release-drafter.yml │ └── release.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── dprint.json ├── examples └── datasets │ └── foods.csv ├── pyproject.toml ├── python └── polars-cli │ ├── __init__.py │ └── __main__.py ├── rust-toolchain.toml ├── rustfmt.toml └── src ├── highlighter.rs ├── interactive.rs ├── main.rs └── prompt.rs /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @ritchie46 @stinodego @universalmind303 2 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to make participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | - Using welcoming and inclusive language 18 | - Being respectful of differing viewpoints and experiences 19 | - Gracefully accepting constructive criticism 20 | - Focusing on what is best for the community 21 | - Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | - The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | - Trolling, insulting/derogatory comments, and personal or political attacks 28 | - Public or private harassment 29 | - Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | - Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies within all project spaces, and it also applies when 49 | an individual is representing the project or its community in public spaces. 50 | Examples of representing a project or community include using an official 51 | project e-mail address, posting via an official social media account, or acting 52 | as an appointed representative at an online or offline event. Representation of 53 | a project may be further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at ritchie46@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: ritchie46 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: '🐞 Bug report' 2 | description: Report an issue. 3 | labels: [bug] 4 | 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thanks for taking the time to fill out this bug report! 10 | 11 | - type: checkboxes 12 | id: checks 13 | attributes: 14 | label: Checks 15 | options: 16 | - label: > 17 | I have checked that this issue has not already been reported. 18 | required: true 19 | - label: > 20 | I have confirmed this bug exists on the 21 | [latest version](https://github.com/pola-rs/polars-cli/releases/latest) of the Polars CLI. 22 | required: true 23 | 24 | - type: textarea 25 | id: example 26 | attributes: 27 | label: Reproducible example 28 | description: > 29 | Copy and paste the command(s) you ran and any relevant log output. 30 | placeholder: polars -c "SELECT * from read_csv('data.csv')" 31 | render: shell 32 | validations: 33 | required: true 34 | 35 | - type: textarea 36 | id: problem 37 | attributes: 38 | label: Issue description 39 | description: > 40 | Provide any additional information you think might be relevant. 41 | validations: 42 | required: true 43 | 44 | - type: textarea 45 | id: expected-behavior 46 | attributes: 47 | label: Expected behavior 48 | description: > 49 | Describe or show an example of the expected behavior. 50 | validations: 51 | required: true 52 | 53 | - type: input 54 | id: version 55 | attributes: 56 | label: Installed version 57 | placeholder: '0.3.0' 58 | validations: 59 | required: true 60 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | # Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser 2 | blank_issues_enabled: true 3 | contact_links: 4 | - name: '❓ Question' 5 | url: https://stackoverflow.com/questions/ask?tags=polars-cli 6 | about: | 7 | Ask a question about the Polars CLI on Stack Overflow. 8 | - name: '💬 Discord server' 9 | url: https://discord.gg/4UfP5cfBE7 10 | about: | 11 | Chat with the community and Polars maintainers about the usage and development of the project. 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: '✨ Feature request' 2 | description: Suggest a new feature or enhancement. 3 | labels: [enhancement] 4 | 5 | body: 6 | - type: textarea 7 | id: description 8 | attributes: 9 | label: Description 10 | description: > 11 | Please describe the feature or enhancement and explain why it should be implemented. 12 | Include examples if applicable. 13 | validations: 14 | required: true 15 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # GitHub Actions 4 | - package-ecosystem: github-actions 5 | directory: '/' 6 | schedule: 7 | interval: monthly 8 | ignore: 9 | - dependency-name: '*' 10 | update-types: ['version-update:semver-patch'] 11 | commit-message: 12 | prefix: ci 13 | labels: ['skip changelog'] 14 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: $RESOLVED_VERSION 2 | tag-template: $RESOLVED_VERSION 3 | 4 | version-resolver: 5 | minor: 6 | labels: 7 | - breaking 8 | default: patch 9 | 10 | categories: 11 | - title: 🏆 Highlights 12 | labels: highlight 13 | - title: 💥 Breaking changes 14 | labels: breaking 15 | - title: ⚠️ Deprecations 16 | labels: deprecation 17 | - title: ✨ Enhancements 18 | labels: 19 | - enhancement 20 | - performance 21 | - title: 🐞 Bug fixes 22 | labels: fix 23 | - title: 🛠️ Other improvements 24 | labels: 25 | - build 26 | - documentation 27 | - internal 28 | 29 | exclude-labels: 30 | - skip changelog 31 | 32 | change-template: '- $TITLE (#$NUMBER)' 33 | change-title-escapes: '\<*_&' 34 | replacers: 35 | # Remove conventional commits from titles 36 | - search: '/- (build|chore|ci|depr|docs|feat|fix|perf|refactor|release|test)(\(.*\))?(\!)?\: /g' 37 | replace: '- ' 38 | 39 | autolabeler: 40 | - label: breaking 41 | title: 42 | # Example: feat!: ... 43 | - '/^(build|chore|ci|depr|docs|feat|fix|perf|refactor|release|test)(\(.*\))?\!\: /' 44 | - label: build 45 | title: 46 | - '/^build/' 47 | - label: internal 48 | title: 49 | - '/^(chore|ci|refactor|test)/' 50 | - label: deprecation 51 | title: 52 | - '/^depr/' 53 | - label: documentation 54 | title: 55 | - '/^docs/' 56 | - label: enhancement 57 | title: 58 | - '/^feat/' 59 | - label: fix 60 | title: 61 | - '/^fix/' 62 | - label: performance 63 | title: 64 | - '/^perf/' 65 | 66 | template: | 67 | $CHANGES 68 | -------------------------------------------------------------------------------- /.github/workflows/bump-versions.yml: -------------------------------------------------------------------------------- 1 | name: Bump versions 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version-type: 7 | description: Version type 8 | type: choice 9 | options: 10 | - patch 11 | - minor 12 | - major 13 | default: minor 14 | 15 | jobs: 16 | bump-version: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v4 20 | 21 | - name: Install cargo-edit 22 | run: cargo install cargo-edit --no-default-features --features "upgrade set-version" 23 | 24 | - name: Update dependency versions in Cargo.toml 25 | run: cargo upgrade --incompatible 26 | 27 | - name: Update dependency versions in Cargo.lock 28 | run: cargo update 29 | 30 | - name: Update Polars CLI version 31 | run: cargo set-version --bump ${{ inputs.version-type }} 32 | 33 | - name: Get new version number from Cargo.toml 34 | id: version 35 | run: | 36 | VERSION=$(grep -m 1 -oP 'version = "\K[^"]+' Cargo.toml) 37 | echo "version=$VERSION" >> $GITHUB_OUTPUT 38 | 39 | - name: Commit to release branch 40 | uses: EndBug/add-and-commit@v9 41 | with: 42 | message: 'build: Set version to ${{ steps.version.outputs.version }} and update dependencies' 43 | default_author: github_actions 44 | new_branch: release/${{ steps.version.outputs.version }} 45 | 46 | - name: Generate GitHub token 47 | uses: tibdex/github-app-token@v2 48 | id: generate-token 49 | with: 50 | app_id: ${{ secrets.CI_APP_ID }} 51 | private_key: ${{ secrets.CI_APP_PRIVATE_KEY }} 52 | 53 | - name: Open pull request 54 | env: 55 | GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} 56 | run: | 57 | gh pr create \ 58 | --head 'release/${{ steps.version.outputs.version }}' \ 59 | --base main \ 60 | --title 'build: Set version to ${{ steps.version.outputs.version }} and update dependencies' \ 61 | --body '#### Changes 62 | - Bump Polars CLI version to ${{ steps.version.outputs.version }} 63 | - Update dependencies to their latest versions' 64 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.ref }} 11 | cancel-in-progress: true 12 | 13 | env: 14 | RUSTFLAGS: -C debuginfo=0 # Do not produce debug symbols to keep memory usage down 15 | 16 | jobs: 17 | clippy: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - uses: actions/checkout@v4 21 | 22 | - name: Set up Rust 23 | run: rustup component add clippy 24 | 25 | - name: Cache Rust 26 | uses: Swatinem/rust-cache@v2 27 | with: 28 | save-if: ${{ github.ref_name == 'main' }} 29 | 30 | - name: Run cargo clippy with all features enabled 31 | run: cargo clippy --all-targets --all-features -- -D warnings 32 | 33 | rustfmt: 34 | if: github.ref_name != 'main' 35 | runs-on: ubuntu-latest 36 | steps: 37 | - uses: actions/checkout@v4 38 | 39 | - name: Set up Rust 40 | run: rustup component add rustfmt 41 | 42 | - name: Run cargo fmt 43 | run: cargo fmt --all -- --check 44 | 45 | dprint: 46 | if: github.ref_name != 'main' 47 | runs-on: ubuntu-latest 48 | steps: 49 | - uses: actions/checkout@v4 50 | 51 | - name: Lint Markdown and TOML 52 | uses: dprint/check@v2.2 53 | -------------------------------------------------------------------------------- /.github/workflows/pr-labeler.yml: -------------------------------------------------------------------------------- 1 | name: Pull request labeler 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened, edited] 6 | 7 | permissions: 8 | contents: read 9 | pull-requests: write 10 | 11 | jobs: 12 | main: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Label pull request 16 | uses: release-drafter/release-drafter@v6 17 | with: 18 | disable-releaser: true 19 | env: 20 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 21 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: Update draft releases 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | workflow_dispatch: 8 | inputs: 9 | # Latest commit to include with the release. If omitted, use the latest commit on the main branch. 10 | sha: 11 | description: Commit SHA 12 | type: string 13 | 14 | permissions: 15 | contents: write 16 | pull-requests: read 17 | 18 | jobs: 19 | draft-release: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: Draft release 23 | uses: release-drafter/release-drafter@v6 24 | with: 25 | config-name: release-drafter.yml 26 | commitish: ${{ inputs.sha || github.sha }} 27 | disable-autolabeler: true 28 | env: 29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 30 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | # Latest commit to include with the release. If omitted, use the latest commit on the main branch. 7 | sha: 8 | description: Commit SHA 9 | type: string 10 | # Build binaries, but do not publish to crates.io / GitHub. 11 | dry-run: 12 | description: Dry run 13 | type: boolean 14 | default: false 15 | 16 | concurrency: 17 | group: ${{ github.workflow }}-${{ github.ref }} 18 | cancel-in-progress: true 19 | 20 | env: 21 | PYTHON_VERSION: '3.8' 22 | CARGO_INCREMENTAL: 0 23 | CARGO_NET_RETRY: 10 24 | RUSTUP_MAX_RETRIES: 10 25 | 26 | defaults: 27 | run: 28 | shell: bash 29 | 30 | jobs: 31 | get-version: 32 | runs-on: ubuntu-latest 33 | outputs: 34 | version: ${{ steps.version.outputs.version }} 35 | is-prerelease: ${{ steps.version.outputs.is_prerelease }} 36 | steps: 37 | - uses: actions/checkout@v4 38 | with: 39 | ref: ${{ inputs.sha }} 40 | - name: Get version from Cargo.toml 41 | id: version 42 | run: | 43 | VERSION=$(grep -m 1 -oP 'version = "\K[^"]+' Cargo.toml) 44 | if [[ "$VERSION" == *"-"* ]]; then 45 | IS_PRERELEASE=true 46 | else 47 | IS_PRERELEASE=false 48 | fi 49 | echo "version=$VERSION" >> $GITHUB_OUTPUT 50 | echo "is_prerelease=$IS_PRERELEASE" >> $GITHUB_OUTPUT 51 | 52 | create-sdist: 53 | runs-on: ubuntu-latest 54 | steps: 55 | - uses: actions/checkout@v4 56 | with: 57 | ref: ${{ inputs.sha }} 58 | 59 | # Avoid potential out-of-memory errors 60 | - name: Set swap space for Linux 61 | uses: pierotofy/set-swap-space@master 62 | with: 63 | swap-size-gb: 10 64 | 65 | - name: Set up Python 66 | uses: actions/setup-python@v5 67 | with: 68 | python-version: ${{ env.PYTHON_VERSION }} 69 | 70 | - name: Create source distribution 71 | uses: PyO3/maturin-action@v1 72 | with: 73 | command: sdist 74 | args: --out dist 75 | 76 | - name: Test sdist 77 | run: | 78 | TOOLCHAIN=$(grep -oP 'channel = "\K[^"]+' rust-toolchain.toml) 79 | rustup default $TOOLCHAIN 80 | pip install --force-reinstall --verbose dist/*.tar.gz 81 | polars --version 82 | python -m polars-cli --version 83 | 84 | - name: Upload sdist 85 | uses: actions/upload-artifact@v4 86 | with: 87 | name: dist-sdist 88 | path: dist/*.tar.gz 89 | 90 | build-wheels: 91 | needs: get-version 92 | runs-on: ${{ matrix.os }} 93 | strategy: 94 | fail-fast: false 95 | matrix: 96 | os: [ubuntu-latest, macos-latest, windows-latest] 97 | arch: [x86_64, aarch64] 98 | exclude: 99 | - os: windows-latest 100 | arch: aarch64 101 | 102 | steps: 103 | - uses: actions/checkout@v4 104 | with: 105 | ref: ${{ inputs.sha }} 106 | 107 | # Avoid potential out-of-memory errors 108 | - name: Set swap space for Linux 109 | if: matrix.os == 'ubuntu-latest' 110 | uses: pierotofy/set-swap-space@master 111 | with: 112 | swap-size-gb: 10 113 | 114 | - name: Set up Python 115 | uses: actions/setup-python@v5 116 | with: 117 | python-version: ${{ env.PYTHON_VERSION }} 118 | 119 | - name: Set Rust target 120 | id: target 121 | run: | 122 | if [ ${{ matrix.os == 'ubuntu-latest'}} = true ]; then 123 | VENDOR_SYS=unknown-linux-gnu 124 | elif [ ${{ matrix.os == 'macos-latest'}} = true ]; then 125 | VENDOR_SYS=apple-darwin 126 | else 127 | VENDOR_SYS=pc-windows-msvc 128 | fi 129 | TARGET=${{ matrix.arch }}-$VENDOR_SYS 130 | echo "target=$TARGET" >> $GITHUB_OUTPUT 131 | 132 | - name: Add rustup target 133 | run: rustup target add ${{ steps.target.outputs.target }} 134 | 135 | - name: Set RUSTFLAGS for x86_64 136 | if: matrix.arch == 'x86_64' && matrix.os != 'macos-latest' 137 | run: echo "RUSTFLAGS=-C target-feature=+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+avx,+avx2,+fma,+bmi1,+bmi2,+lzcnt" >> $GITHUB_ENV 138 | - name: Set RUSTFLAGS for x86_64 MacOS 139 | if: matrix.arch == 'x86_64' && matrix.os == 'macos-latest' 140 | run: echo "RUSTFLAGS=-C target-feature=+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+avx,+fma" >> $GITHUB_ENV 141 | 142 | - name: Set jemalloc for aarch64 Linux 143 | if: matrix.arch == 'aarch64' && matrix.os == 'ubuntu-latest' 144 | run: echo "JEMALLOC_SYS_WITH_LG_PAGE=16" >> $GITHUB_ENV 145 | 146 | - name: Build wheel 147 | uses: PyO3/maturin-action@v1 148 | with: 149 | command: build 150 | target: ${{ steps.target.outputs.target }} 151 | args: > 152 | --release 153 | --out dist 154 | manylinux: '2_28' 155 | 156 | - name: Test wheel 157 | # Only test wheels that match the runner architecture for now 158 | if: (matrix.arch == 'x86_64' && matrix.os != 'macos-latest') || (matrix.arch == 'aarch64' && matrix.os == 'macos-latest') 159 | run: | 160 | pip install dist/*.whl --force-reinstall 161 | polars --version 162 | python -m polars-cli --version 163 | 164 | - name: Upload wheel 165 | uses: actions/upload-artifact@v4 166 | with: 167 | name: dist-wheel-${{ matrix.os }}-${{ matrix.arch }} 168 | path: dist/*.whl 169 | 170 | - name: Archive binary 171 | id: archive 172 | run: | 173 | ARCHIVE_FILENAME=polars-cli-${{ needs.get-version.outputs.version }}-${{ steps.target.outputs.target }}.tar.gz 174 | DIR=target/${{ steps.target.outputs.target }}/release 175 | tar czvf $ARCHIVE_FILENAME --directory=$DIR polars 176 | echo "filename=$ARCHIVE_FILENAME" >> $GITHUB_OUTPUT 177 | 178 | - name: Upload binary 179 | uses: actions/upload-artifact@v4 180 | with: 181 | name: binary-${{ matrix.os }}-${{ matrix.arch }} 182 | path: ${{ steps.archive.outputs.filename }} 183 | 184 | publish-to-pypi: 185 | needs: [create-sdist, build-wheels] 186 | environment: 187 | name: release 188 | url: https://pypi.org/project/polars-cli 189 | runs-on: ubuntu-latest 190 | permissions: 191 | id-token: write 192 | 193 | steps: 194 | - name: Download sdist and wheels 195 | uses: actions/download-artifact@v4 196 | with: 197 | pattern: dist-* 198 | path: dist 199 | merge-multiple: true 200 | 201 | - name: Publish to PyPI 202 | if: inputs.dry-run == false 203 | uses: pypa/gh-action-pypi-publish@release/v1 204 | with: 205 | skip-existing: true 206 | verbose: true 207 | 208 | publish-to-crates-io: 209 | needs: [create-sdist, build-wheels] 210 | environment: 211 | name: release 212 | url: https://crates.io/crates/polars-cli 213 | runs-on: ubuntu-latest 214 | 215 | steps: 216 | - uses: actions/checkout@v4 217 | with: 218 | ref: ${{ inputs.sha }} 219 | 220 | - name: Publish to crates.io 221 | env: 222 | CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} 223 | run: cargo publish ${{ inputs.dry-run && '--dry-run' || '' }} 224 | 225 | publish-to-github: 226 | needs: [publish-to-pypi, publish-to-crates-io, get-version] 227 | environment: 228 | name: release 229 | url: https://github.com/pola-rs/polars-cli/releases 230 | runs-on: ubuntu-latest 231 | steps: 232 | - uses: actions/checkout@v4 233 | with: 234 | ref: ${{ inputs.sha }} 235 | 236 | - name: Download binaries 237 | uses: actions/download-artifact@v4 238 | with: 239 | pattern: binary-* 240 | path: binaries 241 | merge-multiple: true 242 | 243 | - name: Create GitHub release 244 | id: github-release 245 | uses: release-drafter/release-drafter@v6 246 | with: 247 | config-name: release-drafter.yml 248 | name: ${{ needs.get-version.outputs.version }} 249 | tag: ${{ needs.get-version.outputs.version }} 250 | version: ${{ needs.get-version.outputs.version }} 251 | prerelease: ${{ needs.get-version.outputs.is-prerelease }} 252 | commitish: ${{ inputs.sha || github.sha }} 253 | disable-autolabeler: true 254 | env: 255 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 256 | 257 | - name: Upload binaries to GitHub release 258 | run: gh release upload $TAG $FILES --clobber 259 | env: 260 | TAG: ${{ steps.github-release.outputs.tag_name }} 261 | FILES: binaries/* 262 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 263 | 264 | - name: Publish GitHub release 265 | if: inputs.dry-run == false 266 | run: gh release edit $TAG --draft=false 267 | env: 268 | TAG: ${{ steps.github-release.outputs.tag_name }} 269 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 270 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE 2 | /.vscode/ 3 | .idea 4 | 5 | # OS 6 | .DS_Store 7 | 8 | # RUST 9 | 10 | # Generated by Cargo 11 | # will have compiled files and executables 12 | debug/ 13 | target/ 14 | 15 | # These are backup files generated by rustfmt 16 | **/*.rs.bk 17 | 18 | # MSVC Windows builds of rustc generate these, which store debugging information 19 | *.pdb 20 | 21 | # PYTHON 22 | 23 | # Byte-compiled / optimized / DLL files 24 | __pycache__/ 25 | *.py[cod] 26 | *$py.class 27 | 28 | # C extensions 29 | *.so 30 | 31 | # Distribution / packaging 32 | .Python 33 | build/ 34 | develop-eggs/ 35 | dist/ 36 | downloads/ 37 | eggs/ 38 | .eggs/ 39 | lib/ 40 | lib64/ 41 | parts/ 42 | sdist/ 43 | var/ 44 | wheels/ 45 | share/python-wheels/ 46 | *.egg-info/ 47 | .installed.cfg 48 | *.egg 49 | MANIFEST 50 | 51 | # PyInstaller 52 | # Usually these files are written by a python script from a template 53 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 54 | *.manifest 55 | *.spec 56 | 57 | # Installer logs 58 | pip-log.txt 59 | pip-delete-this-directory.txt 60 | 61 | # Unit test / coverage reports 62 | htmlcov/ 63 | .tox/ 64 | .nox/ 65 | .coverage 66 | .coverage.* 67 | .cache 68 | nosetests.xml 69 | coverage.xml 70 | *.cover 71 | *.py,cover 72 | .hypothesis/ 73 | .pytest_cache/ 74 | cover/ 75 | 76 | # Translations 77 | *.mo 78 | *.pot 79 | 80 | # Django stuff: 81 | *.log 82 | local_settings.py 83 | db.sqlite3 84 | db.sqlite3-journal 85 | 86 | # Flask stuff: 87 | instance/ 88 | .webassets-cache 89 | 90 | # Scrapy stuff: 91 | .scrapy 92 | 93 | # Sphinx documentation 94 | docs/_build/ 95 | 96 | # PyBuilder 97 | .pybuilder/ 98 | target/ 99 | 100 | # Jupyter Notebook 101 | .ipynb_checkpoints 102 | 103 | # IPython 104 | profile_default/ 105 | ipython_config.py 106 | 107 | # pyenv 108 | # For a library or package, you might want to ignore these files since the code is 109 | # intended to run in multiple environments; otherwise, check them in: 110 | # .python-version 111 | 112 | # pipenv 113 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 114 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 115 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 116 | # install all needed dependencies. 117 | #Pipfile.lock 118 | 119 | # poetry 120 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 121 | # This is especially recommended for binary packages to ensure reproducibility, and is more 122 | # commonly ignored for libraries. 123 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 124 | #poetry.lock 125 | 126 | # pdm 127 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 128 | #pdm.lock 129 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 130 | # in version control. 131 | # https://pdm.fming.dev/#use-with-ide 132 | .pdm.toml 133 | 134 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 135 | __pypackages__/ 136 | 137 | # Celery stuff 138 | celerybeat-schedule 139 | celerybeat.pid 140 | 141 | # SageMath parsed files 142 | *.sage.py 143 | 144 | # Environments 145 | .env 146 | .venv 147 | env/ 148 | venv/ 149 | ENV/ 150 | env.bak/ 151 | venv.bak/ 152 | 153 | # Spyder project settings 154 | .spyderproject 155 | .spyproject 156 | 157 | # Rope project settings 158 | .ropeproject 159 | 160 | # mkdocs documentation 161 | /site 162 | 163 | # mypy 164 | .mypy_cache/ 165 | .dmypy.json 166 | dmypy.json 167 | 168 | # Pyre type checker 169 | .pyre/ 170 | 171 | # pytype static type analyzer 172 | .pytype/ 173 | 174 | # Cython debug symbols 175 | cython_debug/ 176 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "ahash" 22 | version = "0.8.11" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 25 | dependencies = [ 26 | "cfg-if", 27 | "getrandom", 28 | "once_cell", 29 | "version_check", 30 | "zerocopy", 31 | ] 32 | 33 | [[package]] 34 | name = "aho-corasick" 35 | version = "1.1.3" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 38 | dependencies = [ 39 | "memchr", 40 | ] 41 | 42 | [[package]] 43 | name = "alloc-no-stdlib" 44 | version = "2.0.4" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 47 | 48 | [[package]] 49 | name = "alloc-stdlib" 50 | version = "0.2.2" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 53 | dependencies = [ 54 | "alloc-no-stdlib", 55 | ] 56 | 57 | [[package]] 58 | name = "allocator-api2" 59 | version = "0.2.21" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 62 | 63 | [[package]] 64 | name = "android-tzdata" 65 | version = "0.1.1" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 68 | 69 | [[package]] 70 | name = "android_system_properties" 71 | version = "0.1.5" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 74 | dependencies = [ 75 | "libc", 76 | ] 77 | 78 | [[package]] 79 | name = "anstream" 80 | version = "0.6.18" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 83 | dependencies = [ 84 | "anstyle", 85 | "anstyle-parse", 86 | "anstyle-query", 87 | "anstyle-wincon", 88 | "colorchoice", 89 | "is_terminal_polyfill", 90 | "utf8parse", 91 | ] 92 | 93 | [[package]] 94 | name = "anstyle" 95 | version = "1.0.10" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 98 | 99 | [[package]] 100 | name = "anstyle-parse" 101 | version = "0.2.6" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 104 | dependencies = [ 105 | "utf8parse", 106 | ] 107 | 108 | [[package]] 109 | name = "anstyle-query" 110 | version = "1.1.2" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 113 | dependencies = [ 114 | "windows-sys 0.59.0", 115 | ] 116 | 117 | [[package]] 118 | name = "anstyle-wincon" 119 | version = "3.0.6" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" 122 | dependencies = [ 123 | "anstyle", 124 | "windows-sys 0.59.0", 125 | ] 126 | 127 | [[package]] 128 | name = "argminmax" 129 | version = "0.6.2" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "52424b59d69d69d5056d508b260553afd91c57e21849579cd1f50ee8b8b88eaa" 132 | dependencies = [ 133 | "num-traits", 134 | ] 135 | 136 | [[package]] 137 | name = "array-init-cursor" 138 | version = "0.2.0" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" 141 | 142 | [[package]] 143 | name = "async-stream" 144 | version = "0.3.6" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 147 | dependencies = [ 148 | "async-stream-impl", 149 | "futures-core", 150 | "pin-project-lite", 151 | ] 152 | 153 | [[package]] 154 | name = "async-stream-impl" 155 | version = "0.3.6" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 158 | dependencies = [ 159 | "proc-macro2", 160 | "quote", 161 | "syn 2.0.96", 162 | ] 163 | 164 | [[package]] 165 | name = "async-trait" 166 | version = "0.1.85" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" 169 | dependencies = [ 170 | "proc-macro2", 171 | "quote", 172 | "syn 2.0.96", 173 | ] 174 | 175 | [[package]] 176 | name = "atoi" 177 | version = "2.0.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 180 | dependencies = [ 181 | "num-traits", 182 | ] 183 | 184 | [[package]] 185 | name = "atoi_simd" 186 | version = "0.16.0" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "4790f9e8961209112beb783d85449b508673cf4a6a419c8449b210743ac4dbe9" 189 | 190 | [[package]] 191 | name = "atomic-waker" 192 | version = "1.1.2" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 195 | 196 | [[package]] 197 | name = "atty" 198 | version = "0.2.14" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 201 | dependencies = [ 202 | "hermit-abi", 203 | "libc", 204 | "winapi", 205 | ] 206 | 207 | [[package]] 208 | name = "autocfg" 209 | version = "1.4.0" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 212 | 213 | [[package]] 214 | name = "backtrace" 215 | version = "0.3.74" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 218 | dependencies = [ 219 | "addr2line", 220 | "cfg-if", 221 | "libc", 222 | "miniz_oxide", 223 | "object", 224 | "rustc-demangle", 225 | "windows-targets", 226 | ] 227 | 228 | [[package]] 229 | name = "base64" 230 | version = "0.22.1" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 233 | 234 | [[package]] 235 | name = "bitflags" 236 | version = "2.7.0" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" 239 | dependencies = [ 240 | "serde", 241 | ] 242 | 243 | [[package]] 244 | name = "brotli" 245 | version = "7.0.0" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" 248 | dependencies = [ 249 | "alloc-no-stdlib", 250 | "alloc-stdlib", 251 | "brotli-decompressor", 252 | ] 253 | 254 | [[package]] 255 | name = "brotli-decompressor" 256 | version = "4.0.1" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" 259 | dependencies = [ 260 | "alloc-no-stdlib", 261 | "alloc-stdlib", 262 | ] 263 | 264 | [[package]] 265 | name = "bumpalo" 266 | version = "3.16.0" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 269 | 270 | [[package]] 271 | name = "bytemuck" 272 | version = "1.21.0" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" 275 | dependencies = [ 276 | "bytemuck_derive", 277 | ] 278 | 279 | [[package]] 280 | name = "bytemuck_derive" 281 | version = "1.8.1" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" 284 | dependencies = [ 285 | "proc-macro2", 286 | "quote", 287 | "syn 2.0.96", 288 | ] 289 | 290 | [[package]] 291 | name = "byteorder" 292 | version = "1.5.0" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 295 | 296 | [[package]] 297 | name = "bytes" 298 | version = "1.9.0" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 301 | 302 | [[package]] 303 | name = "castaway" 304 | version = "0.2.3" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" 307 | dependencies = [ 308 | "rustversion", 309 | ] 310 | 311 | [[package]] 312 | name = "cc" 313 | version = "1.2.9" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "c8293772165d9345bdaaa39b45b2109591e63fe5e6fbc23c6ff930a048aa310b" 316 | dependencies = [ 317 | "jobserver", 318 | "libc", 319 | "shlex", 320 | ] 321 | 322 | [[package]] 323 | name = "cfg-if" 324 | version = "1.0.0" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 327 | 328 | [[package]] 329 | name = "chrono" 330 | version = "0.4.39" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" 333 | dependencies = [ 334 | "android-tzdata", 335 | "iana-time-zone", 336 | "num-traits", 337 | "serde", 338 | "windows-targets", 339 | ] 340 | 341 | [[package]] 342 | name = "chrono-tz" 343 | version = "0.10.0" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "cd6dd8046d00723a59a2f8c5f295c515b9bb9a331ee4f8f3d4dd49e428acd3b6" 346 | dependencies = [ 347 | "chrono", 348 | "chrono-tz-build", 349 | "phf", 350 | ] 351 | 352 | [[package]] 353 | name = "chrono-tz-build" 354 | version = "0.4.0" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "e94fea34d77a245229e7746bd2beb786cd2a896f306ff491fb8cecb3074b10a7" 357 | dependencies = [ 358 | "parse-zoneinfo", 359 | "phf_codegen", 360 | ] 361 | 362 | [[package]] 363 | name = "ciborium" 364 | version = "0.2.2" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" 367 | dependencies = [ 368 | "ciborium-io", 369 | "ciborium-ll", 370 | "serde", 371 | ] 372 | 373 | [[package]] 374 | name = "ciborium-io" 375 | version = "0.2.2" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" 378 | 379 | [[package]] 380 | name = "ciborium-ll" 381 | version = "0.2.2" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" 384 | dependencies = [ 385 | "ciborium-io", 386 | "half", 387 | ] 388 | 389 | [[package]] 390 | name = "clap" 391 | version = "4.5.26" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" 394 | dependencies = [ 395 | "clap_builder", 396 | "clap_derive", 397 | ] 398 | 399 | [[package]] 400 | name = "clap_builder" 401 | version = "4.5.26" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" 404 | dependencies = [ 405 | "anstream", 406 | "anstyle", 407 | "clap_lex", 408 | "strsim", 409 | ] 410 | 411 | [[package]] 412 | name = "clap_derive" 413 | version = "4.5.24" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" 416 | dependencies = [ 417 | "heck", 418 | "proc-macro2", 419 | "quote", 420 | "syn 2.0.96", 421 | ] 422 | 423 | [[package]] 424 | name = "clap_lex" 425 | version = "0.7.4" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 428 | 429 | [[package]] 430 | name = "colorchoice" 431 | version = "1.0.3" 432 | source = "registry+https://github.com/rust-lang/crates.io-index" 433 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 434 | 435 | [[package]] 436 | name = "comfy-table" 437 | version = "7.1.3" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "24f165e7b643266ea80cb858aed492ad9280e3e05ce24d4a99d7d7b889b6a4d9" 440 | dependencies = [ 441 | "crossterm", 442 | "strum", 443 | "strum_macros", 444 | "unicode-width 0.2.0", 445 | ] 446 | 447 | [[package]] 448 | name = "compact_str" 449 | version = "0.8.1" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" 452 | dependencies = [ 453 | "castaway", 454 | "cfg-if", 455 | "itoa", 456 | "rustversion", 457 | "ryu", 458 | "serde", 459 | "static_assertions", 460 | ] 461 | 462 | [[package]] 463 | name = "core-foundation-sys" 464 | version = "0.8.7" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 467 | 468 | [[package]] 469 | name = "crc32fast" 470 | version = "1.4.2" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 473 | dependencies = [ 474 | "cfg-if", 475 | ] 476 | 477 | [[package]] 478 | name = "crossbeam-channel" 479 | version = "0.5.14" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" 482 | dependencies = [ 483 | "crossbeam-utils", 484 | ] 485 | 486 | [[package]] 487 | name = "crossbeam-deque" 488 | version = "0.8.6" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 491 | dependencies = [ 492 | "crossbeam-epoch", 493 | "crossbeam-utils", 494 | ] 495 | 496 | [[package]] 497 | name = "crossbeam-epoch" 498 | version = "0.9.18" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 501 | dependencies = [ 502 | "crossbeam-utils", 503 | ] 504 | 505 | [[package]] 506 | name = "crossbeam-queue" 507 | version = "0.3.12" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 510 | dependencies = [ 511 | "crossbeam-utils", 512 | ] 513 | 514 | [[package]] 515 | name = "crossbeam-utils" 516 | version = "0.8.21" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 519 | 520 | [[package]] 521 | name = "crossterm" 522 | version = "0.28.1" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" 525 | dependencies = [ 526 | "bitflags", 527 | "crossterm_winapi", 528 | "mio", 529 | "parking_lot", 530 | "rustix", 531 | "serde", 532 | "signal-hook", 533 | "signal-hook-mio", 534 | "winapi", 535 | ] 536 | 537 | [[package]] 538 | name = "crossterm_winapi" 539 | version = "0.9.1" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 542 | dependencies = [ 543 | "winapi", 544 | ] 545 | 546 | [[package]] 547 | name = "crunchy" 548 | version = "0.2.2" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 551 | 552 | [[package]] 553 | name = "dyn-clone" 554 | version = "1.0.17" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" 557 | 558 | [[package]] 559 | name = "either" 560 | version = "1.13.0" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 563 | dependencies = [ 564 | "serde", 565 | ] 566 | 567 | [[package]] 568 | name = "enum_dispatch" 569 | version = "0.3.13" 570 | source = "registry+https://github.com/rust-lang/crates.io-index" 571 | checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" 572 | dependencies = [ 573 | "once_cell", 574 | "proc-macro2", 575 | "quote", 576 | "syn 2.0.96", 577 | ] 578 | 579 | [[package]] 580 | name = "equivalent" 581 | version = "1.0.1" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 584 | 585 | [[package]] 586 | name = "errno" 587 | version = "0.3.10" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 590 | dependencies = [ 591 | "libc", 592 | "windows-sys 0.59.0", 593 | ] 594 | 595 | [[package]] 596 | name = "ethnum" 597 | version = "1.5.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" 600 | 601 | [[package]] 602 | name = "fallible-streaming-iterator" 603 | version = "0.1.9" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" 606 | 607 | [[package]] 608 | name = "fast-float2" 609 | version = "0.2.3" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" 612 | 613 | [[package]] 614 | name = "fd-lock" 615 | version = "4.0.2" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" 618 | dependencies = [ 619 | "cfg-if", 620 | "rustix", 621 | "windows-sys 0.52.0", 622 | ] 623 | 624 | [[package]] 625 | name = "flate2" 626 | version = "1.0.35" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 629 | dependencies = [ 630 | "crc32fast", 631 | "miniz_oxide", 632 | ] 633 | 634 | [[package]] 635 | name = "float-cmp" 636 | version = "0.10.0" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" 639 | dependencies = [ 640 | "num-traits", 641 | ] 642 | 643 | [[package]] 644 | name = "foldhash" 645 | version = "0.1.4" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" 648 | 649 | [[package]] 650 | name = "futures" 651 | version = "0.3.31" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 654 | dependencies = [ 655 | "futures-channel", 656 | "futures-core", 657 | "futures-executor", 658 | "futures-io", 659 | "futures-sink", 660 | "futures-task", 661 | "futures-util", 662 | ] 663 | 664 | [[package]] 665 | name = "futures-channel" 666 | version = "0.3.31" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 669 | dependencies = [ 670 | "futures-core", 671 | "futures-sink", 672 | ] 673 | 674 | [[package]] 675 | name = "futures-core" 676 | version = "0.3.31" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 679 | 680 | [[package]] 681 | name = "futures-executor" 682 | version = "0.3.31" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 685 | dependencies = [ 686 | "futures-core", 687 | "futures-task", 688 | "futures-util", 689 | ] 690 | 691 | [[package]] 692 | name = "futures-io" 693 | version = "0.3.31" 694 | source = "registry+https://github.com/rust-lang/crates.io-index" 695 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 696 | 697 | [[package]] 698 | name = "futures-macro" 699 | version = "0.3.31" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 702 | dependencies = [ 703 | "proc-macro2", 704 | "quote", 705 | "syn 2.0.96", 706 | ] 707 | 708 | [[package]] 709 | name = "futures-sink" 710 | version = "0.3.31" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 713 | 714 | [[package]] 715 | name = "futures-task" 716 | version = "0.3.31" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 719 | 720 | [[package]] 721 | name = "futures-util" 722 | version = "0.3.31" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 725 | dependencies = [ 726 | "futures-channel", 727 | "futures-core", 728 | "futures-io", 729 | "futures-macro", 730 | "futures-sink", 731 | "futures-task", 732 | "memchr", 733 | "pin-project-lite", 734 | "pin-utils", 735 | "slab", 736 | ] 737 | 738 | [[package]] 739 | name = "getrandom" 740 | version = "0.2.15" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 743 | dependencies = [ 744 | "cfg-if", 745 | "js-sys", 746 | "libc", 747 | "wasi", 748 | "wasm-bindgen", 749 | ] 750 | 751 | [[package]] 752 | name = "gimli" 753 | version = "0.31.1" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 756 | 757 | [[package]] 758 | name = "glob" 759 | version = "0.3.2" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 762 | 763 | [[package]] 764 | name = "half" 765 | version = "2.4.1" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" 768 | dependencies = [ 769 | "cfg-if", 770 | "crunchy", 771 | ] 772 | 773 | [[package]] 774 | name = "halfbrown" 775 | version = "0.2.5" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "8588661a8607108a5ca69cab034063441a0413a0b041c13618a7dd348021ef6f" 778 | dependencies = [ 779 | "hashbrown 0.14.5", 780 | "serde", 781 | ] 782 | 783 | [[package]] 784 | name = "hashbrown" 785 | version = "0.14.5" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 788 | dependencies = [ 789 | "ahash", 790 | "allocator-api2", 791 | "rayon", 792 | "serde", 793 | ] 794 | 795 | [[package]] 796 | name = "hashbrown" 797 | version = "0.15.2" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 800 | dependencies = [ 801 | "allocator-api2", 802 | "equivalent", 803 | "foldhash", 804 | "rayon", 805 | "serde", 806 | ] 807 | 808 | [[package]] 809 | name = "heck" 810 | version = "0.5.0" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 813 | 814 | [[package]] 815 | name = "hermit-abi" 816 | version = "0.1.19" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 819 | dependencies = [ 820 | "libc", 821 | ] 822 | 823 | [[package]] 824 | name = "hex" 825 | version = "0.4.3" 826 | source = "registry+https://github.com/rust-lang/crates.io-index" 827 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 828 | 829 | [[package]] 830 | name = "home" 831 | version = "0.5.11" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 834 | dependencies = [ 835 | "windows-sys 0.59.0", 836 | ] 837 | 838 | [[package]] 839 | name = "iana-time-zone" 840 | version = "0.1.61" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 843 | dependencies = [ 844 | "android_system_properties", 845 | "core-foundation-sys", 846 | "iana-time-zone-haiku", 847 | "js-sys", 848 | "wasm-bindgen", 849 | "windows-core 0.52.0", 850 | ] 851 | 852 | [[package]] 853 | name = "iana-time-zone-haiku" 854 | version = "0.1.2" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 857 | dependencies = [ 858 | "cc", 859 | ] 860 | 861 | [[package]] 862 | name = "indexmap" 863 | version = "2.7.0" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" 866 | dependencies = [ 867 | "equivalent", 868 | "hashbrown 0.15.2", 869 | "serde", 870 | ] 871 | 872 | [[package]] 873 | name = "is_terminal_polyfill" 874 | version = "1.70.1" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 877 | 878 | [[package]] 879 | name = "itertools" 880 | version = "0.12.1" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 883 | dependencies = [ 884 | "either", 885 | ] 886 | 887 | [[package]] 888 | name = "itoa" 889 | version = "1.0.14" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 892 | 893 | [[package]] 894 | name = "itoap" 895 | version = "1.0.1" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8" 898 | 899 | [[package]] 900 | name = "jemalloc-sys" 901 | version = "0.5.4+5.3.0-patched" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" 904 | dependencies = [ 905 | "cc", 906 | "libc", 907 | ] 908 | 909 | [[package]] 910 | name = "jemallocator" 911 | version = "0.5.4" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" 914 | dependencies = [ 915 | "jemalloc-sys", 916 | "libc", 917 | ] 918 | 919 | [[package]] 920 | name = "jobserver" 921 | version = "0.1.32" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 924 | dependencies = [ 925 | "libc", 926 | ] 927 | 928 | [[package]] 929 | name = "js-sys" 930 | version = "0.3.76" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" 933 | dependencies = [ 934 | "once_cell", 935 | "wasm-bindgen", 936 | ] 937 | 938 | [[package]] 939 | name = "jsonpath_lib_polars_vendor" 940 | version = "0.0.1" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "f4bd9354947622f7471ff713eacaabdb683ccb13bba4edccaab9860abf480b7d" 943 | dependencies = [ 944 | "log", 945 | "serde", 946 | "serde_json", 947 | ] 948 | 949 | [[package]] 950 | name = "libc" 951 | version = "0.2.169" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 954 | 955 | [[package]] 956 | name = "libm" 957 | version = "0.2.11" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" 960 | 961 | [[package]] 962 | name = "linux-raw-sys" 963 | version = "0.4.15" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 966 | 967 | [[package]] 968 | name = "lock_api" 969 | version = "0.4.12" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 972 | dependencies = [ 973 | "autocfg", 974 | "scopeguard", 975 | ] 976 | 977 | [[package]] 978 | name = "log" 979 | version = "0.4.22" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 982 | 983 | [[package]] 984 | name = "lz4" 985 | version = "1.28.1" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" 988 | dependencies = [ 989 | "lz4-sys", 990 | ] 991 | 992 | [[package]] 993 | name = "lz4-sys" 994 | version = "1.11.1+lz4-1.10.0" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" 997 | dependencies = [ 998 | "cc", 999 | "libc", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "memchr" 1004 | version = "2.7.4" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1007 | 1008 | [[package]] 1009 | name = "memmap2" 1010 | version = "0.9.5" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 1013 | dependencies = [ 1014 | "libc", 1015 | ] 1016 | 1017 | [[package]] 1018 | name = "miniz_oxide" 1019 | version = "0.8.2" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" 1022 | dependencies = [ 1023 | "adler2", 1024 | ] 1025 | 1026 | [[package]] 1027 | name = "mio" 1028 | version = "1.0.3" 1029 | source = "registry+https://github.com/rust-lang/crates.io-index" 1030 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1031 | dependencies = [ 1032 | "libc", 1033 | "log", 1034 | "wasi", 1035 | "windows-sys 0.52.0", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "multiversion" 1040 | version = "0.7.4" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "c4851161a11d3ad0bf9402d90ffc3967bf231768bfd7aeb61755ad06dbf1a142" 1043 | dependencies = [ 1044 | "multiversion-macros", 1045 | "target-features", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "multiversion-macros" 1050 | version = "0.7.4" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "79a74ddee9e0c27d2578323c13905793e91622148f138ba29738f9dddb835e90" 1053 | dependencies = [ 1054 | "proc-macro2", 1055 | "quote", 1056 | "syn 1.0.109", 1057 | "target-features", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "now" 1062 | version = "0.1.3" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "6d89e9874397a1f0a52fc1f197a8effd9735223cb2390e9dcc83ac6cd02923d0" 1065 | dependencies = [ 1066 | "chrono", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "ntapi" 1071 | version = "0.4.1" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 1074 | dependencies = [ 1075 | "winapi", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "nu-ansi-term" 1080 | version = "0.50.1" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" 1083 | dependencies = [ 1084 | "windows-sys 0.52.0", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "num-traits" 1089 | version = "0.2.19" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1092 | dependencies = [ 1093 | "autocfg", 1094 | "libm", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "object" 1099 | version = "0.36.7" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1102 | dependencies = [ 1103 | "memchr", 1104 | ] 1105 | 1106 | [[package]] 1107 | name = "once_cell" 1108 | version = "1.20.2" 1109 | source = "registry+https://github.com/rust-lang/crates.io-index" 1110 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1111 | 1112 | [[package]] 1113 | name = "parking_lot" 1114 | version = "0.12.3" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1117 | dependencies = [ 1118 | "lock_api", 1119 | "parking_lot_core", 1120 | ] 1121 | 1122 | [[package]] 1123 | name = "parking_lot_core" 1124 | version = "0.9.10" 1125 | source = "registry+https://github.com/rust-lang/crates.io-index" 1126 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1127 | dependencies = [ 1128 | "cfg-if", 1129 | "libc", 1130 | "redox_syscall", 1131 | "smallvec", 1132 | "windows-targets", 1133 | ] 1134 | 1135 | [[package]] 1136 | name = "parse-zoneinfo" 1137 | version = "0.3.1" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" 1140 | dependencies = [ 1141 | "regex", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "percent-encoding" 1146 | version = "2.3.1" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1149 | 1150 | [[package]] 1151 | name = "phf" 1152 | version = "0.11.3" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 1155 | dependencies = [ 1156 | "phf_shared", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "phf_codegen" 1161 | version = "0.11.3" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 1164 | dependencies = [ 1165 | "phf_generator", 1166 | "phf_shared", 1167 | ] 1168 | 1169 | [[package]] 1170 | name = "phf_generator" 1171 | version = "0.11.3" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 1174 | dependencies = [ 1175 | "phf_shared", 1176 | "rand", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "phf_shared" 1181 | version = "0.11.3" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 1184 | dependencies = [ 1185 | "siphasher", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "pin-project-lite" 1190 | version = "0.2.16" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1193 | 1194 | [[package]] 1195 | name = "pin-utils" 1196 | version = "0.1.0" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1199 | 1200 | [[package]] 1201 | name = "pkg-config" 1202 | version = "0.3.31" 1203 | source = "registry+https://github.com/rust-lang/crates.io-index" 1204 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1205 | 1206 | [[package]] 1207 | name = "planus" 1208 | version = "0.3.1" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "fc1691dd09e82f428ce8d6310bd6d5da2557c82ff17694d2a32cad7242aea89f" 1211 | dependencies = [ 1212 | "array-init-cursor", 1213 | ] 1214 | 1215 | [[package]] 1216 | name = "polars" 1217 | version = "0.45.1" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "0c0af18ae021b0396c42f39396146332957ebc4d4d25d931b4fe73509948f348" 1220 | dependencies = [ 1221 | "getrandom", 1222 | "polars-arrow", 1223 | "polars-core", 1224 | "polars-error", 1225 | "polars-io", 1226 | "polars-lazy", 1227 | "polars-ops", 1228 | "polars-parquet", 1229 | "polars-plan", 1230 | "polars-sql", 1231 | "polars-time", 1232 | "polars-utils", 1233 | "version_check", 1234 | ] 1235 | 1236 | [[package]] 1237 | name = "polars-arrow" 1238 | version = "0.45.1" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "d1fd3c64d50b7f5f328e1566cab9979d4bc1ba2ff22114b301ed2ee0e518dbca" 1241 | dependencies = [ 1242 | "ahash", 1243 | "atoi", 1244 | "bytemuck", 1245 | "chrono", 1246 | "chrono-tz", 1247 | "dyn-clone", 1248 | "either", 1249 | "ethnum", 1250 | "getrandom", 1251 | "hashbrown 0.15.2", 1252 | "itoap", 1253 | "lz4", 1254 | "multiversion", 1255 | "num-traits", 1256 | "parking_lot", 1257 | "polars-arrow-format", 1258 | "polars-error", 1259 | "polars-schema", 1260 | "polars-utils", 1261 | "serde", 1262 | "simdutf8", 1263 | "streaming-iterator", 1264 | "strength_reduce", 1265 | "strum_macros", 1266 | "version_check", 1267 | "zstd", 1268 | ] 1269 | 1270 | [[package]] 1271 | name = "polars-arrow-format" 1272 | version = "0.1.0" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "19b0ef2474af9396b19025b189d96e992311e6a47f90c53cd998b36c4c64b84c" 1275 | dependencies = [ 1276 | "planus", 1277 | "serde", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "polars-cli" 1282 | version = "0.9.0" 1283 | dependencies = [ 1284 | "atty", 1285 | "ciborium", 1286 | "clap", 1287 | "jemallocator", 1288 | "nu-ansi-term", 1289 | "once_cell", 1290 | "polars", 1291 | "reedline", 1292 | "serde", 1293 | "sqlparser 0.53.0", 1294 | "tmp_env", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "polars-compute" 1299 | version = "0.45.1" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "e60822c245a870113df5a88fb184039501eda0a56bcd0c3f866406ff659df340" 1302 | dependencies = [ 1303 | "atoi_simd", 1304 | "bytemuck", 1305 | "chrono", 1306 | "either", 1307 | "fast-float2", 1308 | "itoa", 1309 | "itoap", 1310 | "num-traits", 1311 | "polars-arrow", 1312 | "polars-error", 1313 | "polars-utils", 1314 | "ryu", 1315 | "strength_reduce", 1316 | "version_check", 1317 | ] 1318 | 1319 | [[package]] 1320 | name = "polars-core" 1321 | version = "0.45.1" 1322 | source = "registry+https://github.com/rust-lang/crates.io-index" 1323 | checksum = "4794a9e38ef2faf7e47a6f736c7f156c6fbb66cd529f82593b2d48348e422c8d" 1324 | dependencies = [ 1325 | "ahash", 1326 | "bitflags", 1327 | "bytemuck", 1328 | "chrono", 1329 | "chrono-tz", 1330 | "comfy-table", 1331 | "either", 1332 | "hashbrown 0.14.5", 1333 | "hashbrown 0.15.2", 1334 | "indexmap", 1335 | "itoa", 1336 | "num-traits", 1337 | "once_cell", 1338 | "polars-arrow", 1339 | "polars-compute", 1340 | "polars-error", 1341 | "polars-row", 1342 | "polars-schema", 1343 | "polars-utils", 1344 | "rand", 1345 | "rand_distr", 1346 | "rayon", 1347 | "regex", 1348 | "serde", 1349 | "strum_macros", 1350 | "thiserror 2.0.11", 1351 | "version_check", 1352 | "xxhash-rust", 1353 | ] 1354 | 1355 | [[package]] 1356 | name = "polars-error" 1357 | version = "0.45.1" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "100093a164bf6c001487ea528b7504f4be1a6881bcffe279bd6133e8f4b4e4f7" 1360 | dependencies = [ 1361 | "polars-arrow-format", 1362 | "regex", 1363 | "simdutf8", 1364 | "thiserror 2.0.11", 1365 | ] 1366 | 1367 | [[package]] 1368 | name = "polars-expr" 1369 | version = "0.45.1" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "ad56c5ea4d6e0546fbc3fa35918a537b76587600a5118770ed331136249d50d8" 1372 | dependencies = [ 1373 | "ahash", 1374 | "bitflags", 1375 | "hashbrown 0.15.2", 1376 | "num-traits", 1377 | "once_cell", 1378 | "polars-arrow", 1379 | "polars-compute", 1380 | "polars-core", 1381 | "polars-io", 1382 | "polars-ops", 1383 | "polars-plan", 1384 | "polars-row", 1385 | "polars-time", 1386 | "polars-utils", 1387 | "rand", 1388 | "rayon", 1389 | ] 1390 | 1391 | [[package]] 1392 | name = "polars-io" 1393 | version = "0.45.1" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "95d774d5971d2092f0588e89d2f0be524dff35ea368272c0810ba54a860e4411" 1396 | dependencies = [ 1397 | "ahash", 1398 | "async-trait", 1399 | "atoi_simd", 1400 | "bytes", 1401 | "chrono", 1402 | "fast-float2", 1403 | "futures", 1404 | "glob", 1405 | "hashbrown 0.15.2", 1406 | "home", 1407 | "itoa", 1408 | "memchr", 1409 | "memmap2", 1410 | "num-traits", 1411 | "once_cell", 1412 | "percent-encoding", 1413 | "polars-arrow", 1414 | "polars-core", 1415 | "polars-error", 1416 | "polars-json", 1417 | "polars-parquet", 1418 | "polars-schema", 1419 | "polars-time", 1420 | "polars-utils", 1421 | "rayon", 1422 | "regex", 1423 | "ryu", 1424 | "serde", 1425 | "simd-json", 1426 | "simdutf8", 1427 | "tokio", 1428 | "tokio-util", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "polars-json" 1433 | version = "0.45.1" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "19d97ebf73da016f4af4e5af8663523137e273e09d1a459e0cf87b5fdfd8f007" 1436 | dependencies = [ 1437 | "ahash", 1438 | "chrono", 1439 | "fallible-streaming-iterator", 1440 | "hashbrown 0.15.2", 1441 | "indexmap", 1442 | "itoa", 1443 | "num-traits", 1444 | "polars-arrow", 1445 | "polars-compute", 1446 | "polars-error", 1447 | "polars-utils", 1448 | "ryu", 1449 | "simd-json", 1450 | "streaming-iterator", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "polars-lazy" 1455 | version = "0.45.1" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "fa457bfa96f45cf14c33507eaa3ebcec6a8d52e7f7fc60cd23f338631369d417" 1458 | dependencies = [ 1459 | "ahash", 1460 | "bitflags", 1461 | "memchr", 1462 | "once_cell", 1463 | "polars-arrow", 1464 | "polars-core", 1465 | "polars-expr", 1466 | "polars-io", 1467 | "polars-json", 1468 | "polars-mem-engine", 1469 | "polars-ops", 1470 | "polars-pipe", 1471 | "polars-plan", 1472 | "polars-stream", 1473 | "polars-time", 1474 | "polars-utils", 1475 | "rayon", 1476 | "version_check", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "polars-mem-engine" 1481 | version = "0.45.1" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "f73aa56fc0a4c1e9d56b4a4485800f4780ca214030d32d0150eccc44f71d6dab" 1484 | dependencies = [ 1485 | "memmap2", 1486 | "polars-arrow", 1487 | "polars-core", 1488 | "polars-error", 1489 | "polars-expr", 1490 | "polars-io", 1491 | "polars-json", 1492 | "polars-ops", 1493 | "polars-plan", 1494 | "polars-time", 1495 | "polars-utils", 1496 | "rayon", 1497 | ] 1498 | 1499 | [[package]] 1500 | name = "polars-ops" 1501 | version = "0.45.1" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "b267480495ffe382dab63318e3c6bf4073bb82971c8b80294d079293fece458b" 1504 | dependencies = [ 1505 | "ahash", 1506 | "argminmax", 1507 | "base64", 1508 | "bytemuck", 1509 | "chrono", 1510 | "chrono-tz", 1511 | "either", 1512 | "hashbrown 0.15.2", 1513 | "hex", 1514 | "indexmap", 1515 | "jsonpath_lib_polars_vendor", 1516 | "memchr", 1517 | "num-traits", 1518 | "polars-arrow", 1519 | "polars-compute", 1520 | "polars-core", 1521 | "polars-error", 1522 | "polars-json", 1523 | "polars-schema", 1524 | "polars-utils", 1525 | "rayon", 1526 | "regex", 1527 | "regex-syntax", 1528 | "serde", 1529 | "serde_json", 1530 | "strum_macros", 1531 | "unicode-reverse", 1532 | "version_check", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "polars-parquet" 1537 | version = "0.45.1" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | checksum = "20237f232b1a74b1fae6b5c9bea8c440f2e5d3b5506601b038f0a7a34b84b710" 1540 | dependencies = [ 1541 | "ahash", 1542 | "async-stream", 1543 | "base64", 1544 | "brotli", 1545 | "bytemuck", 1546 | "ethnum", 1547 | "flate2", 1548 | "futures", 1549 | "hashbrown 0.15.2", 1550 | "lz4", 1551 | "num-traits", 1552 | "polars-arrow", 1553 | "polars-compute", 1554 | "polars-error", 1555 | "polars-parquet-format", 1556 | "polars-utils", 1557 | "serde", 1558 | "simdutf8", 1559 | "snap", 1560 | "streaming-decompression", 1561 | "zstd", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "polars-parquet-format" 1566 | version = "0.1.0" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "c025243dcfe8dbc57e94d9f82eb3bef10b565ab180d5b99bed87fd8aea319ce1" 1569 | dependencies = [ 1570 | "async-trait", 1571 | "futures", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "polars-pipe" 1576 | version = "0.45.1" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "82e3066f4fea8e55e72eba54ffe20ebdf08f63b9691aba8ea1135c3aeb9c2c7e" 1579 | dependencies = [ 1580 | "crossbeam-channel", 1581 | "crossbeam-queue", 1582 | "enum_dispatch", 1583 | "futures", 1584 | "hashbrown 0.15.2", 1585 | "num-traits", 1586 | "polars-arrow", 1587 | "polars-compute", 1588 | "polars-core", 1589 | "polars-expr", 1590 | "polars-io", 1591 | "polars-ops", 1592 | "polars-plan", 1593 | "polars-row", 1594 | "polars-utils", 1595 | "rayon", 1596 | "uuid", 1597 | "version_check", 1598 | ] 1599 | 1600 | [[package]] 1601 | name = "polars-plan" 1602 | version = "0.45.1" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "99a3832887671df1eb326df52cbfcc47789d3d58454c1084a154b48b240175e2" 1605 | dependencies = [ 1606 | "ahash", 1607 | "bitflags", 1608 | "bytemuck", 1609 | "bytes", 1610 | "chrono", 1611 | "chrono-tz", 1612 | "either", 1613 | "hashbrown 0.15.2", 1614 | "memmap2", 1615 | "num-traits", 1616 | "once_cell", 1617 | "percent-encoding", 1618 | "polars-arrow", 1619 | "polars-compute", 1620 | "polars-core", 1621 | "polars-io", 1622 | "polars-json", 1623 | "polars-ops", 1624 | "polars-parquet", 1625 | "polars-time", 1626 | "polars-utils", 1627 | "rayon", 1628 | "recursive", 1629 | "regex", 1630 | "serde", 1631 | "strum_macros", 1632 | "version_check", 1633 | ] 1634 | 1635 | [[package]] 1636 | name = "polars-row" 1637 | version = "0.45.1" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "8e36350fb8a90238e02c8ece0f0c4c24f3374197e9c08c1c22cc8b9c526e6c25" 1640 | dependencies = [ 1641 | "bitflags", 1642 | "bytemuck", 1643 | "polars-arrow", 1644 | "polars-compute", 1645 | "polars-error", 1646 | "polars-utils", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "polars-schema" 1651 | version = "0.45.1" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "8c6aa4913cffc522cea3ccbc0cafb350bec18fed0a1ef8d417ac88ea320d7749" 1654 | dependencies = [ 1655 | "indexmap", 1656 | "polars-error", 1657 | "polars-utils", 1658 | "serde", 1659 | "version_check", 1660 | ] 1661 | 1662 | [[package]] 1663 | name = "polars-sql" 1664 | version = "0.45.1" 1665 | source = "registry+https://github.com/rust-lang/crates.io-index" 1666 | checksum = "c62a2247028629b1db384437a9f2792488f0ddb539ec16fb46a5e2bceeba6dbc" 1667 | dependencies = [ 1668 | "hex", 1669 | "once_cell", 1670 | "polars-arrow", 1671 | "polars-core", 1672 | "polars-error", 1673 | "polars-lazy", 1674 | "polars-ops", 1675 | "polars-plan", 1676 | "polars-time", 1677 | "polars-utils", 1678 | "rand", 1679 | "serde", 1680 | "serde_json", 1681 | "sqlparser 0.52.0", 1682 | ] 1683 | 1684 | [[package]] 1685 | name = "polars-stream" 1686 | version = "0.45.1" 1687 | source = "registry+https://github.com/rust-lang/crates.io-index" 1688 | checksum = "b8cd9da4b063146c3ab7c08678a52eb9d466ade4f4c8617605a5a3ea063002c6" 1689 | dependencies = [ 1690 | "atomic-waker", 1691 | "crossbeam-deque", 1692 | "crossbeam-utils", 1693 | "futures", 1694 | "memmap2", 1695 | "parking_lot", 1696 | "pin-project-lite", 1697 | "polars-core", 1698 | "polars-error", 1699 | "polars-expr", 1700 | "polars-io", 1701 | "polars-mem-engine", 1702 | "polars-ops", 1703 | "polars-parquet", 1704 | "polars-plan", 1705 | "polars-utils", 1706 | "rand", 1707 | "rayon", 1708 | "recursive", 1709 | "slotmap", 1710 | "tokio", 1711 | "version_check", 1712 | ] 1713 | 1714 | [[package]] 1715 | name = "polars-time" 1716 | version = "0.45.1" 1717 | source = "registry+https://github.com/rust-lang/crates.io-index" 1718 | checksum = "12f005c3441eed1a96464305f73e197813cbae7894ff6712726a1182e31f52b4" 1719 | dependencies = [ 1720 | "atoi", 1721 | "bytemuck", 1722 | "chrono", 1723 | "chrono-tz", 1724 | "now", 1725 | "once_cell", 1726 | "polars-arrow", 1727 | "polars-compute", 1728 | "polars-core", 1729 | "polars-error", 1730 | "polars-ops", 1731 | "polars-utils", 1732 | "regex", 1733 | "serde", 1734 | "strum_macros", 1735 | ] 1736 | 1737 | [[package]] 1738 | name = "polars-utils" 1739 | version = "0.45.1" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "e0fc010eea42ad113b641aa53106e4d6e474650c73573d959a546eed0ce6d479" 1742 | dependencies = [ 1743 | "ahash", 1744 | "bytemuck", 1745 | "bytes", 1746 | "compact_str", 1747 | "hashbrown 0.15.2", 1748 | "indexmap", 1749 | "libc", 1750 | "memmap2", 1751 | "num-traits", 1752 | "once_cell", 1753 | "polars-error", 1754 | "rand", 1755 | "raw-cpuid", 1756 | "rayon", 1757 | "serde", 1758 | "stacker", 1759 | "sysinfo", 1760 | "version_check", 1761 | ] 1762 | 1763 | [[package]] 1764 | name = "ppv-lite86" 1765 | version = "0.2.20" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1768 | dependencies = [ 1769 | "zerocopy", 1770 | ] 1771 | 1772 | [[package]] 1773 | name = "proc-macro2" 1774 | version = "1.0.93" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" 1777 | dependencies = [ 1778 | "unicode-ident", 1779 | ] 1780 | 1781 | [[package]] 1782 | name = "psm" 1783 | version = "0.1.24" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" 1786 | dependencies = [ 1787 | "cc", 1788 | ] 1789 | 1790 | [[package]] 1791 | name = "quote" 1792 | version = "1.0.38" 1793 | source = "registry+https://github.com/rust-lang/crates.io-index" 1794 | checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" 1795 | dependencies = [ 1796 | "proc-macro2", 1797 | ] 1798 | 1799 | [[package]] 1800 | name = "rand" 1801 | version = "0.8.5" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1804 | dependencies = [ 1805 | "libc", 1806 | "rand_chacha", 1807 | "rand_core", 1808 | ] 1809 | 1810 | [[package]] 1811 | name = "rand_chacha" 1812 | version = "0.3.1" 1813 | source = "registry+https://github.com/rust-lang/crates.io-index" 1814 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1815 | dependencies = [ 1816 | "ppv-lite86", 1817 | "rand_core", 1818 | ] 1819 | 1820 | [[package]] 1821 | name = "rand_core" 1822 | version = "0.6.4" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1825 | dependencies = [ 1826 | "getrandom", 1827 | ] 1828 | 1829 | [[package]] 1830 | name = "rand_distr" 1831 | version = "0.4.3" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" 1834 | dependencies = [ 1835 | "num-traits", 1836 | "rand", 1837 | ] 1838 | 1839 | [[package]] 1840 | name = "raw-cpuid" 1841 | version = "11.2.0" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" 1844 | dependencies = [ 1845 | "bitflags", 1846 | ] 1847 | 1848 | [[package]] 1849 | name = "rayon" 1850 | version = "1.10.0" 1851 | source = "registry+https://github.com/rust-lang/crates.io-index" 1852 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1853 | dependencies = [ 1854 | "either", 1855 | "rayon-core", 1856 | ] 1857 | 1858 | [[package]] 1859 | name = "rayon-core" 1860 | version = "1.12.1" 1861 | source = "registry+https://github.com/rust-lang/crates.io-index" 1862 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1863 | dependencies = [ 1864 | "crossbeam-deque", 1865 | "crossbeam-utils", 1866 | ] 1867 | 1868 | [[package]] 1869 | name = "recursive" 1870 | version = "0.1.1" 1871 | source = "registry+https://github.com/rust-lang/crates.io-index" 1872 | checksum = "0786a43debb760f491b1bc0269fe5e84155353c67482b9e60d0cfb596054b43e" 1873 | dependencies = [ 1874 | "recursive-proc-macro-impl", 1875 | "stacker", 1876 | ] 1877 | 1878 | [[package]] 1879 | name = "recursive-proc-macro-impl" 1880 | version = "0.1.1" 1881 | source = "registry+https://github.com/rust-lang/crates.io-index" 1882 | checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" 1883 | dependencies = [ 1884 | "quote", 1885 | "syn 2.0.96", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "redox_syscall" 1890 | version = "0.5.8" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1893 | dependencies = [ 1894 | "bitflags", 1895 | ] 1896 | 1897 | [[package]] 1898 | name = "reedline" 1899 | version = "0.38.0" 1900 | source = "registry+https://github.com/rust-lang/crates.io-index" 1901 | checksum = "9bfa8cb0ad84c396c936d8abb814703d7042a433d2da75a0c7060cbdc89109f3" 1902 | dependencies = [ 1903 | "chrono", 1904 | "crossterm", 1905 | "fd-lock", 1906 | "itertools", 1907 | "nu-ansi-term", 1908 | "serde", 1909 | "strip-ansi-escapes", 1910 | "strum", 1911 | "strum_macros", 1912 | "thiserror 1.0.69", 1913 | "unicode-segmentation", 1914 | "unicode-width 0.1.14", 1915 | ] 1916 | 1917 | [[package]] 1918 | name = "ref-cast" 1919 | version = "1.0.23" 1920 | source = "registry+https://github.com/rust-lang/crates.io-index" 1921 | checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" 1922 | dependencies = [ 1923 | "ref-cast-impl", 1924 | ] 1925 | 1926 | [[package]] 1927 | name = "ref-cast-impl" 1928 | version = "1.0.23" 1929 | source = "registry+https://github.com/rust-lang/crates.io-index" 1930 | checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" 1931 | dependencies = [ 1932 | "proc-macro2", 1933 | "quote", 1934 | "syn 2.0.96", 1935 | ] 1936 | 1937 | [[package]] 1938 | name = "regex" 1939 | version = "1.11.1" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1942 | dependencies = [ 1943 | "aho-corasick", 1944 | "memchr", 1945 | "regex-automata", 1946 | "regex-syntax", 1947 | ] 1948 | 1949 | [[package]] 1950 | name = "regex-automata" 1951 | version = "0.4.9" 1952 | source = "registry+https://github.com/rust-lang/crates.io-index" 1953 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1954 | dependencies = [ 1955 | "aho-corasick", 1956 | "memchr", 1957 | "regex-syntax", 1958 | ] 1959 | 1960 | [[package]] 1961 | name = "regex-syntax" 1962 | version = "0.8.5" 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" 1964 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1965 | 1966 | [[package]] 1967 | name = "rustc-demangle" 1968 | version = "0.1.24" 1969 | source = "registry+https://github.com/rust-lang/crates.io-index" 1970 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1971 | 1972 | [[package]] 1973 | name = "rustix" 1974 | version = "0.38.43" 1975 | source = "registry+https://github.com/rust-lang/crates.io-index" 1976 | checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" 1977 | dependencies = [ 1978 | "bitflags", 1979 | "errno", 1980 | "libc", 1981 | "linux-raw-sys", 1982 | "windows-sys 0.59.0", 1983 | ] 1984 | 1985 | [[package]] 1986 | name = "rustversion" 1987 | version = "1.0.19" 1988 | source = "registry+https://github.com/rust-lang/crates.io-index" 1989 | checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" 1990 | 1991 | [[package]] 1992 | name = "ryu" 1993 | version = "1.0.18" 1994 | source = "registry+https://github.com/rust-lang/crates.io-index" 1995 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1996 | 1997 | [[package]] 1998 | name = "scopeguard" 1999 | version = "1.2.0" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2002 | 2003 | [[package]] 2004 | name = "serde" 2005 | version = "1.0.217" 2006 | source = "registry+https://github.com/rust-lang/crates.io-index" 2007 | checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" 2008 | dependencies = [ 2009 | "serde_derive", 2010 | ] 2011 | 2012 | [[package]] 2013 | name = "serde_derive" 2014 | version = "1.0.217" 2015 | source = "registry+https://github.com/rust-lang/crates.io-index" 2016 | checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" 2017 | dependencies = [ 2018 | "proc-macro2", 2019 | "quote", 2020 | "syn 2.0.96", 2021 | ] 2022 | 2023 | [[package]] 2024 | name = "serde_json" 2025 | version = "1.0.135" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" 2028 | dependencies = [ 2029 | "indexmap", 2030 | "itoa", 2031 | "memchr", 2032 | "ryu", 2033 | "serde", 2034 | ] 2035 | 2036 | [[package]] 2037 | name = "shlex" 2038 | version = "1.3.0" 2039 | source = "registry+https://github.com/rust-lang/crates.io-index" 2040 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2041 | 2042 | [[package]] 2043 | name = "signal-hook" 2044 | version = "0.3.17" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 2047 | dependencies = [ 2048 | "libc", 2049 | "signal-hook-registry", 2050 | ] 2051 | 2052 | [[package]] 2053 | name = "signal-hook-mio" 2054 | version = "0.2.4" 2055 | source = "registry+https://github.com/rust-lang/crates.io-index" 2056 | checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" 2057 | dependencies = [ 2058 | "libc", 2059 | "mio", 2060 | "signal-hook", 2061 | ] 2062 | 2063 | [[package]] 2064 | name = "signal-hook-registry" 2065 | version = "1.4.2" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2068 | dependencies = [ 2069 | "libc", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "simd-json" 2074 | version = "0.14.3" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "aa2bcf6c6e164e81bc7a5d49fc6988b3d515d9e8c07457d7b74ffb9324b9cd40" 2077 | dependencies = [ 2078 | "ahash", 2079 | "getrandom", 2080 | "halfbrown", 2081 | "once_cell", 2082 | "ref-cast", 2083 | "serde", 2084 | "serde_json", 2085 | "simdutf8", 2086 | "value-trait", 2087 | ] 2088 | 2089 | [[package]] 2090 | name = "simdutf8" 2091 | version = "0.1.5" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 2094 | 2095 | [[package]] 2096 | name = "siphasher" 2097 | version = "1.0.1" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 2100 | 2101 | [[package]] 2102 | name = "slab" 2103 | version = "0.4.9" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2106 | dependencies = [ 2107 | "autocfg", 2108 | ] 2109 | 2110 | [[package]] 2111 | name = "slotmap" 2112 | version = "1.0.7" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 2115 | dependencies = [ 2116 | "version_check", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "smallvec" 2121 | version = "1.13.2" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2124 | 2125 | [[package]] 2126 | name = "snap" 2127 | version = "1.1.1" 2128 | source = "registry+https://github.com/rust-lang/crates.io-index" 2129 | checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" 2130 | 2131 | [[package]] 2132 | name = "socket2" 2133 | version = "0.5.8" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 2136 | dependencies = [ 2137 | "libc", 2138 | "windows-sys 0.52.0", 2139 | ] 2140 | 2141 | [[package]] 2142 | name = "sqlparser" 2143 | version = "0.52.0" 2144 | source = "registry+https://github.com/rust-lang/crates.io-index" 2145 | checksum = "9a875d8cd437cc8a97e9aeaeea352ec9a19aea99c23e9effb17757291de80b08" 2146 | dependencies = [ 2147 | "log", 2148 | ] 2149 | 2150 | [[package]] 2151 | name = "sqlparser" 2152 | version = "0.53.0" 2153 | source = "registry+https://github.com/rust-lang/crates.io-index" 2154 | checksum = "05a528114c392209b3264855ad491fcce534b94a38771b0a0b97a79379275ce8" 2155 | dependencies = [ 2156 | "log", 2157 | ] 2158 | 2159 | [[package]] 2160 | name = "stacker" 2161 | version = "0.1.17" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" 2164 | dependencies = [ 2165 | "cc", 2166 | "cfg-if", 2167 | "libc", 2168 | "psm", 2169 | "windows-sys 0.59.0", 2170 | ] 2171 | 2172 | [[package]] 2173 | name = "static_assertions" 2174 | version = "1.1.0" 2175 | source = "registry+https://github.com/rust-lang/crates.io-index" 2176 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2177 | 2178 | [[package]] 2179 | name = "streaming-decompression" 2180 | version = "0.1.2" 2181 | source = "registry+https://github.com/rust-lang/crates.io-index" 2182 | checksum = "bf6cc3b19bfb128a8ad11026086e31d3ce9ad23f8ea37354b31383a187c44cf3" 2183 | dependencies = [ 2184 | "fallible-streaming-iterator", 2185 | ] 2186 | 2187 | [[package]] 2188 | name = "streaming-iterator" 2189 | version = "0.1.9" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" 2192 | 2193 | [[package]] 2194 | name = "strength_reduce" 2195 | version = "0.2.4" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" 2198 | 2199 | [[package]] 2200 | name = "strip-ansi-escapes" 2201 | version = "0.2.0" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa" 2204 | dependencies = [ 2205 | "vte", 2206 | ] 2207 | 2208 | [[package]] 2209 | name = "strsim" 2210 | version = "0.11.1" 2211 | source = "registry+https://github.com/rust-lang/crates.io-index" 2212 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2213 | 2214 | [[package]] 2215 | name = "strum" 2216 | version = "0.26.3" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2219 | 2220 | [[package]] 2221 | name = "strum_macros" 2222 | version = "0.26.4" 2223 | source = "registry+https://github.com/rust-lang/crates.io-index" 2224 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2225 | dependencies = [ 2226 | "heck", 2227 | "proc-macro2", 2228 | "quote", 2229 | "rustversion", 2230 | "syn 2.0.96", 2231 | ] 2232 | 2233 | [[package]] 2234 | name = "syn" 2235 | version = "1.0.109" 2236 | source = "registry+https://github.com/rust-lang/crates.io-index" 2237 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2238 | dependencies = [ 2239 | "proc-macro2", 2240 | "quote", 2241 | "unicode-ident", 2242 | ] 2243 | 2244 | [[package]] 2245 | name = "syn" 2246 | version = "2.0.96" 2247 | source = "registry+https://github.com/rust-lang/crates.io-index" 2248 | checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" 2249 | dependencies = [ 2250 | "proc-macro2", 2251 | "quote", 2252 | "unicode-ident", 2253 | ] 2254 | 2255 | [[package]] 2256 | name = "sysinfo" 2257 | version = "0.32.1" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" 2260 | dependencies = [ 2261 | "core-foundation-sys", 2262 | "libc", 2263 | "memchr", 2264 | "ntapi", 2265 | "windows", 2266 | ] 2267 | 2268 | [[package]] 2269 | name = "target-features" 2270 | version = "0.1.6" 2271 | source = "registry+https://github.com/rust-lang/crates.io-index" 2272 | checksum = "c1bbb9f3c5c463a01705937a24fdabc5047929ac764b2d5b9cf681c1f5041ed5" 2273 | 2274 | [[package]] 2275 | name = "thiserror" 2276 | version = "1.0.69" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2279 | dependencies = [ 2280 | "thiserror-impl 1.0.69", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "thiserror" 2285 | version = "2.0.11" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" 2288 | dependencies = [ 2289 | "thiserror-impl 2.0.11", 2290 | ] 2291 | 2292 | [[package]] 2293 | name = "thiserror-impl" 2294 | version = "1.0.69" 2295 | source = "registry+https://github.com/rust-lang/crates.io-index" 2296 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2297 | dependencies = [ 2298 | "proc-macro2", 2299 | "quote", 2300 | "syn 2.0.96", 2301 | ] 2302 | 2303 | [[package]] 2304 | name = "thiserror-impl" 2305 | version = "2.0.11" 2306 | source = "registry+https://github.com/rust-lang/crates.io-index" 2307 | checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" 2308 | dependencies = [ 2309 | "proc-macro2", 2310 | "quote", 2311 | "syn 2.0.96", 2312 | ] 2313 | 2314 | [[package]] 2315 | name = "tmp_env" 2316 | version = "0.1.1" 2317 | source = "registry+https://github.com/rust-lang/crates.io-index" 2318 | checksum = "a56eb9e5a28c3c4f0a6aa8ea70a8ad2d6c53e4bf364571ce78f57945b6766843" 2319 | dependencies = [ 2320 | "rand", 2321 | ] 2322 | 2323 | [[package]] 2324 | name = "tokio" 2325 | version = "1.43.0" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" 2328 | dependencies = [ 2329 | "backtrace", 2330 | "bytes", 2331 | "libc", 2332 | "mio", 2333 | "pin-project-lite", 2334 | "socket2", 2335 | "windows-sys 0.52.0", 2336 | ] 2337 | 2338 | [[package]] 2339 | name = "tokio-util" 2340 | version = "0.7.13" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 2343 | dependencies = [ 2344 | "bytes", 2345 | "futures-core", 2346 | "futures-sink", 2347 | "pin-project-lite", 2348 | "tokio", 2349 | ] 2350 | 2351 | [[package]] 2352 | name = "unicode-ident" 2353 | version = "1.0.14" 2354 | source = "registry+https://github.com/rust-lang/crates.io-index" 2355 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 2356 | 2357 | [[package]] 2358 | name = "unicode-reverse" 2359 | version = "1.0.9" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "4b6f4888ebc23094adfb574fdca9fdc891826287a6397d2cd28802ffd6f20c76" 2362 | dependencies = [ 2363 | "unicode-segmentation", 2364 | ] 2365 | 2366 | [[package]] 2367 | name = "unicode-segmentation" 2368 | version = "1.12.0" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 2371 | 2372 | [[package]] 2373 | name = "unicode-width" 2374 | version = "0.1.14" 2375 | source = "registry+https://github.com/rust-lang/crates.io-index" 2376 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 2377 | 2378 | [[package]] 2379 | name = "unicode-width" 2380 | version = "0.2.0" 2381 | source = "registry+https://github.com/rust-lang/crates.io-index" 2382 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 2383 | 2384 | [[package]] 2385 | name = "utf8parse" 2386 | version = "0.2.2" 2387 | source = "registry+https://github.com/rust-lang/crates.io-index" 2388 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2389 | 2390 | [[package]] 2391 | name = "uuid" 2392 | version = "1.11.1" 2393 | source = "registry+https://github.com/rust-lang/crates.io-index" 2394 | checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" 2395 | dependencies = [ 2396 | "getrandom", 2397 | ] 2398 | 2399 | [[package]] 2400 | name = "value-trait" 2401 | version = "0.10.1" 2402 | source = "registry+https://github.com/rust-lang/crates.io-index" 2403 | checksum = "9170e001f458781e92711d2ad666110f153e4e50bfd5cbd02db6547625714187" 2404 | dependencies = [ 2405 | "float-cmp", 2406 | "halfbrown", 2407 | "itoa", 2408 | "ryu", 2409 | ] 2410 | 2411 | [[package]] 2412 | name = "version_check" 2413 | version = "0.9.5" 2414 | source = "registry+https://github.com/rust-lang/crates.io-index" 2415 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2416 | 2417 | [[package]] 2418 | name = "vte" 2419 | version = "0.11.1" 2420 | source = "registry+https://github.com/rust-lang/crates.io-index" 2421 | checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" 2422 | dependencies = [ 2423 | "utf8parse", 2424 | "vte_generate_state_changes", 2425 | ] 2426 | 2427 | [[package]] 2428 | name = "vte_generate_state_changes" 2429 | version = "0.1.2" 2430 | source = "registry+https://github.com/rust-lang/crates.io-index" 2431 | checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" 2432 | dependencies = [ 2433 | "proc-macro2", 2434 | "quote", 2435 | ] 2436 | 2437 | [[package]] 2438 | name = "wasi" 2439 | version = "0.11.0+wasi-snapshot-preview1" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2442 | 2443 | [[package]] 2444 | name = "wasm-bindgen" 2445 | version = "0.2.99" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" 2448 | dependencies = [ 2449 | "cfg-if", 2450 | "once_cell", 2451 | "wasm-bindgen-macro", 2452 | ] 2453 | 2454 | [[package]] 2455 | name = "wasm-bindgen-backend" 2456 | version = "0.2.99" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" 2459 | dependencies = [ 2460 | "bumpalo", 2461 | "log", 2462 | "proc-macro2", 2463 | "quote", 2464 | "syn 2.0.96", 2465 | "wasm-bindgen-shared", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "wasm-bindgen-macro" 2470 | version = "0.2.99" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" 2473 | dependencies = [ 2474 | "quote", 2475 | "wasm-bindgen-macro-support", 2476 | ] 2477 | 2478 | [[package]] 2479 | name = "wasm-bindgen-macro-support" 2480 | version = "0.2.99" 2481 | source = "registry+https://github.com/rust-lang/crates.io-index" 2482 | checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" 2483 | dependencies = [ 2484 | "proc-macro2", 2485 | "quote", 2486 | "syn 2.0.96", 2487 | "wasm-bindgen-backend", 2488 | "wasm-bindgen-shared", 2489 | ] 2490 | 2491 | [[package]] 2492 | name = "wasm-bindgen-shared" 2493 | version = "0.2.99" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" 2496 | 2497 | [[package]] 2498 | name = "winapi" 2499 | version = "0.3.9" 2500 | source = "registry+https://github.com/rust-lang/crates.io-index" 2501 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2502 | dependencies = [ 2503 | "winapi-i686-pc-windows-gnu", 2504 | "winapi-x86_64-pc-windows-gnu", 2505 | ] 2506 | 2507 | [[package]] 2508 | name = "winapi-i686-pc-windows-gnu" 2509 | version = "0.4.0" 2510 | source = "registry+https://github.com/rust-lang/crates.io-index" 2511 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2512 | 2513 | [[package]] 2514 | name = "winapi-x86_64-pc-windows-gnu" 2515 | version = "0.4.0" 2516 | source = "registry+https://github.com/rust-lang/crates.io-index" 2517 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2518 | 2519 | [[package]] 2520 | name = "windows" 2521 | version = "0.57.0" 2522 | source = "registry+https://github.com/rust-lang/crates.io-index" 2523 | checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" 2524 | dependencies = [ 2525 | "windows-core 0.57.0", 2526 | "windows-targets", 2527 | ] 2528 | 2529 | [[package]] 2530 | name = "windows-core" 2531 | version = "0.52.0" 2532 | source = "registry+https://github.com/rust-lang/crates.io-index" 2533 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2534 | dependencies = [ 2535 | "windows-targets", 2536 | ] 2537 | 2538 | [[package]] 2539 | name = "windows-core" 2540 | version = "0.57.0" 2541 | source = "registry+https://github.com/rust-lang/crates.io-index" 2542 | checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" 2543 | dependencies = [ 2544 | "windows-implement", 2545 | "windows-interface", 2546 | "windows-result", 2547 | "windows-targets", 2548 | ] 2549 | 2550 | [[package]] 2551 | name = "windows-implement" 2552 | version = "0.57.0" 2553 | source = "registry+https://github.com/rust-lang/crates.io-index" 2554 | checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" 2555 | dependencies = [ 2556 | "proc-macro2", 2557 | "quote", 2558 | "syn 2.0.96", 2559 | ] 2560 | 2561 | [[package]] 2562 | name = "windows-interface" 2563 | version = "0.57.0" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" 2566 | dependencies = [ 2567 | "proc-macro2", 2568 | "quote", 2569 | "syn 2.0.96", 2570 | ] 2571 | 2572 | [[package]] 2573 | name = "windows-result" 2574 | version = "0.1.2" 2575 | source = "registry+https://github.com/rust-lang/crates.io-index" 2576 | checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" 2577 | dependencies = [ 2578 | "windows-targets", 2579 | ] 2580 | 2581 | [[package]] 2582 | name = "windows-sys" 2583 | version = "0.52.0" 2584 | source = "registry+https://github.com/rust-lang/crates.io-index" 2585 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2586 | dependencies = [ 2587 | "windows-targets", 2588 | ] 2589 | 2590 | [[package]] 2591 | name = "windows-sys" 2592 | version = "0.59.0" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2595 | dependencies = [ 2596 | "windows-targets", 2597 | ] 2598 | 2599 | [[package]] 2600 | name = "windows-targets" 2601 | version = "0.52.6" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2604 | dependencies = [ 2605 | "windows_aarch64_gnullvm", 2606 | "windows_aarch64_msvc", 2607 | "windows_i686_gnu", 2608 | "windows_i686_gnullvm", 2609 | "windows_i686_msvc", 2610 | "windows_x86_64_gnu", 2611 | "windows_x86_64_gnullvm", 2612 | "windows_x86_64_msvc", 2613 | ] 2614 | 2615 | [[package]] 2616 | name = "windows_aarch64_gnullvm" 2617 | version = "0.52.6" 2618 | source = "registry+https://github.com/rust-lang/crates.io-index" 2619 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2620 | 2621 | [[package]] 2622 | name = "windows_aarch64_msvc" 2623 | version = "0.52.6" 2624 | source = "registry+https://github.com/rust-lang/crates.io-index" 2625 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2626 | 2627 | [[package]] 2628 | name = "windows_i686_gnu" 2629 | version = "0.52.6" 2630 | source = "registry+https://github.com/rust-lang/crates.io-index" 2631 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2632 | 2633 | [[package]] 2634 | name = "windows_i686_gnullvm" 2635 | version = "0.52.6" 2636 | source = "registry+https://github.com/rust-lang/crates.io-index" 2637 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2638 | 2639 | [[package]] 2640 | name = "windows_i686_msvc" 2641 | version = "0.52.6" 2642 | source = "registry+https://github.com/rust-lang/crates.io-index" 2643 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2644 | 2645 | [[package]] 2646 | name = "windows_x86_64_gnu" 2647 | version = "0.52.6" 2648 | source = "registry+https://github.com/rust-lang/crates.io-index" 2649 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2650 | 2651 | [[package]] 2652 | name = "windows_x86_64_gnullvm" 2653 | version = "0.52.6" 2654 | source = "registry+https://github.com/rust-lang/crates.io-index" 2655 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2656 | 2657 | [[package]] 2658 | name = "windows_x86_64_msvc" 2659 | version = "0.52.6" 2660 | source = "registry+https://github.com/rust-lang/crates.io-index" 2661 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2662 | 2663 | [[package]] 2664 | name = "xxhash-rust" 2665 | version = "0.8.15" 2666 | source = "registry+https://github.com/rust-lang/crates.io-index" 2667 | checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" 2668 | 2669 | [[package]] 2670 | name = "zerocopy" 2671 | version = "0.7.35" 2672 | source = "registry+https://github.com/rust-lang/crates.io-index" 2673 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2674 | dependencies = [ 2675 | "byteorder", 2676 | "zerocopy-derive", 2677 | ] 2678 | 2679 | [[package]] 2680 | name = "zerocopy-derive" 2681 | version = "0.7.35" 2682 | source = "registry+https://github.com/rust-lang/crates.io-index" 2683 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2684 | dependencies = [ 2685 | "proc-macro2", 2686 | "quote", 2687 | "syn 2.0.96", 2688 | ] 2689 | 2690 | [[package]] 2691 | name = "zstd" 2692 | version = "0.13.2" 2693 | source = "registry+https://github.com/rust-lang/crates.io-index" 2694 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 2695 | dependencies = [ 2696 | "zstd-safe", 2697 | ] 2698 | 2699 | [[package]] 2700 | name = "zstd-safe" 2701 | version = "7.2.1" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" 2704 | dependencies = [ 2705 | "zstd-sys", 2706 | ] 2707 | 2708 | [[package]] 2709 | name = "zstd-sys" 2710 | version = "2.0.13+zstd.1.5.6" 2711 | source = "registry+https://github.com/rust-lang/crates.io-index" 2712 | checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" 2713 | dependencies = [ 2714 | "cc", 2715 | "pkg-config", 2716 | ] 2717 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "polars-cli" 3 | version = "0.9.0" 4 | edition = "2021" 5 | license = "MIT" 6 | repository = "https://github.com/pola-rs/polars-cli" 7 | description = "CLI interface for running SQL queries with Polars as backend" 8 | 9 | [[bin]] 10 | name = "polars" 11 | path = "src/main.rs" 12 | 13 | [dependencies] 14 | atty = { version = "0.2" } 15 | ciborium = { version = "0.2" } 16 | clap = { version = "4", features = ["derive", "cargo"] } 17 | nu-ansi-term = { version = "0.50", optional = true } 18 | once_cell = { version = "1" } 19 | reedline = { version = "0.38" } 20 | serde = { version = "1", features = ["derive"] } 21 | sqlparser = { version = "0.53" } 22 | tmp_env = { version = "0.1" } 23 | 24 | [dependencies.polars] 25 | version = "0.45" 26 | features = ["lazy", "sql", "dtype-full", "serde-lazy"] 27 | 28 | [target.'cfg(target_os = "linux")'.dependencies] 29 | jemallocator = { version = "0.5", features = ["disable_initial_exec_tls"] } 30 | 31 | [features] 32 | default = ["highlight", "parquet", "json", "ipc"] 33 | 34 | highlight = ["nu-ansi-term"] 35 | ipc = ["polars/ipc"] 36 | json = ["polars/json"] 37 | parquet = ["polars/parquet"] 38 | 39 | [profile.release] 40 | strip = true 41 | lto = true 42 | panic = "abort" 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Ritchie Vink 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Polars CLI 2 | 3 | [![Crates.io](https://img.shields.io/crates/v/polars-cli)](https://crates.io/crates/polars-cli) 4 | [![PyPI](https://img.shields.io/pypi/v/polars-cli)](https://pypi.org/project/polars-cli/) 5 | 6 | The Polars command line interface provides a convenient way to execute SQL commands using Polars as a backend. 7 | 8 | ## Installation 9 | 10 | The recommended way to install the Polars CLI is by using [pip](https://pip.pypa.io/): 11 | 12 | ```bash 13 | pip install polars-cli 14 | ``` 15 | 16 | This will install a pre-compiled binary and make it available on your path under `polars`. 17 | If you do not have Python available, you can download a suitable binary from the most recent [GitHub release](https://github.com/pola-rs/polars-cli/releases/latest/). 18 | 19 | Alternatively, you can install the Polars CLI using [cargo](https://doc.rust-lang.org/cargo/), which will compile the code from scratch: 20 | 21 | ```bash 22 | cargo install --locked polars-cli 23 | ``` 24 | 25 | ## Usage 26 | 27 | Running `polars` without any arguments will start an interactive shell in which you can run SQL commands. 28 | 29 | ```shell 30 | $ polars 31 | Polars CLI version 0.4.0 32 | Type .help for help. 33 | 34 | >> select * FROM read_csv('examples/datasets/foods.csv'); 35 | ┌────────────┬──────────┬────────┬──────────┐ 36 | │ category ┆ calories ┆ fats_g ┆ sugars_g │ 37 | │ --- ┆ --- ┆ --- ┆ --- │ 38 | │ str ┆ i64 ┆ f64 ┆ i64 │ 39 | ╞════════════╪══════════╪════════╪══════════╡ 40 | │ vegetables ┆ 45 ┆ 0.5 ┆ 2 │ 41 | │ seafood ┆ 150 ┆ 5.0 ┆ 0 │ 42 | │ meat ┆ 100 ┆ 5.0 ┆ 0 │ 43 | │ fruit ┆ 60 ┆ 0.0 ┆ 11 │ 44 | │ … ┆ … ┆ … ┆ … │ 45 | │ seafood ┆ 200 ┆ 10.0 ┆ 0 │ 46 | │ seafood ┆ 200 ┆ 7.0 ┆ 2 │ 47 | │ fruit ┆ 60 ┆ 0.0 ┆ 11 │ 48 | │ meat ┆ 110 ┆ 7.0 ┆ 0 │ 49 | └────────────┴──────────┴────────┴──────────┘ 50 | ``` 51 | 52 | Alternatively, SQL commands can be piped directly into the Polars CLI. 53 | 54 | ```bash 55 | $ echo "SELECT category FROM read_csv('examples/datasets/foods.csv')" | polars 56 | ┌────────────┐ 57 | │ category │ 58 | │ --- │ 59 | │ str │ 60 | ╞════════════╡ 61 | │ vegetables │ 62 | │ seafood │ 63 | │ meat │ 64 | │ fruit │ 65 | │ … │ 66 | │ seafood │ 67 | │ seafood │ 68 | │ fruit │ 69 | │ meat │ 70 | └────────────┘ 71 | ``` 72 | 73 | ## Features 74 | 75 | When compiling the Polars CLI from source, the following features can be enabled: 76 | 77 | | Feature | Description | 78 | | --------- | --------------------------------------------------------- | 79 | | default | The default feature set that includes all other features. | 80 | | highlight | Provides syntax highlighting | 81 | | parquet | Enables reading and writing of Apache Parquet files. | 82 | | json | Enables reading and writing of JSON files. | 83 | | ipc | Enables reading and writing of IPC/Apache Arrow files | 84 | -------------------------------------------------------------------------------- /dprint.json: -------------------------------------------------------------------------------- 1 | { 2 | "includes": [ 3 | "**/*.{md,toml}" 4 | ], 5 | "excludes": [ 6 | "./target" 7 | ], 8 | "plugins": [ 9 | "https://plugins.dprint.dev/markdown-0.15.2.wasm", 10 | "https://plugins.dprint.dev/toml-0.5.4.wasm" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /examples/datasets/foods.csv: -------------------------------------------------------------------------------- 1 | category,calories,fats_g,sugars_g 2 | vegetables,45,0.5,2 3 | seafood,150,5,0 4 | meat,100,5,0 5 | fruit,60,0,11 6 | seafood,140,5,1 7 | meat,120,10,1 8 | vegetables,20,0,2 9 | fruit,30,0,5 10 | seafood,130,5,0 11 | fruit,50,4.5,0 12 | meat,110,7,0 13 | vegetables,25,0,2 14 | fruit,30,0,3 15 | vegetables,22,0,3 16 | vegetables,25,0,4 17 | seafood,100,5,0 18 | seafood,200,10,0 19 | seafood,200,7,2 20 | fruit,60,0,11 21 | meat,110,7,0 22 | vegetables,25,0,3 23 | seafood,200,7,2 24 | seafood,130,1.5,0 25 | fruit,130,0,25 26 | meat,100,7,0 27 | vegetables,30,0,5 28 | fruit,50,0,11 29 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["maturin>=1.2.1,<2"] 3 | build-backend = "maturin" 4 | 5 | [project] 6 | name = "polars-cli" 7 | description = "CLI interface for running SQL queries with Polars as backend" 8 | readme = "README.md" 9 | authors = [ 10 | { name = "Ritchie Vink", email = "ritchie46@gmail.com" }, 11 | ] 12 | license = { file = "LICENSE" } 13 | requires-python = ">=3.8" 14 | 15 | keywords = ["dataframe", "arrow", "out-of-core", "sql"] 16 | classifiers = [ 17 | "Development Status :: 5 - Production/Stable", 18 | "Environment :: Console", 19 | "Intended Audience :: Science/Research", 20 | "License :: OSI Approved :: MIT License", 21 | "Operating System :: OS Independent", 22 | "Programming Language :: Python", 23 | "Programming Language :: Python :: 3", 24 | "Programming Language :: Python :: 3 :: Only", 25 | "Programming Language :: Python :: 3.8", 26 | "Programming Language :: Python :: 3.9", 27 | "Programming Language :: Python :: 3.10", 28 | "Programming Language :: Python :: 3.11", 29 | "Programming Language :: Rust", 30 | "Topic :: Scientific/Engineering", 31 | ] 32 | 33 | [project.urls] 34 | Homepage = "https://www.pola.rs/" 35 | Documentation = "https://github.com/pola-rs/polars-cli" 36 | Repository = "https://github.com/pola-rs/polars-cli" 37 | Changelog = "https://github.com/pola-rs/polars-cli/releases" 38 | 39 | [tool.maturin] 40 | bindings = "bin" 41 | python-source = "python" 42 | module-name = "polars-cli" 43 | strip = true 44 | -------------------------------------------------------------------------------- /python/polars-cli/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pola-rs/polars-cli/906ca3126e931ffe035227e32305855696a2ab75/python/polars-cli/__init__.py -------------------------------------------------------------------------------- /python/polars-cli/__main__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Setup borrowed from ruff: 3 | https://github.com/astral-sh/ruff/blob/main/python/ruff/__main__.py 4 | """ 5 | import os 6 | import subprocess 7 | import sys 8 | import sysconfig 9 | from pathlib import Path 10 | 11 | 12 | def find_polars_bin() -> Path: 13 | """Return the Polars CLI binary path.""" 14 | 15 | polars_exe = "polars" + sysconfig.get_config_var("EXE") 16 | 17 | path = Path(sysconfig.get_path("scripts")) / polars_exe 18 | if path.is_file(): 19 | return path 20 | 21 | if sys.version_info >= (3, 10): 22 | user_scheme = sysconfig.get_preferred_scheme("user") 23 | elif os.name == "nt": 24 | user_scheme = "nt_user" 25 | elif sys.platform == "darwin" and sys._framework: 26 | user_scheme = "osx_framework_user" 27 | else: 28 | user_scheme = "posix_user" 29 | 30 | path = Path(sysconfig.get_path("scripts", scheme=user_scheme)) / polars_exe 31 | if path.is_file(): 32 | return path 33 | 34 | raise FileNotFoundError(path) 35 | 36 | 37 | if __name__ == "__main__": 38 | polars = find_polars_bin() 39 | completed_process = subprocess.run([polars, *sys.argv[1:]]) 40 | sys.exit(completed_process.returncode) 41 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly-2024-11-28" 3 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | group_imports = "StdExternalCrate" 2 | imports_granularity = "Module" 3 | match_block_trailing_comma = true 4 | -------------------------------------------------------------------------------- /src/highlighter.rs: -------------------------------------------------------------------------------- 1 | use std::io::{self}; 2 | 3 | use nu_ansi_term::{Color, Style}; 4 | use polars::sql::keywords::{all_functions, all_keywords}; 5 | use reedline::{Highlighter, StyledText}; 6 | use sqlparser::dialect::GenericDialect; 7 | use sqlparser::keywords::Keyword; 8 | use sqlparser::tokenizer::{Token, Tokenizer}; 9 | 10 | use crate::interactive::PolarsCommand; 11 | 12 | pub(crate) struct SQLHighlighter {} 13 | 14 | fn colorize_sql(query: &str, st: &mut StyledText) -> std::io::Result<()> { 15 | let dialect = GenericDialect; 16 | 17 | let mut tokenizer = Tokenizer::new(&dialect, query); 18 | 19 | let tokens = tokenizer.tokenize().map_err(|e| { 20 | io::Error::new( 21 | io::ErrorKind::InvalidInput, 22 | format!("Failed to tokenize SQL: {}", e), 23 | ) 24 | }); 25 | 26 | // the tokenizer will error if the final character is an unescaped quote 27 | // such as `select * from read_csv(" 28 | // in this case we will try to find the quote and colorize the rest of the query 29 | // otherwise we will return the error 30 | if let Err(err) = tokens { 31 | let pos = query.find(&['\'', '"'][..]); 32 | match pos { 33 | None => return Err(err), 34 | Some(pos) => { 35 | let (s1, s2) = query.split_at(pos); 36 | colorize_sql(s1, st)?; 37 | 38 | st.push((Style::new(), s2.to_string())); 39 | return Ok(()); 40 | }, 41 | } 42 | } 43 | let tokens = tokens.unwrap(); 44 | 45 | for token in tokens { 46 | match token { 47 | Token::Mul => st.push((Style::new().fg(Color::Purple), "*".to_string())), 48 | Token::LParen => st.push((Style::new().fg(Color::Purple), "(".to_string())), 49 | Token::RParen => st.push((Style::new().fg(Color::Purple), ")".to_string())), 50 | Token::Comma => st.push((Style::new().fg(Color::Purple), ",".to_string())), 51 | Token::SemiColon => st.push((Style::new().fg(Color::White).bold(), ";".to_string())), 52 | Token::SingleQuotedString(s) => { 53 | st.push((Style::new().fg(Color::Yellow).italic(), format!("'{}'", s))) 54 | }, 55 | Token::DoubleQuotedString(s) => st.push(( 56 | Style::new().fg(Color::Yellow).italic(), 57 | format!("\"{}\"", s), 58 | )), 59 | Token::Word(w) => match w.keyword { 60 | Keyword::SELECT 61 | | Keyword::FROM 62 | | Keyword::WHERE 63 | | Keyword::GROUP 64 | | Keyword::BY 65 | | Keyword::ORDER 66 | | Keyword::LIMIT 67 | | Keyword::OFFSET 68 | | Keyword::AND 69 | | Keyword::OR 70 | | Keyword::AS 71 | | Keyword::ON 72 | | Keyword::INNER 73 | | Keyword::LEFT 74 | | Keyword::RIGHT 75 | | Keyword::FULL 76 | | Keyword::OUTER 77 | | Keyword::JOIN 78 | | Keyword::CREATE 79 | | Keyword::TABLE 80 | | Keyword::SHOW 81 | | Keyword::TABLES 82 | | Keyword::VARCHAR 83 | | Keyword::INT 84 | | Keyword::FLOAT 85 | | Keyword::DOUBLE 86 | | Keyword::BOOLEAN 87 | | Keyword::DATE 88 | | Keyword::TIME 89 | | Keyword::DATETIME 90 | | Keyword::ARRAY 91 | | Keyword::ASC 92 | | Keyword::DESC 93 | | Keyword::NULL 94 | | Keyword::NOT 95 | | Keyword::IN 96 | | Keyword::WITH => { 97 | st.push((Style::new().fg(Color::LightGreen), format!("{w}"))); 98 | }, 99 | _ => match w.to_string().as_str() { 100 | s if all_functions().contains(&s) => { 101 | st.push((Style::new().fg(Color::LightCyan).bold(), format!("{w}"))) 102 | }, 103 | s if all_keywords().contains(&s) => { 104 | st.push((Style::new().fg(Color::LightGreen), format!("{w}"))) 105 | }, 106 | s if PolarsCommand::keywords().contains(&s) => { 107 | st.push((Style::new().fg(Color::LightGray).bold(), format!("{w}"))) 108 | }, 109 | _ => st.push((Style::new(), format!("{w}"))), 110 | }, 111 | }, 112 | other => { 113 | st.push((Style::new(), format!("{other}"))); 114 | }, 115 | } 116 | } 117 | Ok(()) 118 | } 119 | 120 | impl Highlighter for SQLHighlighter { 121 | fn highlight(&self, line: &str, _cursor: usize) -> reedline::StyledText { 122 | let mut styled_text = StyledText::new(); 123 | colorize_sql(line, &mut styled_text).unwrap(); 124 | styled_text 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /src/interactive.rs: -------------------------------------------------------------------------------- 1 | use std::env; 2 | use std::io::Cursor; 3 | use std::path::PathBuf; 4 | 5 | use clap::crate_version; 6 | use once_cell::sync::Lazy; 7 | use polars::df; 8 | use polars::prelude::*; 9 | use polars::sql::SQLContext; 10 | use reedline::{FileBackedHistory, Reedline, Signal}; 11 | 12 | #[cfg(feature = "highlight")] 13 | use crate::highlighter::SQLHighlighter; 14 | use crate::prompt::SQLPrompt; 15 | use crate::{OutputMode, SerializableContext}; 16 | 17 | fn get_home_dir() -> PathBuf { 18 | match env::var("HOME") { 19 | Ok(path) => PathBuf::from(path), 20 | Err(_) => match env::var("USERPROFILE") { 21 | Ok(path) => PathBuf::from(path), 22 | Err(_) => panic!("Failed to get home directory"), 23 | }, 24 | } 25 | } 26 | 27 | fn get_history_path() -> PathBuf { 28 | let mut home_dir = get_home_dir(); 29 | home_dir.push(".polars"); 30 | home_dir.push("history.txt"); 31 | home_dir 32 | } 33 | 34 | static HELP_DF: Lazy = Lazy::new(|| { 35 | df! { 36 | "command" => [ 37 | ".exit", 38 | ".quit", 39 | ".save FILE", 40 | ".open FILE", 41 | ".help", 42 | ], 43 | "description" => [ 44 | "Exit this program", 45 | "Exit this program (alias for .exit)", 46 | "Save the current state of the database to FILE", 47 | "Open a database from FILE", 48 | "Display this help.", 49 | ] 50 | } 51 | .unwrap() 52 | }); 53 | 54 | // Command: help 55 | fn print_help() { 56 | let _tmp_env = ( 57 | tmp_env::set_var("POLARS_FMT_TABLE_FORMATTING", "NOTHING"), 58 | tmp_env::set_var("POLARS_FMT_TABLE_HIDE_COLUMN_DATA_TYPES", "1"), 59 | tmp_env::set_var("POLARS_FMT_TABLE_HIDE_DATAFRAME_SHAPE_INFORMATION", "1"), 60 | tmp_env::set_var("POLARS_FMT_TABLE_HIDE_COLUMN_NAMES", "1"), 61 | tmp_env::set_var("POLARS_FMT_STR_LEN", "80"), 62 | ); 63 | let df: &DataFrame = &HELP_DF; 64 | println!("{}", df); 65 | } 66 | 67 | pub(super) enum PolarsCommand { 68 | Help, 69 | Exit, 70 | Save(PathBuf), 71 | Open(PathBuf), 72 | Unknown(String), 73 | } 74 | 75 | impl PolarsCommand { 76 | fn execute_and_print(&self, ctx: &mut SQLContext) { 77 | match self.execute(ctx) { 78 | Ok(_) => {}, 79 | Err(e) => { 80 | eprintln!("Error: {}", e); 81 | }, 82 | } 83 | } 84 | fn execute(&self, ctx: &mut SQLContext) -> std::io::Result<()> { 85 | match self { 86 | PolarsCommand::Help => { 87 | print_help(); 88 | Ok(()) 89 | }, 90 | PolarsCommand::Exit => Ok(()), 91 | PolarsCommand::Save(buf) => { 92 | let serializable_ctx: SerializableContext = ctx.into(); 93 | let mut w: Vec = vec![]; 94 | ciborium::ser::into_writer(&serializable_ctx, &mut w).map_err(|e| { 95 | std::io::Error::new( 96 | std::io::ErrorKind::Other, 97 | format!("Serialization error: {}", e), 98 | ) 99 | })?; 100 | 101 | *ctx = serializable_ctx.into(); 102 | std::fs::write(buf, w)?; 103 | Ok(()) 104 | }, 105 | PolarsCommand::Open(buf) => { 106 | let db = std::fs::read(buf)?; 107 | let cursor = Cursor::new(db); 108 | let serializable_ctx: SerializableContext = ciborium::de::from_reader(cursor) 109 | .map_err(|e| { 110 | std::io::Error::new( 111 | std::io::ErrorKind::Other, 112 | format!("Deserialization error: {}", e), 113 | ) 114 | })?; 115 | *ctx = serializable_ctx.into(); 116 | Ok(()) 117 | }, 118 | PolarsCommand::Unknown(cmd) => { 119 | println!(r#"Unknown command: "{cmd}". Enter ".help" for help"#); 120 | Ok(()) 121 | }, 122 | } 123 | } 124 | } 125 | 126 | impl TryFrom<(&str, &str)> for PolarsCommand { 127 | type Error = std::io::Error; 128 | 129 | fn try_from(value: (&str, &str)) -> Result { 130 | let (cmd, arg) = value; 131 | 132 | match cmd { 133 | ".help" | "?" => Ok(PolarsCommand::Help), 134 | ".exit" | ".quit" => Ok(PolarsCommand::Exit), 135 | ".save" => Ok(PolarsCommand::Save(arg.trim().into())), 136 | ".open" => Ok(PolarsCommand::Open(arg.trim().into())), 137 | unknown => Ok(PolarsCommand::Unknown(unknown.to_string())), 138 | } 139 | } 140 | } 141 | 142 | pub(super) fn run_tty(output_mode: OutputMode) -> std::io::Result<()> { 143 | let history = Box::new( 144 | FileBackedHistory::with_file(100, get_history_path()) 145 | .expect("Error configuring history with file"), 146 | ); 147 | 148 | let mut line_editor = Reedline::create().with_history(history); 149 | 150 | #[cfg(feature = "highlight")] 151 | { 152 | let sql_highlighter = SQLHighlighter {}; 153 | line_editor = line_editor.with_highlighter(Box::new(sql_highlighter)); 154 | } 155 | 156 | let mut context = SQLContext::new(); 157 | 158 | println!("Polars CLI version {}", crate_version!()); 159 | println!("Type .help for help."); 160 | 161 | let prompt = SQLPrompt {}; 162 | let mut prev_was_ctrl_c = false; 163 | let mut scratch = String::with_capacity(1024); 164 | 165 | loop { 166 | let sig = line_editor.read_line(&prompt); 167 | match sig { 168 | Ok(Signal::Success(buffer)) => { 169 | prev_was_ctrl_c = false; 170 | match buffer.as_str() { 171 | special_cmd if buffer.starts_with('.') => { 172 | let cmd: PolarsCommand = special_cmd 173 | .split_at(special_cmd.find(' ').unwrap_or(special_cmd.len())) 174 | .try_into()?; 175 | 176 | if let PolarsCommand::Exit = cmd { 177 | break; 178 | }; 179 | 180 | cmd.execute_and_print(&mut context) 181 | }, 182 | _ => { 183 | let mut parts = buffer.splitn(2, ';'); 184 | let first = parts.next().unwrap(); 185 | scratch.push_str(first); 186 | 187 | let second = parts.next(); 188 | if second.is_some() { 189 | output_mode.execute_query(&scratch, &mut context); 190 | scratch.clear(); 191 | } else { 192 | scratch.push(' '); 193 | } 194 | }, 195 | } 196 | }, 197 | Ok(Signal::CtrlC) => { 198 | if prev_was_ctrl_c { 199 | break; 200 | } else { 201 | prev_was_ctrl_c = true; 202 | } 203 | }, 204 | Ok(Signal::CtrlD) => { 205 | break; 206 | }, 207 | _ => { 208 | prev_was_ctrl_c = false; 209 | }, 210 | } 211 | } 212 | Ok(()) 213 | } 214 | 215 | impl PolarsCommand { 216 | pub(super) fn keywords() -> Vec<&'static str> { 217 | vec!["exit", "quit", "save", "open", "help"] 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #[cfg(feature = "highlight")] 2 | mod highlighter; 3 | mod interactive; 4 | mod prompt; 5 | 6 | #[cfg(target_os = "linux")] 7 | use jemallocator::Jemalloc; 8 | use polars::prelude::{ 9 | CsvWriter, DslPlan, IdxSize, IpcWriter, JsonWriter, ParquetWriter, PlHashMap, PlIndexMap, 10 | SerWriter, 11 | }; 12 | use serde::{Deserialize, Serialize}; 13 | 14 | #[global_allocator] 15 | #[cfg(target_os = "linux")] 16 | static ALLOC: Jemalloc = Jemalloc; 17 | 18 | use std::io::{self, BufRead}; 19 | use std::str::FromStr; 20 | 21 | use clap::{Parser, ValueEnum}; 22 | use interactive::run_tty; 23 | use polars::sql::SQLContext; 24 | 25 | #[derive(Parser, Debug)] 26 | #[command(author, version, about, long_about)] 27 | struct Args { 28 | /// Execute "COMMAND" and exit 29 | #[arg(short = 'c')] 30 | command: Option, 31 | /// Optional query to operate on. Equivalent of `polars -c "QUERY"` 32 | query: Option, 33 | #[arg(short = 'o')] 34 | /// Optional output mode. Defaults to 'table' 35 | output_mode: Option, 36 | } 37 | 38 | #[derive(ValueEnum, Debug, Default, Clone)] 39 | enum OutputMode { 40 | Csv, 41 | Json, 42 | Parquet, 43 | Arrow, 44 | #[default] 45 | Table, 46 | #[value(alias("md"))] 47 | Markdown, 48 | } 49 | 50 | impl OutputMode { 51 | fn execute_query(&self, query: &str, ctx: &mut SQLContext) { 52 | let mut execute_inner = || { 53 | let mut df = ctx 54 | .execute(query) 55 | .and_then(|lf| { 56 | if matches!(self, OutputMode::Table | OutputMode::Markdown) { 57 | let max_rows = std::env::var("POLARS_FMT_MAX_ROWS") 58 | .unwrap_or("20".into()) 59 | .parse::() 60 | .unwrap_or(20); 61 | lf.limit(max_rows).collect() 62 | } else { 63 | lf.collect() 64 | } 65 | }) 66 | .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; 67 | 68 | let w = io::stdout(); 69 | let mut w = io::BufWriter::new(w); 70 | match self { 71 | OutputMode::Csv => CsvWriter::new(&mut w).finish(&mut df), 72 | OutputMode::Json => JsonWriter::new(&mut w).finish(&mut df), 73 | OutputMode::Parquet => ParquetWriter::new(&mut w).finish(&mut df).map(|_| ()), 74 | OutputMode::Arrow => IpcWriter::new(w).finish(&mut df), 75 | OutputMode::Table => { 76 | let _tmp = 77 | tmp_env::set_var("POLARS_FMT_TABLE_HIDE_DATAFRAME_SHAPE_INFORMATION", "1"); 78 | 79 | use std::io::Write; 80 | return write!(&mut w, "{df}"); 81 | }, 82 | OutputMode::Markdown => { 83 | let _tmp_env = ( 84 | tmp_env::set_var("POLARS_FMT_TABLE_FORMATTING", "ASCII_MARKDOWN"), 85 | tmp_env::set_var("POLARS_FMT_TABLE_HIDE_DATAFRAME_SHAPE_INFORMATION", "1"), 86 | ); 87 | use std::io::Write; 88 | return write!(&mut w, "{df}"); 89 | }, 90 | } 91 | .map_err(|e| io::Error::new(io::ErrorKind::Other, e)) 92 | }; 93 | 94 | match execute_inner() { 95 | Ok(_) => {}, 96 | Err(e) => { 97 | eprintln!("Error: {}", e); 98 | }, 99 | } 100 | } 101 | } 102 | 103 | impl FromStr for OutputMode { 104 | type Err = String; 105 | 106 | fn from_str(s: &str) -> Result { 107 | match s { 108 | "csv" => Ok(OutputMode::Csv), 109 | "json" => Ok(OutputMode::Json), 110 | "parquet" => Ok(OutputMode::Parquet), 111 | "arrow" => Ok(OutputMode::Arrow), 112 | "table" => Ok(OutputMode::Table), 113 | _ => Err(format!("Invalid output mode: {}", s)), 114 | } 115 | } 116 | } 117 | 118 | #[derive(Serialize, Deserialize)] 119 | struct SerializableContext { 120 | table_map: PlIndexMap, 121 | tables: Vec, 122 | } 123 | 124 | impl From<&'_ mut SQLContext> for SerializableContext { 125 | fn from(ctx: &mut SQLContext) -> Self { 126 | let table_map = ctx 127 | .clone() 128 | .get_table_map() 129 | .into_iter() 130 | .map(|(k, v)| (k, v.logical_plan)) 131 | .collect::>(); 132 | let tables = ctx.get_tables(); 133 | 134 | Self { table_map, tables } 135 | } 136 | } 137 | 138 | impl From for SQLContext { 139 | fn from(ctx: SerializableContext) -> Self { 140 | SQLContext::new_from_table_map( 141 | ctx.table_map 142 | .into_iter() 143 | .map(|(k, v)| (k, v.into())) 144 | .collect::>(), 145 | ) 146 | } 147 | } 148 | 149 | pub fn main() -> io::Result<()> { 150 | let args = Args::parse(); 151 | let output_mode = args.output_mode.unwrap_or_default(); 152 | 153 | if let Some(query) = args.command { 154 | let mut context = SQLContext::new(); 155 | output_mode.execute_query(&query, &mut context); 156 | Ok(()) 157 | } else if let Some(query) = args.query { 158 | let mut context = SQLContext::new(); 159 | output_mode.execute_query(&query, &mut context); 160 | Ok(()) 161 | } else if atty::is(atty::Stream::Stdin) { 162 | run_tty(output_mode) 163 | } else { 164 | run_noninteractive(output_mode) 165 | } 166 | } 167 | 168 | fn run_noninteractive(output_mode: OutputMode) -> io::Result<()> { 169 | let mut context = SQLContext::new(); 170 | let mut input: Vec = Vec::with_capacity(1024); 171 | let stdin = std::io::stdin(); 172 | 173 | loop { 174 | input.clear(); 175 | stdin.lock().read_until(b';', &mut input)?; 176 | 177 | let query = std::str::from_utf8(&input).unwrap_or("").trim(); 178 | if query.is_empty() { 179 | break; 180 | } 181 | 182 | output_mode.execute_query(query, &mut context); 183 | } 184 | 185 | Ok(()) 186 | } 187 | -------------------------------------------------------------------------------- /src/prompt.rs: -------------------------------------------------------------------------------- 1 | use std::borrow::Cow; 2 | 3 | use reedline::{Prompt, PromptHistorySearchStatus}; 4 | 5 | pub(super) struct SQLPrompt {} 6 | 7 | impl Prompt for SQLPrompt { 8 | fn render_prompt_left(&self) -> std::borrow::Cow { 9 | Cow::Borrowed("") 10 | } 11 | 12 | fn render_prompt_right(&self) -> std::borrow::Cow { 13 | Cow::Borrowed("") 14 | } 15 | 16 | fn render_prompt_indicator( 17 | &self, 18 | _prompt_mode: reedline::PromptEditMode, 19 | ) -> std::borrow::Cow { 20 | "〉".into() 21 | } 22 | 23 | fn render_prompt_multiline_indicator(&self) -> std::borrow::Cow { 24 | Cow::Borrowed("::: ") 25 | } 26 | 27 | fn render_prompt_history_search_indicator( 28 | &self, 29 | history_search: reedline::PromptHistorySearch, 30 | ) -> std::borrow::Cow { 31 | let prefix = match history_search.status { 32 | PromptHistorySearchStatus::Passing => "", 33 | PromptHistorySearchStatus::Failing => "failing ", 34 | }; 35 | Cow::Owned(format!( 36 | "({}reverse-search: {}) ", 37 | prefix, history_search.term 38 | )) 39 | } 40 | } 41 | --------------------------------------------------------------------------------