vgi-python 0.42.0__tar.gz → 0.42.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vgi_python-0.42.0 → vgi_python-0.42.1}/PKG-INFO +1 -1
- {vgi_python-0.42.0 → vgi_python-0.42.1}/pyproject.toml +1 -1
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_bind_request_at_clause.py +32 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_filter_v2.py +34 -0
- vgi_python-0.42.1/tests/test_table_function_early_close.py +81 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/uv.lock +1 -1
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/client.py +80 -37
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/filter_v2.py +29 -1
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.dockerignore +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.gitattributes +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/dependabot.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/styles/config/vocabularies/VGI/accept.txt +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/workflows/ci.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/workflows/docs.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/workflows/integration.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/workflows/release.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.github/workflows/tailnet-integration.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.gitignore +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.python-version +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/.vale.ini +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/CLAUDE.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/DOCS_ACCEPTANCE_CRITERIA.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/DOCS_REVIEW_RUBRIC.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/DOCS_USABILITY_TEST.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/LICENSE +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/PROTOCOL.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/README.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/RELEASE-RUNBOOK.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/SECURITY.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/ci/README.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/ci/preprocess-require.awk +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/ci/run-integration.sh +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/README.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/and-too-few-children.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/delta-required-upsert.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/nested-runtime-filter.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/remove-with-expression.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/required-runtime-filter.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/snapshot-nonzero-revision.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/unknown-document-property.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/unknown-node.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/advisory-upsert-delta.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/boolean-column-predicate.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/empty-snapshot.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/nested-required-snapshot.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/remove-delta.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/runtime-filter-snapshot.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/filter-v2.schema.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/generate_runtime.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/manifest.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/run_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-add/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-add/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-add/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-multiply/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-multiply/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-multiply/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-negate/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-negate/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-negate/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-subtract/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-subtract/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-subtract/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/cast-integer-to-double/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/cast-integer-to-double/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/cast-integer-to-double/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-distinct_from/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-distinct_from/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-distinct_from/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-distinct_from/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ne/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ne/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ne/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ne/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-not_distinct_from/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-not_distinct_from/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-not_distinct_from/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-not_distinct_from/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-atomic-multi-update/delta-0.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-atomic-multi-update/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-atomic-multi-update/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-atomic-multi-update/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-empty-noop/delta-0.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-empty-noop/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-empty-noop/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-empty-noop/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-0.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-1.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-upsert-remove-stale/delta-2.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-upsert-remove-stale/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-upsert-remove-stale/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/delta-upsert-remove-stale/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/empty-snapshot/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/empty-snapshot/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/empty-snapshot/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/empty-snapshot/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-cast-type-not-null/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-cast-type-not-null/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-column-index/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-column-index/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-column-name/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-column-name/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-contextual-cast-without-session/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-contextual-cast-without-session/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-duplicate-predicate-id/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-duplicate-predicate-id/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-external-column-index/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-external-column-index/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-external-column-index/join-keys-0.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-external-column-name/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-external-column-name/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-external-column-name/join-keys-0.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-field-non-struct/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-field-non-struct/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-in-payload-not-list/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-in-payload-not-list/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-in-payload-null-list/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-in-payload-null-list/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-invalid-overload/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-invalid-overload/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-missing-literal/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-missing-literal/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-non-boolean-root/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-non-boolean-root/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-unknown-standard-function/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/error-unknown-standard-function/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/external-in-nonzero-column/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/external-in-nonzero-column/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/external-in-nonzero-column/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/external-in-nonzero-column/join-keys-0.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/external-in-nonzero-column/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-contains/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-contains/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-contains/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-ends-with/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-ends-with/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-ends-with/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-list-contains/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-list-contains/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-list-contains/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-starts-with/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-starts-with/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/function-starts-with/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-empty/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-empty/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-empty/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-empty/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-with-null/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-with-null/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-with-null/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/in-with-null/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-not-null/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-not-null/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-not-null/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-not-null/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-null/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-null/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-null/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/is-null/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-and/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-and/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-and/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-not/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-not/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-not/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-or/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-or/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/kleene-or/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/nan-comparison/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/nan-comparison/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/nan-comparison/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/negative-zero-membership/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/negative-zero-membership/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/negative-zero-membership/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/nested-null-propagation/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/nested-null-propagation/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/nested-null-propagation/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-empty/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-empty/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-empty/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-empty/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-with-null/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-with-null/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-with-null/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/not-in-with-null/worker-expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/session-integer-division/expected.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/session-integer-division/filter.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/session-integer-division/input.arrow +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime-manifest.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/dist-vgi/.gitignore +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/aggregate-functions.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/arguments.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/auth.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/catalogs.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/client.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/exceptions.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/filters.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/functions.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/http.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/index.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/metadata.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/observability.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/storage.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/transactor.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/api/worker.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/argument-serialization.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/apple-touch-icon.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/favicon-16x16.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/favicon-32x32.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/favicon.ico +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/kinds/aggregate.svg +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/kinds/buffering.svg +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/kinds/scalar.svg +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/kinds/table-in-out.svg +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/kinds/table.svg +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/logo.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/social-card.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/assets/video-thumbnail.jpg +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/authentication.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/catalog-interface.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/cli.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/column-statistics.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/concepts/index.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/contributing-docs.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/filter-pushdown.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/generator-api.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/global-functions.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/catalogs.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/function-patterns.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/http-auth.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/index.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/iroh.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/pushdown-and-statistics.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/state-storage.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/how-to/tailnet.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/index.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/lifecycle.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/metadata.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/overrides/main.html +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/protocol/index.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/protocol/vgi-catalog-query-pushdown-design.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/protocol/vgi-duckdb-filter-adapter.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/protocol/vgi-filter-encoding-v2-spec.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/protocol/vgi-protocol-proposed-changes.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/protocol/vgi-runtime-filter-artifacts.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/robots.txt +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/shared-storage.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/stylesheets/extra.css +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/tutorial/index.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/tutorial/scalar.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/tutorial/table.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/docs/vgi-logo.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/batch_index_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/cache_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/calc_scalar_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/calc_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/copy_format_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/filter_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/greeting_scalar_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/row_count_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/series_streaming_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/examples/sum_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/identity.png +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/mkdocs.yml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/packages/vgi-fixtures/LICENSE +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/packages/vgi-fixtures/README.md +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/packages/vgi-fixtures/docker/Dockerfile +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/packages/vgi-fixtures/docker/docker-entrypoint.sh +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/packages/vgi-fixtures/pyproject.toml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/scripts/hosted_protocols_conformance.sh +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/scripts/measure_startup.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/scripts/regen_generated.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/scripts/run_all_tests.sh +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/test-data/generate.sh +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/_hosted_protocols_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/_http_fixtures.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_attach_option.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_catalog_contents.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_catalog_interface.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_client_catalog.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_client_load_catalog.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_column_statistics.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_declarative.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_example_worker_catalog.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_integration.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_required_filters.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_scan_branches.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_serialization.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_setting.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_time_travel.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/catalog/test_writable_table.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_aggregate_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_batch_metadata_callback.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_bind_and_join_keys.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_broken_pipe.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_cli.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_cli_catalog_functions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_copy_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_http_response_budget.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_iroh_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_scan_branches_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_split_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_stop_force.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_table_column_statistics.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_time_travel_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/client/test_worker_debug.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/_stub.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/conftest.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_accumulate.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_aggregate.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_attach.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_bearer_auth.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_const_param_enforcement.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_container.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_copy_from.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_copy_to.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_directory_parity.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_function_inventory.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_github.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_http_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_http_external_location.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_http_upload_url.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_macro.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_overload.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_protocol_inventory.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_protocol_version.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_resumable_scan.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_scalar.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_scalar_attach_opaque_data.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_secret.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_settings.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_splits.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_table.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_table_in_out.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_view.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conformance/test_writable.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/conftest.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/anchor_len_overrun.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/bad_fingerprint.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/bad_flags_unsealed_but_key_present.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/bad_version.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/generate.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/manifest.json +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/reserved_flag_bit.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/stale_anchor.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/truncated.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/valid_sealed.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/data/split_tokens/valid_unsealed.bin +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_bernoulli_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_binary_packet_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_conditional_message_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_hash_seed_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_multiply_by_setting_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_multiply_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_random_bytes_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/scalar/test_return_secret_value_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_constant_columns_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_double_sequence_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_exception_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_filter_echo_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_logging_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_nested_sequence_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_partitioned_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_projected_data_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_sequence_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_settings_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_struct_settings_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/generator/test_ten_thousand_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table/test_wide_columns.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_buffer_input_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_echo_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_exception_functions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_filter_by_setting_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_repeat_inputs_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_substream_partial_sum_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/generator/test_sum_all_columns_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/test_blended_exchange.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/test_blended_metadata.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/test_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/table_in_out/test_table_buffering_empty_input.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/Dockerfile +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/compose.yaml +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/probe.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/run.sh +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/test_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/tailnet/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_access_log_audit.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_aggregate_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_argument_spec.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_auth.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_bind_exceptions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_bound_storage_conformance.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_cache_control.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_call_state_attach.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_catalog_auth_binding.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_client_oauth.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_codegen_request_inventory.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_copy_from_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_copy_to_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_docstrings.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_documentation_examples.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_dynamic_filter_http_turns.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_example_function_arg_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_examples_workers.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_exception_handling.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_exceptions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_filter_pushdown.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_filter_pushdown_extension.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_filter_v2_builder.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_filter_v2_runtime_corpus.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_filter_v2_spec_schema.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_fixture_catalog_parity.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_function_shape_mismatch.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_function_storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_function_storage_azure_sql.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_function_storage_cf_do.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_function_storage_cf_do_integration.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_function_storage_conformance.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_cpp_constants.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_cpp_protocol_name.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_cpp_protocol_version.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_cpp_request_builders.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_cpp_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_cpp_secret.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_csharp.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_go_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_go_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_java_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_java_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_protocol_version.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_rust_request_builders.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_rust_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_rust_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_schemas_cross_lang.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_ts_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_ts_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_generated_ts_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_grant_auth.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_hosted_protocols.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_http_demo_storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_http_s3_offload_input.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_http_s3_offload_output.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_import_side_effects.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_landing_discovery.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_launch_transport.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_metadata.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_mypy_consolidated.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_nest_tensor.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_otel.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_projection_enforcement.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_projection_repro.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_protocol_classes.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_resolved_secrets.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_schema_paths_v2.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_schema_scoped_functions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_schema_utils.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_serve.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_setting_secret_annotations.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_signing_key.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_split_token.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_subprocess_transport.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_table_buffering_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_table_function_dynamic_to_string.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_tcp_transport.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_type_bounds.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_union_argument.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_wire_record_schema_parity.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_worker_cli.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_worker_page.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/test_write_results.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/transactor/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/tests/transactor/test_transactor.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_duckdb.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_storage_profile.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/accumulate/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/accumulate/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/_common.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/basic.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/dynamic.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/generic.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/listagg.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/percentile.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/same_name.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/secret_typed.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/streaming.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/varargs.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/aggregate/window.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/attach_options.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/bad_enum.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/bad_protocol.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/cancellable.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/catalog.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/catalog_contents.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/companion.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/copy_from.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/copy_to.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/global_functions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/http_server.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/identity_fixture.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/narrow_bind/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/narrow_bind/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/nest_tensor.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/orchard_catalog.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/projection_repro/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/projection_repro/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/_common.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/arithmetic.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/bench_ladder.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/binary.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/formatting.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/geo.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/null_handling.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/random_demo.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/same_name.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/settings_secrets.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/scalar/type_info.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/schema_reconcile/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/schema_reconcile/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/secret_cache.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/simple_writable.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/_common.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/batch_index.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/batch_index_broken.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/cache.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/catalog_scans.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/filters.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/late_materialization.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/make_series.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/misc.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/order_modes.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/pairs.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/partition_columns.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/partition_columns_broken.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/profiling_example.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/required_filters.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/same_name_cached.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/same_name_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/sequence.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/settings.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/splits.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/transaction_storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/tt_pushdown.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/typed_probe.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/versioned.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table/wide.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table_in_out.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/table_in_out_same_name.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/twin_catalogs.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/versioned.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/versioned_tables.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/writable/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/writable/generic.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/writable/table.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/_test_fixtures/writable/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/aggregate_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/argument_spec.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/arguments.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/attach_header.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/auth.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/cache_control.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/_descriptor_spec.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/attach_option.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/catalog_interface.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/descriptors.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/duckdb_statistics.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/secret_type.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/setting.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/catalog/storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/aggregate.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/catalog_mixin.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli_catalog.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli_schema.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli_table.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli_transaction.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli_utils.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/cli_view.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/client/errors.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/_common.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_constants.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_protocol_name.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_protocol_version.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_request_builders.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_secret_protocol_version.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_secret_request_builders.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/cpp_secret_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/csharp_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/csharp_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/go_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/go_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/java_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/java_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/protocol_version.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/rust_request_builders.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/rust_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/rust_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/ts_client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/ts_schemas.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/codegen/ts_types.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/copy_from_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/copy_to_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/exceptions.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/filter_v2_builder.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/function_storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/function_storage_azure_sql.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/function_storage_cf_do.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/http/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/http/demo_storage.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/http/landing.html +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/http/landing_page.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/http/vgi-client.js +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/http/worker_page.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/invocation.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/logging_config.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/meta_worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/metadata.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/otel.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/profiling.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/protocol.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/protocol_version.txt +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/py.typed +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/rpc_server.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/scalar_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/schema_path.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/schema_utils.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/secret_protocol.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/secret_service.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/serve.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/split_token.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/table_buffering_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/table_filter_pushdown.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/table_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/table_in_out_function.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/transactor/__init__.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/transactor/_duckdb_compat.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/transactor/client.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/transactor/protocol.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/transactor/server.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/worker.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/vgi/write_results.py +0 -0
- {vgi_python-0.42.0 → vgi_python-0.42.1}/wrangler.jsonc +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vgi-python
|
|
3
|
-
Version: 0.42.
|
|
3
|
+
Version: 0.42.1
|
|
4
4
|
Summary: Vector Gateway Interface - Connect DuckDB to external programs via Apache Arrow
|
|
5
5
|
Project-URL: Homepage, https://query.farm
|
|
6
6
|
Project-URL: Repository, https://github.com/Query-farm/vgi-python
|
|
@@ -13,10 +13,14 @@ Python protocol contract (round-trip + additive wire compatibility + accessors).
|
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
from types import SimpleNamespace
|
|
17
|
+
|
|
16
18
|
import pyarrow as pa
|
|
17
19
|
import pyarrow.ipc as ipc
|
|
20
|
+
import pytest
|
|
18
21
|
|
|
19
22
|
from vgi.arguments import Arguments
|
|
23
|
+
from vgi.client.client import Client
|
|
20
24
|
from vgi.invocation import FunctionType
|
|
21
25
|
from vgi.protocol import BindRequest, InitRequest
|
|
22
26
|
from vgi.table_function import BindParams, ProcessParams, ResolvedSecrets
|
|
@@ -108,3 +112,31 @@ def test_process_params_accessor_none_when_no_init_call() -> None:
|
|
|
108
112
|
)
|
|
109
113
|
assert params.at_unit is None
|
|
110
114
|
assert params.at_value is None
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_client_bind_forwards_at_clause_and_secrets(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
118
|
+
"""``Client.bind`` carries at_unit/at_value and secrets onto its BindRequest, as table_function does."""
|
|
119
|
+
captured: list[BindRequest] = []
|
|
120
|
+
client = Client("unused-worker")
|
|
121
|
+
client._primary = SimpleNamespace(proxy=None) # type: ignore[assignment]
|
|
122
|
+
|
|
123
|
+
def fake_do_bind(_proxy: object, request: BindRequest, _callback: object) -> object:
|
|
124
|
+
captured.append(request)
|
|
125
|
+
return SimpleNamespace()
|
|
126
|
+
|
|
127
|
+
monkeypatch.setattr(client, "_do_bind", fake_do_bind)
|
|
128
|
+
client.bind(
|
|
129
|
+
function_name="sequence",
|
|
130
|
+
schema_path=["main"],
|
|
131
|
+
at_unit="VERSION",
|
|
132
|
+
at_value="3",
|
|
133
|
+
secrets={"token": "s3cr3t"},
|
|
134
|
+
)
|
|
135
|
+
(request,) = captured
|
|
136
|
+
assert (request.at_unit, request.at_value) == ("VERSION", "3")
|
|
137
|
+
assert request.secrets is not None
|
|
138
|
+
|
|
139
|
+
captured.clear()
|
|
140
|
+
client.bind(function_name="sequence", schema_path=["main"])
|
|
141
|
+
(request,) = captured
|
|
142
|
+
assert (request.at_unit, request.at_value, request.secrets) == (None, None, None)
|
|
@@ -22,6 +22,7 @@ from vgi import (
|
|
|
22
22
|
FilterVersionError,
|
|
23
23
|
RuntimeFilterAlgorithmCapability,
|
|
24
24
|
deserialize_filters,
|
|
25
|
+
filter_v2,
|
|
25
26
|
)
|
|
26
27
|
|
|
27
28
|
_METADATA: dict[bytes, bytes] = {
|
|
@@ -767,3 +768,36 @@ def test_standard_v1_evaluator_requires_oracle_engine(
|
|
|
767
768
|
with pytest.raises(filter_v2.FilterV2Error, match=f"found {engine} {re.escape(version)}"):
|
|
768
769
|
filter_v2._get_evaluation_connection(context)
|
|
769
770
|
assert opened == []
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
class _NoNbytes:
|
|
774
|
+
"""Stands in for a view-typed batch under pyarrow < 19, where ``nbytes`` raises."""
|
|
775
|
+
|
|
776
|
+
def __init__(self, total: int | None) -> None:
|
|
777
|
+
self._total = total
|
|
778
|
+
|
|
779
|
+
@property
|
|
780
|
+
def nbytes(self) -> int:
|
|
781
|
+
raise pa.ArrowTypeError("not implemented for string_view")
|
|
782
|
+
|
|
783
|
+
def get_total_buffer_size(self) -> int:
|
|
784
|
+
if self._total is None:
|
|
785
|
+
raise pa.ArrowNotImplementedError("not implemented")
|
|
786
|
+
return self._total
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
def test_payload_size_falls_back_when_nbytes_is_unavailable() -> None:
|
|
790
|
+
"""A view-typed payload is measured by total buffer size instead of raising ArrowTypeError."""
|
|
791
|
+
assert filter_v2._payload_nbytes(_NoNbytes(123)) == 123 # type: ignore[arg-type]
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
def test_payload_size_unmeasurable_is_a_filter_error() -> None:
|
|
795
|
+
"""When no measurement works, the caller sees FilterV2Error, not a raw Arrow error."""
|
|
796
|
+
with pytest.raises(filter_v2.FilterV2Error, match="cannot measure filter payload size"):
|
|
797
|
+
filter_v2._payload_nbytes(_NoNbytes(None)) # type: ignore[arg-type]
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
def test_payload_size_of_a_view_typed_batch() -> None:
|
|
801
|
+
"""A real string_view payload is measured without error."""
|
|
802
|
+
batch = pa.record_batch([pa.array(["a", "bc"], type=pa.string_view())], names=["needles"])
|
|
803
|
+
assert filter_v2._payload_nbytes(batch) > 0
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Copyright 2025, 2026 Query Farm LLC - https://query.farm
|
|
2
|
+
|
|
3
|
+
"""Closing a ``table_function`` generator before its stream ends must not hang.
|
|
4
|
+
|
|
5
|
+
``Client.table_function`` reads each worker's producer stream on a background
|
|
6
|
+
thread. Before the fix, closing the generator early left those threads reading,
|
|
7
|
+
and the ``Client.stop()`` that followed drained the same stream from the main
|
|
8
|
+
thread: two readers on one pipe, and whichever missed the end of stream blocked
|
|
9
|
+
forever (roughly one run in five). Each case here repeats the early close under
|
|
10
|
+
a watchdog, then checks the pooled worker still serves a complete scan.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import threading
|
|
16
|
+
from collections.abc import Callable
|
|
17
|
+
|
|
18
|
+
import pyarrow as pa
|
|
19
|
+
import pytest
|
|
20
|
+
|
|
21
|
+
from tests.conftest import SUBPROCESS_FIXTURE_WORKER
|
|
22
|
+
from vgi.arguments import Arguments
|
|
23
|
+
from vgi.client.client import Client, _default_pool
|
|
24
|
+
|
|
25
|
+
_ITERATIONS = 25
|
|
26
|
+
_WATCHDOG_SECONDS = 120.0
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _run_with_watchdog(body: Callable[[], None]) -> None:
|
|
30
|
+
"""Run ``body`` on a daemon thread; fail (rather than hang the suite) if it doesn't finish."""
|
|
31
|
+
errors: list[BaseException] = []
|
|
32
|
+
|
|
33
|
+
def target() -> None:
|
|
34
|
+
try:
|
|
35
|
+
body()
|
|
36
|
+
except BaseException as e: # noqa: BLE001 - re-raised on the test thread below
|
|
37
|
+
errors.append(e)
|
|
38
|
+
|
|
39
|
+
thread = threading.Thread(target=target, daemon=True)
|
|
40
|
+
thread.start()
|
|
41
|
+
thread.join(_WATCHDOG_SECONDS)
|
|
42
|
+
assert not thread.is_alive(), "closing a table_function scan early hung"
|
|
43
|
+
if errors:
|
|
44
|
+
raise errors[0]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _close_after_first_batch(function_name: str, arguments: Arguments) -> None:
|
|
48
|
+
for _ in range(_ITERATIONS):
|
|
49
|
+
with Client(SUBPROCESS_FIXTURE_WORKER, pool=_default_pool) as client:
|
|
50
|
+
scan = client.table_function(function_name=function_name, schema_path=["main"], arguments=arguments)
|
|
51
|
+
first = next(scan)
|
|
52
|
+
assert first.num_rows > 0
|
|
53
|
+
scan.close()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _full_scan_still_works() -> None:
|
|
57
|
+
with Client(SUBPROCESS_FIXTURE_WORKER, pool=_default_pool) as client:
|
|
58
|
+
batches = list(
|
|
59
|
+
client.table_function(
|
|
60
|
+
function_name="sequence",
|
|
61
|
+
schema_path=["main"],
|
|
62
|
+
arguments=Arguments(positional=(pa.scalar(4),)),
|
|
63
|
+
)
|
|
64
|
+
)
|
|
65
|
+
assert pa.Table.from_batches(batches).column("n").to_pylist() == [0, 1, 2, 3]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@pytest.mark.parametrize(
|
|
69
|
+
("function_name", "arguments"),
|
|
70
|
+
[
|
|
71
|
+
# One worker, many small batches.
|
|
72
|
+
("sequence", Arguments(positional=(pa.scalar(100_000),), named={"batch_size": pa.scalar(10)})),
|
|
73
|
+
# Several workers (one per partition), each with batches still to come.
|
|
74
|
+
("partitioned_sequence", Arguments(positional=(pa.scalar(30_000),))),
|
|
75
|
+
],
|
|
76
|
+
ids=["single_worker", "multi_worker"],
|
|
77
|
+
)
|
|
78
|
+
def test_early_close_does_not_hang(function_name: str, arguments: Arguments) -> None:
|
|
79
|
+
"""A scan closed after its first batch stops cleanly, and the worker pool stays usable."""
|
|
80
|
+
_run_with_watchdog(lambda: _close_after_first_batch(function_name, arguments))
|
|
81
|
+
_run_with_watchdog(_full_scan_still_works)
|
|
@@ -2757,7 +2757,10 @@ class Client(CatalogClientMixin, AggregateClientMixin):
|
|
|
2757
2757
|
arguments: Arguments | None = None,
|
|
2758
2758
|
function_type: FunctionType = FunctionType.TABLE,
|
|
2759
2759
|
settings: dict[str, Any] | None = None,
|
|
2760
|
+
secrets: dict[str, Any] | None = None,
|
|
2760
2761
|
transaction_opaque_data: bytes | None = None,
|
|
2762
|
+
at_unit: str | None = None,
|
|
2763
|
+
at_value: str | None = None,
|
|
2761
2764
|
) -> BindResponse:
|
|
2762
2765
|
"""Resolve a function's bind response without running init()/process().
|
|
2763
2766
|
|
|
@@ -2789,8 +2792,16 @@ class Client(CatalogClientMixin, AggregateClientMixin):
|
|
|
2789
2792
|
settings: Optional dictionary of settings/pragmas — some
|
|
2790
2793
|
functions' output schema depends on setting values (see
|
|
2791
2794
|
`Meta.required_settings`).
|
|
2795
|
+
secrets: Optional dictionary of secret name to value pairs, as for
|
|
2796
|
+
`table_function` — a function whose bind resolves secrets
|
|
2797
|
+
(e.g. a secret-backed source) needs them here too.
|
|
2792
2798
|
transaction_opaque_data: Optional unique identifier for the
|
|
2793
2799
|
DuckDB transaction.
|
|
2800
|
+
at_unit: Optional time travel unit (e.g. 'timestamp', 'version'):
|
|
2801
|
+
bind the function as of a past point, as `table_function`'s
|
|
2802
|
+
`at_unit` does, so a versioned table's historical schema can be
|
|
2803
|
+
discovered. `None` binds live.
|
|
2804
|
+
at_value: Optional time travel value, paired with `at_unit`.
|
|
2794
2805
|
|
|
2795
2806
|
Returns:
|
|
2796
2807
|
[`BindResponse`][] with `output_schema` and any opaque bind data —
|
|
@@ -2814,8 +2825,10 @@ class Client(CatalogClientMixin, AggregateClientMixin):
|
|
|
2814
2825
|
arguments=arguments,
|
|
2815
2826
|
function_type=function_type,
|
|
2816
2827
|
settings=settings,
|
|
2817
|
-
secrets=
|
|
2828
|
+
secrets=secrets,
|
|
2818
2829
|
transaction_opaque_data=transaction_opaque_data,
|
|
2830
|
+
at_unit=at_unit,
|
|
2831
|
+
at_value=at_value,
|
|
2819
2832
|
)
|
|
2820
2833
|
return self._do_bind(self._primary.proxy, bind_request, None)
|
|
2821
2834
|
except ClientError as e:
|
|
@@ -3273,15 +3286,23 @@ class Client(CatalogClientMixin, AggregateClientMixin):
|
|
|
3273
3286
|
# AnnotatedBatch (not just .batch) so custom_metadata survives the
|
|
3274
3287
|
# cross-thread handoff for batch_metadata_callback below.
|
|
3275
3288
|
output_queue: Queue[AnnotatedBatch | BaseException | None] = Queue()
|
|
3289
|
+
# Set when the consumer stops before every worker finished (the
|
|
3290
|
+
# generator was closed early, or a worker failed). Each reader thread is
|
|
3291
|
+
# its stream's only reader, so it is also the one that ends the stream:
|
|
3292
|
+
# a producer stream advances one tick per batch, so a reader notices the
|
|
3293
|
+
# flag within one batch and cancels from its own thread. Ending it from
|
|
3294
|
+
# the consumer's thread instead would put two readers on one pipe.
|
|
3295
|
+
stop = threading.Event()
|
|
3276
3296
|
|
|
3277
3297
|
def read_worker_output(worker: WorkerConnection) -> None:
|
|
3278
3298
|
"""Thread function that reads all output from a single worker."""
|
|
3279
3299
|
try:
|
|
3280
|
-
|
|
3300
|
+
stream = worker.stream
|
|
3301
|
+
if stream is None:
|
|
3281
3302
|
output_queue.put(None)
|
|
3282
3303
|
return
|
|
3283
3304
|
|
|
3284
|
-
for output in
|
|
3305
|
+
for output in stream:
|
|
3285
3306
|
_logger.debug(
|
|
3286
3307
|
"received_output_from_worker worker_index=%s num_rows=%s",
|
|
3287
3308
|
worker.worker_index,
|
|
@@ -3289,6 +3310,10 @@ class Client(CatalogClientMixin, AggregateClientMixin):
|
|
|
3289
3310
|
)
|
|
3290
3311
|
if output.batch.num_rows > 0:
|
|
3291
3312
|
output_queue.put(output)
|
|
3313
|
+
if stop.is_set():
|
|
3314
|
+
_logger.debug("table_function_worker_cancelled worker_index=%s", worker.worker_index)
|
|
3315
|
+
stream.cancel()
|
|
3316
|
+
break
|
|
3292
3317
|
|
|
3293
3318
|
output_queue.put(None) # Signal completion
|
|
3294
3319
|
except StopIteration:
|
|
@@ -3308,41 +3333,59 @@ class Client(CatalogClientMixin, AggregateClientMixin):
|
|
|
3308
3333
|
thread.start()
|
|
3309
3334
|
threads.append(thread)
|
|
3310
3335
|
|
|
3311
|
-
# Collect outputs from all workers until all are done
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
self._join_threads(threads)
|
|
3337
|
-
_logger.debug("all_table_function_workers_complete")
|
|
3336
|
+
# Collect outputs from all workers until all are done. The finally
|
|
3337
|
+
# block also runs when the consumer closes the generator early
|
|
3338
|
+
# (GeneratorExit at the yield) or a worker fails: the reader threads are
|
|
3339
|
+
# told to stop and joined before any stream is touched here.
|
|
3340
|
+
completed = False
|
|
3341
|
+
try:
|
|
3342
|
+
workers_finished = 0
|
|
3343
|
+
while workers_finished < num_workers:
|
|
3344
|
+
result = output_queue.get()
|
|
3345
|
+
|
|
3346
|
+
# Check for exceptions from worker threads
|
|
3347
|
+
if isinstance(result, BaseException):
|
|
3348
|
+
if isinstance(result, RpcError):
|
|
3349
|
+
raise ClientError.from_rpc_error(result) from result
|
|
3350
|
+
raise ClientError(f"Worker thread failed: {result}") from result
|
|
3351
|
+
|
|
3352
|
+
# None signals a worker finished
|
|
3353
|
+
if result is None:
|
|
3354
|
+
workers_finished += 1
|
|
3355
|
+
_logger.debug(
|
|
3356
|
+
"worker_finished workers_finished=%s total_workers=%s",
|
|
3357
|
+
workers_finished,
|
|
3358
|
+
num_workers,
|
|
3359
|
+
)
|
|
3360
|
+
continue
|
|
3338
3361
|
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3362
|
+
if batch_metadata_callback is not None:
|
|
3363
|
+
batch_metadata_callback(result.custom_metadata)
|
|
3364
|
+
yield result.batch
|
|
3365
|
+
completed = True
|
|
3366
|
+
finally:
|
|
3367
|
+
if not completed:
|
|
3368
|
+
stop.set()
|
|
3369
|
+
self._join_threads(threads)
|
|
3370
|
+
_logger.debug("all_table_function_workers_complete completed=%s", completed)
|
|
3371
|
+
|
|
3372
|
+
# Close streams and secondary workers. A stream a reader cancelled is
|
|
3373
|
+
# already closed, so close() is a no-op for it.
|
|
3374
|
+
for worker, thread in zip(all_workers, threads, strict=True):
|
|
3375
|
+
if thread.is_alive():
|
|
3376
|
+
# Still reading after the join timeout: the stream's state is
|
|
3377
|
+
# unknown and its reader still owns it. Kill the worker so
|
|
3378
|
+
# neither that reader nor a later stop() blocks on the pipe.
|
|
3379
|
+
_logger.warning("table_function_worker_killed worker_index=%s", worker.worker_index)
|
|
3380
|
+
if worker.proc is not None:
|
|
3381
|
+
worker.proc.kill()
|
|
3382
|
+
worker.stream = None
|
|
3383
|
+
continue
|
|
3384
|
+
if worker.stream is not None:
|
|
3385
|
+
worker.stream.close()
|
|
3386
|
+
worker.stream = None
|
|
3387
|
+
self._close_secondary_workers()
|
|
3388
|
+
_logger.debug("parallel_table_function_complete")
|
|
3346
3389
|
|
|
3347
3390
|
# ==================================================================
|
|
3348
3391
|
# Custom COPY formats
|
|
@@ -117,6 +117,34 @@ class FilterV2Error(ValueError):
|
|
|
117
117
|
"""A Filter Encoding v2 document is malformed or cannot be evaluated."""
|
|
118
118
|
|
|
119
119
|
|
|
120
|
+
def _payload_nbytes(batch: pa.RecordBatch) -> int:
|
|
121
|
+
"""Size of a filter payload batch, for the payload limit.
|
|
122
|
+
|
|
123
|
+
``RecordBatch.nbytes`` is not implemented for view types (``string_view``,
|
|
124
|
+
``binary_view``, ``list_view``) before pyarrow 19 and raises a raw
|
|
125
|
+
``ArrowTypeError``. Fall back to the total buffer size there, which walks
|
|
126
|
+
every buffer generically and can only overcount (shared buffers), never
|
|
127
|
+
undercount, so the limit still holds.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
batch: The filter payload batch.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
Its size in bytes, for comparison with ``MAX_PAYLOAD_BYTES``.
|
|
134
|
+
|
|
135
|
+
Raises:
|
|
136
|
+
FilterV2Error: If neither measurement is available for the batch.
|
|
137
|
+
"""
|
|
138
|
+
try:
|
|
139
|
+
return int(batch.nbytes)
|
|
140
|
+
except (pa.ArrowTypeError, pa.ArrowNotImplementedError):
|
|
141
|
+
pass
|
|
142
|
+
try:
|
|
143
|
+
return int(batch.get_total_buffer_size())
|
|
144
|
+
except (pa.ArrowTypeError, pa.ArrowNotImplementedError) as exc:
|
|
145
|
+
raise FilterV2Error(f"cannot measure filter payload size: {exc}") from exc
|
|
146
|
+
|
|
147
|
+
|
|
120
148
|
class PredicateMode(StrEnum):
|
|
121
149
|
"""Whether a predicate must be applied exactly or is only a pruning hint."""
|
|
122
150
|
|
|
@@ -592,7 +620,7 @@ class _Parser:
|
|
|
592
620
|
raise FilterV2Error(f"noncanonical payload field name {name!r}")
|
|
593
621
|
if name.startswith("type_") and self.batch.column(i)[0].is_valid:
|
|
594
622
|
raise FilterV2Error(f"{name} must contain a NULL value")
|
|
595
|
-
if self.batch
|
|
623
|
+
if _payload_nbytes(self.batch) > MAX_PAYLOAD_BYTES:
|
|
596
624
|
raise FilterV2Error("filter payload exceeds 16 MiB")
|
|
597
625
|
return parse_evaluation_context(self.batch.schema)
|
|
598
626
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/negative/unknown-node.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/empty-snapshot.json
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/cases/positive/remove-delta.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-add/expected.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-add/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-add/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-negate/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/arithmetic-negate/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/expected.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-eq/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/expected.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ge/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/expected.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-gt/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/expected.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-le/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/expected.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/filter.arrow
RENAMED
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-lt/input.arrow
RENAMED
|
File without changes
|
|
File without changes
|
{vgi_python-0.42.0 → vgi_python-0.42.1}/conformance/filter-v2/runtime/comparison-ne/expected.arrow
RENAMED
|
File without changes
|