vgi-python 0.30.0__tar.gz → 0.31.0__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.30.0 → vgi_python-0.31.0}/PKG-INFO +1 -1
- {vgi_python-0.30.0 → vgi_python-0.31.0}/pyproject.toml +1 -1
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_serialization.py +65 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_protocol_version.py +3 -3
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_wire_record_schema_parity.py +2 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/uv.lock +1 -1
- vgi_python-0.31.0/vgi/_test_fixtures/table/same_name_schemas.py +136 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/worker.py +63 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/catalog_interface.py +51 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/descriptors.py +15 -4
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/protocol.py +1 -1
- vgi_python-0.31.0/vgi/protocol_version.txt +1 -0
- vgi_python-0.30.0/vgi/protocol_version.txt +0 -1
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.gitattributes +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.github/dependabot.yml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.github/styles/config/vocabularies/VGI/accept.txt +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.github/workflows/ci.yml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.github/workflows/docs.yml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.github/workflows/integration.yml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.github/workflows/release.yml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.gitignore +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.python-version +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/.vale.ini +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/CLAUDE.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/DOCS_ACCEPTANCE_CRITERIA.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/DOCS_REVIEW_RUBRIC.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/DOCS_USABILITY_TEST.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/LICENSE +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/README.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/RELEASE-RUNBOOK.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/SECURITY.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/ci/README.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/ci/preprocess-require.awk +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/ci/run-integration.sh +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/dist-vgi/.gitignore +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/aggregate-functions.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/arguments.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/auth.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/catalogs.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/client.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/exceptions.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/filters.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/functions.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/http.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/index.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/metadata.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/observability.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/storage.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/transactor.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/api/worker.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/argument-serialization.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/apple-touch-icon.png +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/favicon-16x16.png +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/favicon-32x32.png +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/favicon.ico +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/kinds/aggregate.svg +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/kinds/buffering.svg +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/kinds/scalar.svg +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/kinds/table-in-out.svg +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/kinds/table.svg +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/logo.png +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/assets/social-card.png +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/authentication.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/catalog-interface.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/cli.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/column-statistics.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/concepts/index.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/contributing-docs.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/filter-pushdown.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/generator-api.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/global-functions.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/how-to/catalogs.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/how-to/function-patterns.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/how-to/http-auth.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/how-to/index.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/how-to/pushdown-and-statistics.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/how-to/state-storage.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/index.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/lifecycle.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/metadata.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/overrides/main.html +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/robots.txt +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/shared-storage.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/stylesheets/extra.css +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/tutorial/index.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/tutorial/scalar.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/tutorial/table.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/docs/vgi-logo.png +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/batch_index_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/cache_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/calc_scalar_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/calc_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/copy_format_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/filter_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/greeting_scalar_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/row_count_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/series_streaming_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/examples/sum_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/mkdocs.yml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/packages/vgi-fixtures/LICENSE +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/packages/vgi-fixtures/README.md +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/packages/vgi-fixtures/docker/Dockerfile +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/packages/vgi-fixtures/docker/docker-entrypoint.sh +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/packages/vgi-fixtures/pyproject.toml +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/scripts/measure_startup.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/scripts/run_all_tests.sh +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/test-data/generate.sh +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/_http_fixtures.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_attach_option.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_catalog_interface.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_client_catalog.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_column_statistics.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_declarative.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_example_worker_catalog.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_integration.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_required_filters.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_scan_branches.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_setting.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_time_travel.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/catalog/test_writable_table.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_aggregate_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_batch_metadata_callback.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_broken_pipe.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_cli.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_cli_catalog_functions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_copy_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_scan_branches_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_split_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_stop_force.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_table_column_statistics.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_time_travel_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/client/test_worker_debug.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/_stub.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/conftest.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_accumulate.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_aggregate.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_attach.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_bearer_auth.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_const_param_enforcement.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_container.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_copy_from.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_copy_to.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_directory_parity.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_function_inventory.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_github.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_http_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_http_external_location.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_http_upload_url.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_macro.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_overload.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_protocol_inventory.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_resumable_scan.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_scalar.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_scalar_attach_opaque_data.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_secret.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_settings.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_splits.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_table.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_table_in_out.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_view.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conformance/test_writable.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/conftest.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/anchor_len_overrun.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/bad_fingerprint.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/bad_flags_unsealed_but_key_present.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/bad_version.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/generate.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/manifest.json +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/reserved_flag_bit.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/stale_anchor.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/truncated.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/valid_sealed.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/data/split_tokens/valid_unsealed.bin +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_bernoulli_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_binary_packet_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_conditional_message_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_hash_seed_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_multiply_by_setting_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_multiply_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_random_bytes_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/scalar/test_return_secret_value_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_constant_columns_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_double_sequence_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_exception_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_filter_echo_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_logging_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_nested_sequence_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_partitioned_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_projected_data_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_sequence_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_settings_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_struct_settings_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/generator/test_ten_thousand_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table/test_wide_columns.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_buffer_input_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_echo_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_exception_functions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_filter_by_setting_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_repeat_inputs_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_substream_partial_sum_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/generator/test_sum_all_columns_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/test_blended_exchange.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/test_blended_metadata.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/table_in_out/test_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_access_log_audit.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_aggregate_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_argument_spec.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_auth.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_bind_exceptions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_bind_request_at_clause.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_bound_storage_conformance.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_cache_control.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_call_state_attach.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_catalog_auth_binding.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_client_oauth.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_copy_from_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_copy_to_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_docstrings.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_documentation_examples.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_example_function_arg_types.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_examples_workers.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_exception_handling.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_exceptions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_filter_pushdown.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_filter_pushdown_extension.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_fixture_catalog_parity.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_function_storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_function_storage_azure_sql.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_function_storage_cf_do.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_function_storage_cf_do_integration.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_function_storage_conformance.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_cpp_constants.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_cpp_protocol_version.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_cpp_request_builders.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_cpp_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_cpp_secret.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_go_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_java_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_protocol_version.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_rust_request_builders.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_rust_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_schemas_cross_lang.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_ts_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_generated_ts_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_http_demo_storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_http_s3_offload_input.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_http_s3_offload_output.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_launch_transport.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_metadata.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_mypy_consolidated.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_nest_tensor.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_otel.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_projection_enforcement.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_projection_repro.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_protocol_classes.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_resolved_secrets.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_schema_scoped_functions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_schema_utils.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_serve.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_setting_secret_annotations.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_signing_key.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_split_token.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_table_buffering_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_table_function_dynamic_to_string.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_tcp_transport.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_type_bounds.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_union_argument.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_worker_cli.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/test_worker_page.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/transactor/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/tests/transactor/test_transactor.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_duckdb.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_storage_profile.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/accumulate/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/accumulate/worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/_common.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/basic.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/dynamic.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/generic.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/listagg.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/percentile.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/same_name.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/secret_typed.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/streaming.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/varargs.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/aggregate/window.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/attach_options.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/bad_enum.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/bad_protocol.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/cancellable.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/catalog.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/companion.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/copy_from.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/copy_to.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/global_functions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/http_server.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/narrow_bind/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/narrow_bind/worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/nest_tensor.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/orchard_catalog.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/projection_repro/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/projection_repro/worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/_common.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/arithmetic.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/bench_ladder.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/binary.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/formatting.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/geo.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/null_handling.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/random_demo.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/same_name.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/settings_secrets.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/scalar/type_info.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/schema_reconcile/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/schema_reconcile/worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/simple_writable.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/_common.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/batch_index.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/batch_index_broken.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/cache.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/catalog_scans.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/filters.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/late_materialization.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/make_series.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/misc.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/order_modes.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/pairs.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/partition_columns.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/partition_columns_broken.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/profiling_example.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/required_filters.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/same_name_cached.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/sequence.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/settings.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/splits.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/transaction_storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/tt_pushdown.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/typed_probe.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/versioned.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table/wide.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table_in_out.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/table_in_out_same_name.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/twin_catalogs.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/versioned.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/versioned_tables.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/writable/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/writable/generic.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/writable/table.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/_test_fixtures/writable/worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/aggregate_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/argument_spec.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/arguments.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/attach_header.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/auth.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/cache_control.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/_descriptor_spec.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/attach_option.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/duckdb_statistics.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/secret_type.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/setting.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/catalog/storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/aggregate.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/catalog_mixin.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli_catalog.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli_schema.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli_table.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli_transaction.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli_utils.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/cli_view.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/client/errors.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/_common.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_constants.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_protocol_version.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_request_builders.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_secret_protocol_version.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_secret_request_builders.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/cpp_secret_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/go_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/java_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/protocol_version.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/rust_request_builders.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/rust_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/ts_client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/codegen/ts_schemas.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/copy_from_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/copy_to_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/exceptions.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/function_storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/function_storage_azure_sql.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/function_storage_cf_do.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/http/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/http/demo_storage.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/http/landing.html +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/http/landing_page.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/http/vgi-client.js +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/http/worker_page.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/invocation.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/logging_config.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/meta_worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/metadata.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/otel.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/profiling.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/py.typed +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/scalar_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/schema_utils.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/secret_protocol.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/secret_service.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/serve.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/split_token.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/table_buffering_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/table_filter_pushdown.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/table_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/table_in_out_function.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/transactor/__init__.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/transactor/_duckdb_compat.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/transactor/client.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/transactor/protocol.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/transactor/server.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/vgi/worker.py +0 -0
- {vgi_python-0.30.0 → vgi_python-0.31.0}/wrangler.jsonc +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vgi-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.31.0
|
|
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
|
|
@@ -1008,6 +1008,33 @@ class TestScanFunctionResultSerialization:
|
|
|
1008
1008
|
|
|
1009
1009
|
assert restored.required_extensions == ["iceberg", "parquet", "httpfs"]
|
|
1010
1010
|
|
|
1011
|
+
def test_schema_name_round_trip(self) -> None:
|
|
1012
|
+
"""schema_name (protocol 1.5.0) round-trips when set."""
|
|
1013
|
+
original = ScanFunctionResult(
|
|
1014
|
+
function_name="rowid_sequence",
|
|
1015
|
+
positional_arguments=[],
|
|
1016
|
+
named_arguments={},
|
|
1017
|
+
schema_name="main",
|
|
1018
|
+
)
|
|
1019
|
+
serialized = original.serialize()
|
|
1020
|
+
batch, _ = deserialize_record_batch(serialized)
|
|
1021
|
+
restored = ScanFunctionResult.deserialize(batch)
|
|
1022
|
+
|
|
1023
|
+
assert restored.schema_name == "main"
|
|
1024
|
+
|
|
1025
|
+
def test_schema_name_defaults_to_none(self) -> None:
|
|
1026
|
+
"""schema_name is None when the caller doesn't set it (e.g. a pre-1.5.0 peer)."""
|
|
1027
|
+
original = ScanFunctionResult(
|
|
1028
|
+
function_name="read_parquet",
|
|
1029
|
+
positional_arguments=[],
|
|
1030
|
+
named_arguments={},
|
|
1031
|
+
)
|
|
1032
|
+
serialized = original.serialize()
|
|
1033
|
+
batch, _ = deserialize_record_batch(serialized)
|
|
1034
|
+
restored = ScanFunctionResult.deserialize(batch)
|
|
1035
|
+
|
|
1036
|
+
assert restored.schema_name is None
|
|
1037
|
+
|
|
1011
1038
|
|
|
1012
1039
|
class TestSettingSpecSerialization:
|
|
1013
1040
|
"""Test SettingSpec serialization round-trip."""
|
|
@@ -1176,6 +1203,10 @@ class TestArrowSchemaCorrectness:
|
|
|
1176
1203
|
assert schema.field("function_name").type == pa.string()
|
|
1177
1204
|
assert schema.field("arguments").type == pa.binary()
|
|
1178
1205
|
assert schema.field("required_extensions").type == pa.list_(pa.string())
|
|
1206
|
+
# Added in protocol 1.5.0 — nullable so a pre-1.5.0 peer's payload
|
|
1207
|
+
# still deserializes (the column is simply absent there).
|
|
1208
|
+
assert schema.field("schema_name").type == pa.string()
|
|
1209
|
+
assert schema.field("schema_name").nullable is True
|
|
1179
1210
|
|
|
1180
1211
|
|
|
1181
1212
|
class TestScanBranchSerialization:
|
|
@@ -1192,6 +1223,10 @@ class TestScanBranchSerialization:
|
|
|
1192
1223
|
assert schema.field("branch_filter").nullable is True
|
|
1193
1224
|
assert schema.field("writable").type == pa.bool_()
|
|
1194
1225
|
assert schema.field("writable").nullable is False
|
|
1226
|
+
# Added in protocol 1.5.0 — function-branch only; None for a
|
|
1227
|
+
# catalog-table/format branch or a pre-1.5.0 peer.
|
|
1228
|
+
assert schema.field("schema_name").type == pa.string()
|
|
1229
|
+
assert schema.field("schema_name").nullable is True
|
|
1195
1230
|
|
|
1196
1231
|
def test_scan_branches_result_schema(self) -> None:
|
|
1197
1232
|
"""ScanBranchesResult Arrow schema: branches as list<binary>, required_extensions hoisted to top-level."""
|
|
@@ -1249,6 +1284,36 @@ class TestScanBranchSerialization:
|
|
|
1249
1284
|
assert restored.branch_filter == "ts >= TIMESTAMP '2026-05-15 00:00:00'"
|
|
1250
1285
|
assert len(restored.positional_arguments) == 2
|
|
1251
1286
|
|
|
1287
|
+
def test_scan_branch_schema_name_round_trip(self) -> None:
|
|
1288
|
+
"""A function branch's schema_name (protocol 1.5.0) round-trips when set."""
|
|
1289
|
+
from vgi.catalog import ScanBranch
|
|
1290
|
+
|
|
1291
|
+
original = ScanBranch(
|
|
1292
|
+
function_name="rowid_sequence",
|
|
1293
|
+
positional_arguments=[],
|
|
1294
|
+
named_arguments={},
|
|
1295
|
+
schema_name="main",
|
|
1296
|
+
)
|
|
1297
|
+
batch, _ = deserialize_record_batch(original.serialize())
|
|
1298
|
+
restored = ScanBranch.deserialize(batch)
|
|
1299
|
+
assert restored.schema_name == "main"
|
|
1300
|
+
|
|
1301
|
+
def test_scan_branch_schema_name_defaults_to_none(self) -> None:
|
|
1302
|
+
"""schema_name is None for a branch that doesn't set it (e.g. a catalog-table branch)."""
|
|
1303
|
+
from vgi.catalog import ScanBranch
|
|
1304
|
+
|
|
1305
|
+
original = ScanBranch(
|
|
1306
|
+
function_name="",
|
|
1307
|
+
positional_arguments=[],
|
|
1308
|
+
named_arguments={},
|
|
1309
|
+
source_catalog="lakehouse",
|
|
1310
|
+
source_schema="bronze",
|
|
1311
|
+
source_table="orders",
|
|
1312
|
+
)
|
|
1313
|
+
batch, _ = deserialize_record_batch(original.serialize())
|
|
1314
|
+
restored = ScanBranch.deserialize(batch)
|
|
1315
|
+
assert restored.schema_name is None
|
|
1316
|
+
|
|
1252
1317
|
def test_scan_branches_result_round_trip(self) -> None:
|
|
1253
1318
|
"""ScanBranchesResult round-trips two heterogeneous branches + required_extensions."""
|
|
1254
1319
|
from vgi.catalog import ScanBranch, ScanBranchesResult
|
|
@@ -32,14 +32,14 @@ CLIENT_PROTOCOL_VERSION = VgiProtocol.protocol_version
|
|
|
32
32
|
|
|
33
33
|
def test_client_protocol_version_is_canonical() -> None:
|
|
34
34
|
"""Sanity-check the constants this test reasons about haven't drifted apart."""
|
|
35
|
-
assert CLIENT_PROTOCOL_VERSION == "1.
|
|
35
|
+
assert CLIENT_PROTOCOL_VERSION == "1.5.0"
|
|
36
36
|
# The fixture must be a genuine mismatch in the major/minor that the
|
|
37
37
|
# framework compares; a patch-only difference would (correctly) pass.
|
|
38
38
|
assert BAD_PROTOCOL_VERSION.split(".")[:2] != CLIENT_PROTOCOL_VERSION.split(".")[:2]
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def test_mismatched_worker_protocol_version_raises() -> None:
|
|
42
|
-
"""A worker enforcing 99.0.0 must reject the 1.
|
|
42
|
+
"""A worker enforcing 99.0.0 must reject the 1.5.0 client at dispatch."""
|
|
43
43
|
with Client("vgi-fixture-bad-protocol-worker") as client, pytest.raises(ClientError) as exc_info:
|
|
44
44
|
list(
|
|
45
45
|
client.table_function(
|
|
@@ -54,5 +54,5 @@ def test_mismatched_worker_protocol_version_raises() -> None:
|
|
|
54
54
|
assert "protocol_version mismatch" in message
|
|
55
55
|
assert CLIENT_PROTOCOL_VERSION in message
|
|
56
56
|
assert BAD_PROTOCOL_VERSION in message
|
|
57
|
-
# Directional hint: the client (1.
|
|
57
|
+
# Directional hint: the client (1.5.0) is older than the worker (99.0.0).
|
|
58
58
|
assert "upgrade the VGI extension/client" in message
|
|
@@ -81,6 +81,7 @@ def _scan_function_result() -> ScanFunctionResult:
|
|
|
81
81
|
positional_arguments=positional,
|
|
82
82
|
named_arguments=named,
|
|
83
83
|
required_extensions=["parquet"],
|
|
84
|
+
schema_name="main",
|
|
84
85
|
)
|
|
85
86
|
|
|
86
87
|
|
|
@@ -98,6 +99,7 @@ def _scan_branch() -> ScanBranch:
|
|
|
98
99
|
format_name="parquet",
|
|
99
100
|
format_locations=["s3://bucket/a.parquet"],
|
|
100
101
|
format_options={"delim": pa.scalar("|", pa.string())},
|
|
102
|
+
schema_name="main",
|
|
101
103
|
)
|
|
102
104
|
|
|
103
105
|
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Copyright 2025, 2026 Query Farm LLC - https://query.farm
|
|
2
|
+
|
|
3
|
+
"""Same-name-in-two-schemas producer, backing a DECLARATIVE TABLE in each schema.
|
|
4
|
+
|
|
5
|
+
The table-dispatch member of the schema-disambiguation family (see
|
|
6
|
+
``scalar/same_name.py``, ``table_in_out_same_name.py``, ``aggregate/same_name.py``,
|
|
7
|
+
and ``table/same_name_cached.py`` for the result-cache member). Those probe a
|
|
8
|
+
function called directly (or the result cache); this one probes
|
|
9
|
+
``catalog_table_scan_function_get``/``catalog_table_scan_branches_get`` — the RPC
|
|
10
|
+
pair that tells a client which function backs a *declarative catalog table*.
|
|
11
|
+
|
|
12
|
+
``test_same_name_table_scan`` is a one-row producer registered under the SAME
|
|
13
|
+
NAME in BOTH the ``main`` and ``data`` schemas of the ``example`` catalog, each
|
|
14
|
+
emitting a single row tagged with its own schema. A declarative ``Table``
|
|
15
|
+
descriptor named ``test_same_name_table`` is registered in each schema too, each
|
|
16
|
+
backed by that schema's own implementation.
|
|
17
|
+
|
|
18
|
+
This is also the end-to-end regression guard for protocol 1.5.0's
|
|
19
|
+
``ScanFunctionResult.schema_name``/``ScanBranch.schema_name``: the C++ extension
|
|
20
|
+
now prefers the worker-declared schema over its old table-schema/default-schema
|
|
21
|
+
heuristic when resolving which catalog entry ``function_name`` refers to. A
|
|
22
|
+
worker that regressed to leaving ``schema_name`` unset, or a client that stopped
|
|
23
|
+
consuming it, would silently fall back to the old heuristic — which still
|
|
24
|
+
happens to get *this* two-schema case right (the table's own schema is tried
|
|
25
|
+
first and always matches here), so a regression here would show up not as a
|
|
26
|
+
wrong row, but as the exact filter/projection-pushdown breakage this session's
|
|
27
|
+
own investigation traced to passing the wire-parsed schema string somewhere the
|
|
28
|
+
resolver couldn't safely reuse it — see ``cache/filter_pushdown_keys.test`` and
|
|
29
|
+
this table family's own pushdown assertions below. Driven by
|
|
30
|
+
``table/same_name_schemas.test``.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
from dataclasses import dataclass
|
|
36
|
+
from typing import ClassVar
|
|
37
|
+
|
|
38
|
+
import pyarrow as pa
|
|
39
|
+
from vgi_rpc import ArrowSerializableDataclass
|
|
40
|
+
from vgi_rpc.rpc import OutputCollector
|
|
41
|
+
|
|
42
|
+
from vgi.metadata import FunctionExample
|
|
43
|
+
from vgi.schema_utils import schema
|
|
44
|
+
from vgi.table_function import (
|
|
45
|
+
ProcessParams,
|
|
46
|
+
TableFunctionGenerator,
|
|
47
|
+
bind_fixed_schema,
|
|
48
|
+
init_single_worker,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
FUNCTION_NAME = "test_same_name_table_scan"
|
|
52
|
+
TABLE_NAME = "test_same_name_table"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass(slots=True, frozen=True)
|
|
56
|
+
class _SameNameTableArgs:
|
|
57
|
+
"""Arguments for the same-name table producer (none)."""
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass(kw_only=True)
|
|
61
|
+
class _SameNameTableState(ArrowSerializableDataclass):
|
|
62
|
+
"""One-shot emit latch for the single output row."""
|
|
63
|
+
|
|
64
|
+
done: bool = False
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class _SameNameTableScan(TableFunctionGenerator[_SameNameTableArgs, _SameNameTableState]):
|
|
68
|
+
"""Shared body; each subclass supplies the schema it is declared in."""
|
|
69
|
+
|
|
70
|
+
#: Schema this implementation is declared in — the tag it stamps.
|
|
71
|
+
OWNING_SCHEMA: ClassVar[str] = ""
|
|
72
|
+
|
|
73
|
+
FunctionArguments = _SameNameTableArgs
|
|
74
|
+
FIXED_SCHEMA: ClassVar[pa.Schema] = schema(tag=pa.string())
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def initial_state(cls, params: ProcessParams[_SameNameTableArgs]) -> _SameNameTableState:
|
|
78
|
+
"""Fresh latch per invocation."""
|
|
79
|
+
return _SameNameTableState()
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def process(
|
|
83
|
+
cls,
|
|
84
|
+
params: ProcessParams[_SameNameTableArgs],
|
|
85
|
+
state: _SameNameTableState,
|
|
86
|
+
out: OutputCollector,
|
|
87
|
+
) -> None:
|
|
88
|
+
"""Emit the single schema-tagged row once."""
|
|
89
|
+
if state.done:
|
|
90
|
+
out.finish()
|
|
91
|
+
return
|
|
92
|
+
batch = pa.RecordBatch.from_pydict({"tag": [cls.OWNING_SCHEMA]}, schema=params.output_schema)
|
|
93
|
+
out.emit(batch)
|
|
94
|
+
state.done = True
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@init_single_worker
|
|
98
|
+
@bind_fixed_schema
|
|
99
|
+
class SameNameTableMainScan(_SameNameTableScan):
|
|
100
|
+
"""``test_same_name_table_scan`` as declared in the ``main`` schema."""
|
|
101
|
+
|
|
102
|
+
OWNING_SCHEMA = "main"
|
|
103
|
+
|
|
104
|
+
class Meta:
|
|
105
|
+
"""Function metadata."""
|
|
106
|
+
|
|
107
|
+
name = FUNCTION_NAME
|
|
108
|
+
description = "Schema-disambiguation probe; the main-schema table producer"
|
|
109
|
+
categories = ["generator", "testing"]
|
|
110
|
+
examples = [
|
|
111
|
+
FunctionExample(
|
|
112
|
+
sql="SELECT * FROM example.main.test_same_name_table",
|
|
113
|
+
description="One row tagged 'main'",
|
|
114
|
+
),
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
@init_single_worker
|
|
119
|
+
@bind_fixed_schema
|
|
120
|
+
class SameNameTableDataScan(_SameNameTableScan):
|
|
121
|
+
"""``test_same_name_table_scan`` as declared in the ``data`` schema."""
|
|
122
|
+
|
|
123
|
+
OWNING_SCHEMA = "data"
|
|
124
|
+
|
|
125
|
+
class Meta:
|
|
126
|
+
"""Function metadata."""
|
|
127
|
+
|
|
128
|
+
name = FUNCTION_NAME
|
|
129
|
+
description = "Schema-disambiguation probe; the data-schema table producer"
|
|
130
|
+
categories = ["generator", "testing"]
|
|
131
|
+
examples = [
|
|
132
|
+
FunctionExample(
|
|
133
|
+
sql="SELECT * FROM example.data.test_same_name_table",
|
|
134
|
+
description="One row tagged 'data'",
|
|
135
|
+
),
|
|
136
|
+
]
|
|
@@ -254,6 +254,10 @@ from vgi._test_fixtures.table.same_name_cached import (
|
|
|
254
254
|
SameNameDataCached,
|
|
255
255
|
SameNameMainCached,
|
|
256
256
|
)
|
|
257
|
+
from vgi._test_fixtures.table.same_name_schemas import (
|
|
258
|
+
SameNameTableDataScan,
|
|
259
|
+
SameNameTableMainScan,
|
|
260
|
+
)
|
|
257
261
|
from vgi._test_fixtures.table.tt_pushdown import (
|
|
258
262
|
_TT_SCHEMA,
|
|
259
263
|
TimeTravelPushdownFunction,
|
|
@@ -648,6 +652,7 @@ _EXAMPLE_CATALOG = Catalog(
|
|
|
648
652
|
SameNameMainBuffered,
|
|
649
653
|
SameNameMainAgg,
|
|
650
654
|
SameNameMainCached,
|
|
655
|
+
SameNameTableMainScan,
|
|
651
656
|
ScaleBySettingFunction,
|
|
652
657
|
SecretFieldFunction,
|
|
653
658
|
SmartFormatPrefixFunction,
|
|
@@ -733,6 +738,17 @@ _EXAMPLE_CATALOG = Catalog(
|
|
|
733
738
|
parameter_docs={"n": "Number of rows to generate"},
|
|
734
739
|
),
|
|
735
740
|
],
|
|
741
|
+
tables=[
|
|
742
|
+
# Schema-disambiguation probe (table dispatch): same registered
|
|
743
|
+
# table name as the -schema table below, backed by this
|
|
744
|
+
# schema's own scan-function implementation — see
|
|
745
|
+
# same_name_schemas.py.
|
|
746
|
+
Table(
|
|
747
|
+
name="test_same_name_table",
|
|
748
|
+
function=SameNameTableMainScan,
|
|
749
|
+
comment="Schema-disambiguation probe; the main-schema table",
|
|
750
|
+
),
|
|
751
|
+
],
|
|
736
752
|
),
|
|
737
753
|
Schema(
|
|
738
754
|
name="data",
|
|
@@ -747,8 +763,17 @@ _EXAMPLE_CATALOG = Catalog(
|
|
|
747
763
|
SameNameDataBuffered,
|
|
748
764
|
SameNameDataAgg,
|
|
749
765
|
SameNameDataCached,
|
|
766
|
+
SameNameTableDataScan,
|
|
750
767
|
],
|
|
751
768
|
tables=[
|
|
769
|
+
# Schema-disambiguation probe (table dispatch): same registered
|
|
770
|
+
# table name as the main-schema table above, backed by this
|
|
771
|
+
# schema's own scan-function implementation.
|
|
772
|
+
Table(
|
|
773
|
+
name="test_same_name_table",
|
|
774
|
+
function=SameNameTableDataScan,
|
|
775
|
+
comment="Schema-disambiguation probe; the data-schema table",
|
|
776
|
+
),
|
|
752
777
|
# Function-backed table: schema derived via bind()
|
|
753
778
|
Table(
|
|
754
779
|
name="large_sequence",
|
|
@@ -1577,11 +1602,13 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1577
1602
|
function_name="sequence",
|
|
1578
1603
|
positional_arguments=[pa.scalar(50)],
|
|
1579
1604
|
named_arguments={},
|
|
1605
|
+
schema_name="main",
|
|
1580
1606
|
),
|
|
1581
1607
|
ScanBranch(
|
|
1582
1608
|
function_name="sequence",
|
|
1583
1609
|
positional_arguments=[pa.scalar(50)],
|
|
1584
1610
|
named_arguments={},
|
|
1611
|
+
schema_name="main",
|
|
1585
1612
|
),
|
|
1586
1613
|
],
|
|
1587
1614
|
required_extensions=[],
|
|
@@ -1598,11 +1625,13 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1598
1625
|
function_name="split_sequence",
|
|
1599
1626
|
positional_arguments=[],
|
|
1600
1627
|
named_arguments={"n": pa.scalar(30), "splits": pa.scalar(6)},
|
|
1628
|
+
schema_name="main",
|
|
1601
1629
|
),
|
|
1602
1630
|
ScanBranch(
|
|
1603
1631
|
function_name="sequence",
|
|
1604
1632
|
positional_arguments=[pa.scalar(20)],
|
|
1605
1633
|
named_arguments={},
|
|
1634
|
+
schema_name="main",
|
|
1606
1635
|
),
|
|
1607
1636
|
],
|
|
1608
1637
|
required_extensions=[],
|
|
@@ -1619,12 +1648,14 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1619
1648
|
positional_arguments=[pa.scalar(100)],
|
|
1620
1649
|
named_arguments={},
|
|
1621
1650
|
branch_filter="n < 50",
|
|
1651
|
+
schema_name="main",
|
|
1622
1652
|
),
|
|
1623
1653
|
ScanBranch(
|
|
1624
1654
|
function_name="sequence",
|
|
1625
1655
|
positional_arguments=[pa.scalar(100)],
|
|
1626
1656
|
named_arguments={},
|
|
1627
1657
|
branch_filter="n >= 50",
|
|
1658
|
+
schema_name="main",
|
|
1628
1659
|
),
|
|
1629
1660
|
],
|
|
1630
1661
|
required_extensions=[],
|
|
@@ -1641,11 +1672,15 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1641
1672
|
function_name="sequence",
|
|
1642
1673
|
positional_arguments=[pa.scalar(50)],
|
|
1643
1674
|
named_arguments={},
|
|
1675
|
+
schema_name="main",
|
|
1644
1676
|
),
|
|
1645
1677
|
ScanBranch(
|
|
1646
1678
|
function_name="read_parquet",
|
|
1647
1679
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/vgi_hetero_branch.parquet", pa.string())],
|
|
1648
1680
|
named_arguments={},
|
|
1681
|
+
# read_parquet is a native DuckDB function delegated straight
|
|
1682
|
+
# through — it has no VGI-side schema of its own to report.
|
|
1683
|
+
schema_name=None,
|
|
1649
1684
|
),
|
|
1650
1685
|
],
|
|
1651
1686
|
required_extensions=[],
|
|
@@ -1684,6 +1719,9 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1684
1719
|
# non-null count moves.
|
|
1685
1720
|
"nullstr": pa.scalar("row_2", pa.string()),
|
|
1686
1721
|
},
|
|
1722
|
+
# Format branch, not a function branch — schema_name is
|
|
1723
|
+
# function-branch-only and doesn't apply here.
|
|
1724
|
+
schema_name=None,
|
|
1687
1725
|
),
|
|
1688
1726
|
],
|
|
1689
1727
|
required_extensions=[],
|
|
@@ -1701,11 +1739,15 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1701
1739
|
function_name="sequence",
|
|
1702
1740
|
positional_arguments=[pa.scalar(50)],
|
|
1703
1741
|
named_arguments={},
|
|
1742
|
+
schema_name="main",
|
|
1704
1743
|
),
|
|
1705
1744
|
ScanBranch(
|
|
1706
1745
|
function_name="iceberg_scan",
|
|
1707
1746
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/vgi_iceberg_branch", pa.string())],
|
|
1708
1747
|
named_arguments={},
|
|
1748
|
+
# iceberg_scan is a native DuckDB function delegated
|
|
1749
|
+
# straight through — no VGI-side schema of its own.
|
|
1750
|
+
schema_name=None,
|
|
1709
1751
|
),
|
|
1710
1752
|
],
|
|
1711
1753
|
required_extensions=["iceberg"],
|
|
@@ -1729,12 +1771,14 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1729
1771
|
positional_arguments=[pa.scalar(10)],
|
|
1730
1772
|
named_arguments={},
|
|
1731
1773
|
writable=True,
|
|
1774
|
+
schema_name="main",
|
|
1732
1775
|
),
|
|
1733
1776
|
ScanBranch(
|
|
1734
1777
|
function_name="sequence",
|
|
1735
1778
|
positional_arguments=[pa.scalar(10)],
|
|
1736
1779
|
named_arguments={},
|
|
1737
1780
|
writable=True,
|
|
1781
|
+
schema_name="main",
|
|
1738
1782
|
),
|
|
1739
1783
|
],
|
|
1740
1784
|
required_extensions=[],
|
|
@@ -1751,11 +1795,15 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1751
1795
|
function_name="sequence",
|
|
1752
1796
|
positional_arguments=[pa.scalar(50)],
|
|
1753
1797
|
named_arguments={},
|
|
1798
|
+
schema_name="main",
|
|
1754
1799
|
),
|
|
1755
1800
|
ScanBranch(
|
|
1756
1801
|
function_name="read_csv_auto",
|
|
1757
1802
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/vgi_nopushdown_branch.csv", pa.string())],
|
|
1758
1803
|
named_arguments={},
|
|
1804
|
+
# read_csv_auto is a native DuckDB function delegated
|
|
1805
|
+
# straight through — no VGI-side schema of its own.
|
|
1806
|
+
schema_name=None,
|
|
1759
1807
|
),
|
|
1760
1808
|
],
|
|
1761
1809
|
required_extensions=[],
|
|
@@ -1773,16 +1821,19 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1773
1821
|
function_name="read_parquet",
|
|
1774
1822
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/vgi_recon_a_b.parquet", pa.string())],
|
|
1775
1823
|
named_arguments={},
|
|
1824
|
+
schema_name=None,
|
|
1776
1825
|
),
|
|
1777
1826
|
ScanBranch(
|
|
1778
1827
|
function_name="read_parquet",
|
|
1779
1828
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/vgi_recon_b_a.parquet", pa.string())],
|
|
1780
1829
|
named_arguments={},
|
|
1830
|
+
schema_name=None,
|
|
1781
1831
|
),
|
|
1782
1832
|
ScanBranch(
|
|
1783
1833
|
function_name="read_parquet",
|
|
1784
1834
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/vgi_recon_a_only.parquet", pa.string())],
|
|
1785
1835
|
named_arguments={},
|
|
1836
|
+
schema_name=None,
|
|
1786
1837
|
),
|
|
1787
1838
|
],
|
|
1788
1839
|
required_extensions=[],
|
|
@@ -1823,6 +1874,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1823
1874
|
function_name="versioned_data_scan",
|
|
1824
1875
|
positional_arguments=[pa.scalar(version)],
|
|
1825
1876
|
named_arguments={},
|
|
1877
|
+
schema_name="main",
|
|
1826
1878
|
)
|
|
1827
1879
|
|
|
1828
1880
|
# cache_versioned: AT → version arg, same as versioned_data but the scan
|
|
@@ -1833,6 +1885,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1833
1885
|
function_name="cache_versioned_scan",
|
|
1834
1886
|
positional_arguments=[pa.scalar(version)],
|
|
1835
1887
|
named_arguments={},
|
|
1888
|
+
schema_name="main",
|
|
1836
1889
|
)
|
|
1837
1890
|
|
|
1838
1891
|
# Columns-based time-travel + pushdown: resolve AT → version and pass it
|
|
@@ -1843,6 +1896,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1843
1896
|
function_name="tt_pushdown_cols_scan",
|
|
1844
1897
|
positional_arguments=[pa.scalar(version)],
|
|
1845
1898
|
named_arguments={},
|
|
1899
|
+
schema_name="main",
|
|
1846
1900
|
)
|
|
1847
1901
|
|
|
1848
1902
|
# Handle the versioned_constraints table with time travel
|
|
@@ -1852,6 +1906,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1852
1906
|
function_name="versioned_constraints_scan",
|
|
1853
1907
|
positional_arguments=[pa.scalar(version)],
|
|
1854
1908
|
named_arguments={},
|
|
1909
|
+
schema_name="main",
|
|
1855
1910
|
)
|
|
1856
1911
|
|
|
1857
1912
|
# rff_parquet — single-branch native read_parquet delegation.
|
|
@@ -1860,6 +1915,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1860
1915
|
function_name="read_parquet",
|
|
1861
1916
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/rff_seg.parquet", pa.string())],
|
|
1862
1917
|
named_arguments={},
|
|
1918
|
+
schema_name=None,
|
|
1863
1919
|
)
|
|
1864
1920
|
|
|
1865
1921
|
# rff_hive / rff_hive_mixed — native read_parquet over a Hive glob.
|
|
@@ -1868,6 +1924,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1868
1924
|
function_name="read_parquet",
|
|
1869
1925
|
positional_arguments=[pa.scalar(f"{_BRANCH_DIR}/rff_hive/*/*/*.parquet", pa.string())],
|
|
1870
1926
|
named_arguments={"hive_partitioning": pa.scalar(True)},
|
|
1927
|
+
schema_name=None,
|
|
1871
1928
|
)
|
|
1872
1929
|
|
|
1873
1930
|
# Reject AT clause on tables that don't support time travel
|
|
@@ -1880,6 +1937,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1880
1937
|
function_name="sequence",
|
|
1881
1938
|
positional_arguments=[pa.scalar(10)],
|
|
1882
1939
|
named_arguments={},
|
|
1940
|
+
schema_name="main",
|
|
1883
1941
|
)
|
|
1884
1942
|
|
|
1885
1943
|
# Handle "numbers" and "volatile_numbers" — both use sequence(100)
|
|
@@ -1888,6 +1946,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1888
1946
|
function_name="sequence",
|
|
1889
1947
|
positional_arguments=[pa.scalar(100)],
|
|
1890
1948
|
named_arguments={},
|
|
1949
|
+
schema_name="main",
|
|
1891
1950
|
)
|
|
1892
1951
|
|
|
1893
1952
|
# funny_numbers — 123456 rows from sequence; statistics deliberately NOT set on
|
|
@@ -1897,6 +1956,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1897
1956
|
function_name="sequence",
|
|
1898
1957
|
positional_arguments=[pa.scalar(123456)],
|
|
1899
1958
|
named_arguments={},
|
|
1959
|
+
schema_name="main",
|
|
1900
1960
|
)
|
|
1901
1961
|
|
|
1902
1962
|
# Constraint example tables — simple static scan functions
|
|
@@ -1923,6 +1983,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1923
1983
|
function_name=_static_scan_tables[name.lower()],
|
|
1924
1984
|
positional_arguments=[],
|
|
1925
1985
|
named_arguments={},
|
|
1986
|
+
schema_name="main",
|
|
1926
1987
|
)
|
|
1927
1988
|
|
|
1928
1989
|
# Row ID test tables
|
|
@@ -1942,6 +2003,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1942
2003
|
"layout": pa.scalar(opts["layout"]),
|
|
1943
2004
|
"row_id_type": pa.scalar(opts["row_id_type"]),
|
|
1944
2005
|
},
|
|
2006
|
+
schema_name="main",
|
|
1945
2007
|
)
|
|
1946
2008
|
|
|
1947
2009
|
# Late-materialization tables → late_materialization scan function.
|
|
@@ -1957,6 +2019,7 @@ class ExampleCatalog(ReadOnlyCatalogInterface):
|
|
|
1957
2019
|
function_name="late_materialization",
|
|
1958
2020
|
positional_arguments=[pa.scalar(1000)],
|
|
1959
2021
|
named_arguments=late_mat_tables[name.lower()],
|
|
2022
|
+
schema_name="main",
|
|
1960
2023
|
)
|
|
1961
2024
|
|
|
1962
2025
|
return super().table_scan_function_get(
|