snowflake-connector-python 5.0.0b5__tar.gz → 5.0.0b6__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.
Potentially problematic release.
This version of snowflake-connector-python might be problematic. Click here for more details.
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/Cargo.lock +4 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/PKG-INFO +1 -1
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/protobuf/database_driver_v1.proto +45 -4
- snowflake_connector_python-5.0.0b6/sf_core/CHANGELOG.md +11 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/Cargo.toml +1 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/connection.rs +161 -27
- snowflake_connector_python-5.0.0b6/sf_core/src/apis/database_driver_v1/database.rs +126 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/error.rs +6 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/global_state.rs +11 -6
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/logout.rs +2 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/mod.rs +2 -1
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/query.rs +90 -7
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/result_set.rs +53 -68
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/statement.rs +105 -12
- snowflake_connector_python-5.0.0b6/sf_core/src/apis/database_driver_v1/stream_transfer.rs +429 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/validation.rs +16 -20
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/auth.rs +31 -8
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/bin/param_defs_export.rs +28 -8
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/error.rs +5 -0
- snowflake_connector_python-5.0.0b6/sf_core/src/chunks/mod.rs +854 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/compression.rs +16 -12
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/connection_config.rs +5 -22
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/param_registry.rs +269 -122
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/rest_parameters.rs +18 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/cache.rs +256 -12
- snowflake_connector_python-5.0.0b6/sf_core/src/crl/config.rs +221 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/error.rs +8 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/integration_test.rs +4 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/validator.rs +13 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/azure_transfer.rs +755 -90
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/cloud_http.rs +87 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/gcs_transfer.rs +11 -4
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/mod.rs +378 -174
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/multipart.rs +0 -1
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/s3_transfer.rs +12 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/types.rs +11 -5
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/fs_adapter.rs +3 -4
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/handle_manager.rs +4 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/http/retry.rs +53 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/lib.rs +1 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/apis/database_driver_v1/converter.rs +32 -17
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/apis/database_driver_v1/mod.rs +92 -12
- snowflake_connector_python-5.0.0b6/sf_core/src/query_types/mod.rs +5 -0
- snowflake_connector_python-5.0.0b6/sf_core/src/query_types/statement_type.rs +257 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/error.rs +6 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/external_browser.rs +17 -18
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/mod.rs +288 -191
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/authorization_code.rs +370 -134
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/mod.rs +5 -7
- snowflake_connector_python-5.0.0b6/sf_core/src/rest/snowflake/oauth/token.rs +717 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/prompt_lock.rs +127 -24
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/query_response.rs +13 -11
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/x509_utils.rs +10 -1
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/token_cache/file_cache.rs +78 -27
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/token_cache/keyring_cache.rs +37 -57
- snowflake_connector_python-5.0.0b6/sf_core/src/token_cache/mod.rs +1094 -0
- snowflake_connector_python-5.0.0b6/sf_core/src/utils/mod.rs +3 -0
- snowflake_connector_python-5.0.0b6/sf_core/src/utils/sync.rs +144 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/snowflake_test_client.rs +133 -7
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/client_api.py +4 -4
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/arrow_stream_utils.py +4 -6
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/__init__.py +10 -2
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/connection.py +68 -3
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/queries.py +1 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection_config_mixin.py +62 -4
- snowflake_connector_python-5.0.0b6/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +356 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.pyi +164 -12
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_services.py +66 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/result_batch.py +7 -13
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/statement_utils.py +73 -3
- snowflake_connector_python-5.0.0b6/src/snowflake/connector/_internal/utils.py +24 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/write_pandas_operation.py +225 -162
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/__init__.py +2 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/connection/_connection.py +32 -1
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/cursor/_base.py +47 -10
- snowflake_connector_python-5.0.0b6/src/snowflake/connector/aio/pandas_tools.py +278 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/result_batch.py +8 -7
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/connection/_connection.py +42 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/connection_config.py +31 -4
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/cursor/_base.py +12 -21
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/pandas_tools.py +0 -2
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/result_batch.py +12 -9
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/version.py +1 -1
- snowflake_connector_python-5.0.0b5/sf_core/CHANGELOG.md +0 -0
- snowflake_connector_python-5.0.0b5/sf_core/src/apis/database_driver_v1/database.rs +0 -141
- snowflake_connector_python-5.0.0b5/sf_core/src/chunks/mod.rs +0 -337
- snowflake_connector_python-5.0.0b5/sf_core/src/crl/config.rs +0 -104
- snowflake_connector_python-5.0.0b5/sf_core/src/rest/snowflake/oauth/token.rs +0 -535
- snowflake_connector_python-5.0.0b5/sf_core/src/token_cache/mod.rs +0 -595
- snowflake_connector_python-5.0.0b5/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +0 -348
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/.gitignore +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/README.md +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/build_common.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/error_trace/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/error_trace/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/error_trace_derive/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/error_trace_derive/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/hatch_build.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/Cargo.lock +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/README.md +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generator.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/csharp_generator.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/helpers.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/java_generator.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/json_generator.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/python_generator.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/generators/rust_generator.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/main.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/protobuf.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_generator/src/protoc_installer.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_utils/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/proto_utils/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/pyproject.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/README.md +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/benches/prefetch_bench.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/build.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/exports.def +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/alter_session_parser.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/async_query_registry.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/get_objects.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/heartbeat.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/like_pattern.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/multistatement.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/database_driver_v1/spcs_token.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/apis/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/arrow_utils.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/bin/README.md +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/bin/collect_chunk_data.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/bin/spcs_probe.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/bin/tls_client.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/arrow_parser.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/http_downloader.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/json_parser.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/memory_budget.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/mock.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/chunks/prefetch.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/compression_types.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/config_manager.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/configured_redirect_uri.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/ini_loader.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/logging_config_loader.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/logout.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/param_store.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/path_resolver.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/resolver.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/retry.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/settings.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/config/toml_loader.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/certificate_parser.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/disk_tests.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/crl/worker.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/diagnostic/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/env_vars.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/encryption.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/file_manager/path_expansion.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/fs_lock.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/http/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/logging/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/logging/callback_layer.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/logging/error.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/logging/log_manager.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/logging/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/logging/opentelemetry.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/perf_timing/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/perf_timing/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/apis/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/config_setting_ext.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/generated.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/protobuf/mod.rs +0 -0
- /snowflake_connector_python-5.0.0b5/sf_core/src/query_types.rs → /snowflake_connector_python-5.0.0b6/sf_core/src/query_types/row_type.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/refresh.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/async_exec.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/auth.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/browser.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/heartbeat.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/logout.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/native_okta.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/client_credentials.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/dpop.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/error.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/http_client.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/loopback_server.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/oauth/pkce.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/query_request.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/sql_state.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/telemetry.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/workload_identity/aws.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/workload_identity/azure.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/workload_identity/gcp.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/workload_identity/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/rest/snowflake/workload_identity/oidc.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/sensitive.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/stage_binding.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/environment.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/os_details.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/platform_detection/aws.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/platform_detection/azure.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/platform_detection/gcp.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/platform_detection/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/platform_detection/tests.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/serialization.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/snowflake_exporter.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/snowflake_processor.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/telemetry/types.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/aws_http_client.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/client.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/config.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/crl_verifier.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/error.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/revocation.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/src/tls/test_helpers.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/arrow_deserialize.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/arrow_deserialize_macro/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/arrow_deserialize_macro/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/arrow_extract_value.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/arrow_result_helper.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/cloud_gating.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/config.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/file_utils.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/auth.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/external_browser.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/mfa.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/oauth.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/okta.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/password.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/put_get.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/query.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mocks/session.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/mod.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/private_key_helper.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/put_get_common.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/test_server.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/test_utils.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/tests/common/tls_proxy.rs +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_common/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/_private_key_helper.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/bridge.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/c_api/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/c_api/_async.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/c_api/_common.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/c_api/_init.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/c_api/_performance.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/api_client/c_api/_sync.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/arrow_context.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/arrow_stream_async.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/arrow_stream_iterator.pyi +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/backward_compatibility.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/binding_converters.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/config_utils.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/connection_types.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/constants.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/decorators.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/connection/freezable_proxy.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/base.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/cursor_types.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/decorators.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/query_result.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/query_result_waiter.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/result_metadata.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/cursor/result_set_wrapper.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/decorators.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/errorcode.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/errorhandler.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/extras.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/logging/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/logging/config.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/logging/core_logger.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/logging/native_extension_logger.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/logout_config_mapping.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.pyx +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/protobuf_gen/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/protobuf_gen/proto_exception.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/snowflake_restful.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/sqlstate.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/status_codes.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/telemetry.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/text_utils.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/_internal/type_codes.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/README.md +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/connection/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/connection/_freezable_proxy.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/cursor/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/cursor/_dict_cursor.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/cursor/_result_set_wrapper.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/aio/cursor/_snowflake_cursor.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/auth/workload_identity.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/connection/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/connection/_freezable_proxy.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/cursor/__init__.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/cursor/_dict_cursor.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/cursor/_result_set_wrapper.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/cursor/_snowflake_cursor.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/types.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/tests/README.md +0 -0
|
@@ -3128,6 +3128,7 @@ dependencies = [
|
|
|
3128
3128
|
"napi-sys",
|
|
3129
3129
|
"nohash-hasher",
|
|
3130
3130
|
"rustc-hash",
|
|
3131
|
+
"tokio",
|
|
3131
3132
|
]
|
|
3132
3133
|
|
|
3133
3134
|
[[package]]
|
|
@@ -3209,6 +3210,9 @@ dependencies = [
|
|
|
3209
3210
|
"napi-build",
|
|
3210
3211
|
"napi-derive",
|
|
3211
3212
|
"sf_core",
|
|
3213
|
+
"tokio",
|
|
3214
|
+
"tracing",
|
|
3215
|
+
"tracing-subscriber",
|
|
3212
3216
|
]
|
|
3213
3217
|
|
|
3214
3218
|
[[package]]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 5.0.
|
|
3
|
+
Version: 5.0.0b6
|
|
4
4
|
Summary: Snowflake DB driver for Python (Private Preview)
|
|
5
5
|
Project-URL: Homepage, https://github.com/snowflakedb/universal-driver
|
|
6
6
|
Project-URL: Bug Reports, https://github.com/snowflakedb/universal-driver/issues
|
|
@@ -351,6 +351,11 @@ message ConnectionGetInfoResponse {
|
|
|
351
351
|
optional string warehouse = 11;
|
|
352
352
|
optional string master_token = 12;
|
|
353
353
|
optional string user_agent = 13;
|
|
354
|
+
optional string proxy_host = 14;
|
|
355
|
+
optional int64 proxy_port = 15;
|
|
356
|
+
optional string proxy_user = 16;
|
|
357
|
+
optional string proxy_password = 17;
|
|
358
|
+
optional string no_proxy = 18;
|
|
354
359
|
}
|
|
355
360
|
|
|
356
361
|
message ConnectionGetObjectsRequest {
|
|
@@ -563,6 +568,39 @@ message ConnectionAbortQueryResponse {
|
|
|
563
568
|
bool success = 1;
|
|
564
569
|
}
|
|
565
570
|
|
|
571
|
+
// Streaming PUT: upload an in-memory byte buffer using a PUT SQL statement.
|
|
572
|
+
// Backs JDBC `uploadStream` and Python `cursor.execute(file_stream=…)`.
|
|
573
|
+
message ConnectionUploadStreamRequest {
|
|
574
|
+
ConnectionHandle conn_handle = 1;
|
|
575
|
+
// The PUT SQL statement. Must begin with PUT and reference a `file://`
|
|
576
|
+
// path whose basename is used as the destination filename in the stage.
|
|
577
|
+
string sql = 2;
|
|
578
|
+
// Raw bytes to upload. The caller has already drained the source stream.
|
|
579
|
+
bytes data = 3;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// Mirrors `ResultSetResponse`: a PUT-shaped result set (handle + descriptor),
|
|
583
|
+
// so the caller can read the standard 8-column PUT rowset.
|
|
584
|
+
message ConnectionUploadStreamResponse {
|
|
585
|
+
ResultSetHandle result_set_handle = 1;
|
|
586
|
+
ResultSetDescriptor result_descriptor = 2;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
// Streaming GET: download a file from a stage and return its bytes. Backs
|
|
590
|
+
// JDBC `downloadStream`.
|
|
591
|
+
message ConnectionDownloadStreamRequest {
|
|
592
|
+
ConnectionHandle conn_handle = 1;
|
|
593
|
+
string stage_name = 2;
|
|
594
|
+
string source_filename = 3;
|
|
595
|
+
// When true, the core gunzips the downloaded bytes before returning
|
|
596
|
+
// (opt-in; the bytes are returned verbatim otherwise).
|
|
597
|
+
bool decompress = 4;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
message ConnectionDownloadStreamResponse {
|
|
601
|
+
bytes data = 1;
|
|
602
|
+
}
|
|
603
|
+
|
|
566
604
|
// Statement service requests and responses
|
|
567
605
|
|
|
568
606
|
message StatementNewRequest {
|
|
@@ -696,9 +734,9 @@ message ResultChunk {
|
|
|
696
734
|
|
|
697
735
|
|
|
698
736
|
message DatabaseFetchChunkRequest {
|
|
699
|
-
|
|
700
|
-
ResultChunk
|
|
701
|
-
// Required
|
|
737
|
+
ConnectionHandle conn_handle = 1;
|
|
738
|
+
repeated ResultChunk chunks = 2;
|
|
739
|
+
// Required for JSON remote chunks (forward from ResultSetGetChunksResponse.columns). Ignored otherwise.
|
|
702
740
|
repeated ColumnMetadata columns = 3;
|
|
703
741
|
}
|
|
704
742
|
|
|
@@ -722,7 +760,7 @@ message ResultSetGetChunksRequest {
|
|
|
722
760
|
|
|
723
761
|
message ResultSetGetChunksResponse {
|
|
724
762
|
repeated ResultChunk chunks = 1;
|
|
725
|
-
// Column metadata. Required
|
|
763
|
+
// Column metadata. Required when any chunk is CHUNK_FORMAT_JSON; ignored for Arrow-only results.
|
|
726
764
|
repeated ColumnMetadata columns = 2;
|
|
727
765
|
}
|
|
728
766
|
|
|
@@ -922,6 +960,9 @@ service DatabaseDriver {
|
|
|
922
960
|
rpc ConnectionGetQueryStatus(ConnectionGetQueryStatusRequest) returns (ConnectionGetQueryStatusResponse);
|
|
923
961
|
// Abort a running query by Snowflake Query ID
|
|
924
962
|
rpc ConnectionAbortQuery(ConnectionAbortQueryRequest) returns (ConnectionAbortQueryResponse);
|
|
963
|
+
// Streaming PUT (upload bytes) / GET (download to bytes) from a stage
|
|
964
|
+
rpc ConnectionUploadStream(ConnectionUploadStreamRequest) returns (ConnectionUploadStreamResponse);
|
|
965
|
+
rpc ConnectionDownloadStream(ConnectionDownloadStreamRequest) returns (ConnectionDownloadStreamResponse);
|
|
925
966
|
// Generic HTTP request through sf_core's TLS/OCSP/CRL client
|
|
926
967
|
rpc ConnectionSendHttp(ConnectionSendHttpRequest) returns (ConnectionSendHttpResponse);
|
|
927
968
|
// Token request (ISSUE/RENEW) executed with master token in sf_core
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Upcoming Release
|
|
4
|
+
|
|
5
|
+
Bug fixes:
|
|
6
|
+
|
|
7
|
+
- Fixed an issue where cached OAuth tokens could be incorrectly shared across different Snowflake accounts or roles that used the same identity provider, and where tokens stored by one driver could not be read by another. The token cache key now includes the IdP URL, Snowflake account URL, username, role, and token type, all normalized and hashed uniformly across drivers (`SnowflakeTokenCache.v2.<sha256>`). Existing v1 cache entries are orphaned; the driver re-authenticates transparently on the next connection and writes a v2 entry. (snowflakedb/universal-driver#TBD)
|
|
8
|
+
|
|
9
|
+
Test improvements:
|
|
10
|
+
|
|
11
|
+
- `SnowflakeTestClient` now automatically releases statement handles and result set handles via Drop, eliminating manual `release_statement()` and `result_set_release()` calls in tests and preventing resource leaks when tests panic.
|
{snowflake_connector_python-5.0.0b5 → snowflake_connector_python-5.0.0b6}/sf_core/Cargo.toml
RENAMED
|
@@ -139,6 +139,7 @@ arrow_deserialize_macro = { path = "tests/common/arrow_deserialize_macro" }
|
|
|
139
139
|
bzip2 = "0.6.0"
|
|
140
140
|
brotli = "8.0.2"
|
|
141
141
|
zstd = "0.13.3"
|
|
142
|
+
flate2 = "1.1.2"
|
|
142
143
|
test-case = "3.3.1"
|
|
143
144
|
# Dev/test reqwest: also rustls-only so test builds don't re-introduce
|
|
144
145
|
# native-tls (feature unification would otherwise pull `default-tls` back in).
|
|
@@ -25,13 +25,14 @@ use super::validation::{
|
|
|
25
25
|
use crate::config::ParamStore;
|
|
26
26
|
use crate::config::connection_config::{ConnectionConfig, DiagnosticConfig};
|
|
27
27
|
use crate::config::logout::LogoutConfig;
|
|
28
|
-
use crate::config::param_registry::{ParamKey,
|
|
28
|
+
use crate::config::param_registry::{ParamKey, param_names};
|
|
29
29
|
use crate::config::resolver;
|
|
30
30
|
use crate::config::rest_parameters::{
|
|
31
31
|
ClientInfo, LoginMethod, LoginParameters, QueryParameters, resolve_log_max_query_length,
|
|
32
32
|
resolve_log_query_parameters, resolve_log_query_text,
|
|
33
33
|
};
|
|
34
34
|
use crate::config::retry::RetryPolicy;
|
|
35
|
+
use crate::config::settings::Settings;
|
|
35
36
|
use crate::diagnostic::DiagnosticRunner;
|
|
36
37
|
use crate::handle_manager::Handle;
|
|
37
38
|
use crate::rest::snowflake::{
|
|
@@ -39,7 +40,7 @@ use crate::rest::snowflake::{
|
|
|
39
40
|
heartbeat, snowflake_query_with_client,
|
|
40
41
|
};
|
|
41
42
|
use crate::sensitive::SensitiveString;
|
|
42
|
-
use crate::
|
|
43
|
+
use crate::tls::config::ProxyConfig;
|
|
43
44
|
|
|
44
45
|
/// Whether `execute_session_sql` should refresh the connection's local
|
|
45
46
|
/// session-state cache (`session_parameters`, `final_session_names`) from
|
|
@@ -298,16 +299,16 @@ impl DatabaseDriverV1 {
|
|
|
298
299
|
let init_params = conn.init_session_parameters.clone();
|
|
299
300
|
let resolved_snapshot = resolved.clone();
|
|
300
301
|
|
|
301
|
-
//
|
|
302
|
-
//
|
|
303
|
-
// via regular connection
|
|
304
|
-
|
|
305
|
-
//
|
|
306
|
-
//
|
|
307
|
-
//
|
|
308
|
-
|
|
302
|
+
// Session parameters to send in the login request. Seeded
|
|
303
|
+
// with unrecognized connection options (so drivers can set
|
|
304
|
+
// arbitrary Snowflake session params via regular connection
|
|
305
|
+
// options), then augmented below with registered session
|
|
306
|
+
// params that belong in SESSION_PARAMETERS
|
|
307
|
+
// (CLIENT_SESSION_KEEP_ALIVE, its heartbeat frequency,
|
|
308
|
+
// CLIENT_PREFETCH_THREADS, QUERY_TAG) to match the Python connector.
|
|
309
|
+
let mut login_session_params = collect_unknown_settings(&conn.connection_seed);
|
|
309
310
|
if let Some(v) = resolved.get_bool(param_names::CLIENT_SESSION_KEEP_ALIVE) {
|
|
310
|
-
|
|
311
|
+
login_session_params.insert(
|
|
311
312
|
param_names::CLIENT_SESSION_KEEP_ALIVE.as_str().to_string(),
|
|
312
313
|
v.to_string(),
|
|
313
314
|
);
|
|
@@ -315,22 +316,34 @@ impl DatabaseDriverV1 {
|
|
|
315
316
|
if let Some(v) =
|
|
316
317
|
resolved.get_int(param_names::CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY)
|
|
317
318
|
{
|
|
318
|
-
|
|
319
|
+
login_session_params.insert(
|
|
319
320
|
param_names::CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY
|
|
320
321
|
.as_str()
|
|
321
322
|
.to_string(),
|
|
322
323
|
v.to_string(),
|
|
323
324
|
);
|
|
324
325
|
}
|
|
326
|
+
if let Some(v) = resolved.get_int(param_names::CLIENT_PREFETCH_THREADS) {
|
|
327
|
+
login_session_params.insert(
|
|
328
|
+
param_names::CLIENT_PREFETCH_THREADS.as_str().to_string(),
|
|
329
|
+
v.to_string(),
|
|
330
|
+
);
|
|
331
|
+
}
|
|
325
332
|
if resolved
|
|
326
333
|
.get_bool(param_names::VALIDATE_DEFAULT_PARAMETERS)
|
|
327
334
|
.unwrap_or(false)
|
|
328
335
|
{
|
|
329
|
-
|
|
336
|
+
login_session_params.insert(
|
|
330
337
|
"CLIENT_VALIDATE_DEFAULT_PARAMETERS".to_string(),
|
|
331
338
|
"true".to_string(),
|
|
332
339
|
);
|
|
333
340
|
}
|
|
341
|
+
// QUERY_TAG is a registered session parameter (also
|
|
342
|
+
// statement-overridable), so it isn't "unknown"; mirror a
|
|
343
|
+
// connection-level value into the login session parameters.
|
|
344
|
+
if let Some(v) = resolved.get_string(param_names::QUERY_TAG) {
|
|
345
|
+
login_session_params.insert("QUERY_TAG".to_string(), v);
|
|
346
|
+
}
|
|
334
347
|
let init_params = match init_params {
|
|
335
348
|
Some(explicit) => {
|
|
336
349
|
// Normalize explicit keys to uppercase so precedence
|
|
@@ -340,12 +353,12 @@ impl DatabaseDriverV1 {
|
|
|
340
353
|
.map(|(k, v)| (k.to_uppercase(), v))
|
|
341
354
|
.collect();
|
|
342
355
|
// Explicit session params take precedence
|
|
343
|
-
for (k, v) in
|
|
356
|
+
for (k, v) in login_session_params {
|
|
344
357
|
merged.entry(k).or_insert(v);
|
|
345
358
|
}
|
|
346
359
|
Some(merged)
|
|
347
360
|
}
|
|
348
|
-
None if !
|
|
361
|
+
None if !login_session_params.is_empty() => Some(login_session_params),
|
|
349
362
|
None => None,
|
|
350
363
|
};
|
|
351
364
|
|
|
@@ -439,7 +452,7 @@ impl DatabaseDriverV1 {
|
|
|
439
452
|
&http_client,
|
|
440
453
|
&login_parameters,
|
|
441
454
|
init_params.as_ref(),
|
|
442
|
-
token_cache
|
|
455
|
+
token_cache,
|
|
443
456
|
Some(&self.prompt_locks),
|
|
444
457
|
&retry_policy,
|
|
445
458
|
);
|
|
@@ -557,13 +570,21 @@ impl DatabaseDriverV1 {
|
|
|
557
570
|
session_token: conn.tokens.clone(),
|
|
558
571
|
});
|
|
559
572
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
573
|
+
if let Some(sessions) = self.telemetry_sessions() {
|
|
574
|
+
sessions
|
|
575
|
+
.write()
|
|
576
|
+
.unwrap_or_else(|e| e.into_inner())
|
|
577
|
+
.insert(session_id, exporter_session);
|
|
578
|
+
} else {
|
|
579
|
+
// `telemetry_enabled` implies `telemetry_sessions()`
|
|
580
|
+
// was Some (checked above); reaching None here means
|
|
581
|
+
// the registry was cleared concurrently.
|
|
582
|
+
tracing::error!(
|
|
583
|
+
"telemetry session registry unexpectedly absent after \
|
|
584
|
+
telemetry_enabled check; session {session_id} not \
|
|
585
|
+
registered for telemetry"
|
|
586
|
+
);
|
|
587
|
+
}
|
|
567
588
|
|
|
568
589
|
let env_info = conn
|
|
569
590
|
.wrapper_identity
|
|
@@ -1082,6 +1103,14 @@ impl Connection {
|
|
|
1082
1103
|
crate::rest::snowflake::query_response::read_use_s3_regional_url_session_param(¶ms)
|
|
1083
1104
|
}
|
|
1084
1105
|
|
|
1106
|
+
/// Reads `unsafe_file_write` from the connection seed. Default `false`
|
|
1107
|
+
/// (owner-only 0o600 permissions on GET downloads on Unix).
|
|
1108
|
+
pub(crate) fn unsafe_file_write(&self) -> bool {
|
|
1109
|
+
self.connection_seed
|
|
1110
|
+
.get_bool(param_names::UNSAFE_FILE_WRITE)
|
|
1111
|
+
.unwrap_or(false)
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1085
1114
|
/// The resolved TLS config for this connection, read from the established
|
|
1086
1115
|
/// [`ClientInfo`]. Falls back to the default `TlsConfig` before login
|
|
1087
1116
|
/// (when `client_info` is unset). Used by the storage (S3/GCS/Azure) HTTP
|
|
@@ -1313,7 +1342,7 @@ impl RefreshContext {
|
|
|
1313
1342
|
pub async fn from_arc(conn: &Arc<Mutex<Connection>>) -> Result<Self, ApiError> {
|
|
1314
1343
|
let guard = conn.lock().await;
|
|
1315
1344
|
if guard.is_closed.load(Ordering::SeqCst) {
|
|
1316
|
-
return
|
|
1345
|
+
return ConnectionClosedSnafu {}.fail();
|
|
1317
1346
|
}
|
|
1318
1347
|
Self::new(&guard)
|
|
1319
1348
|
}
|
|
@@ -1503,10 +1532,9 @@ impl RefreshContext {
|
|
|
1503
1532
|
F: Fn(SensitiveString) -> Fut,
|
|
1504
1533
|
Fut: Future<Output = Result<T, RestError>>,
|
|
1505
1534
|
{
|
|
1506
|
-
use snafu::IntoError;
|
|
1507
1535
|
crate::refresh::execute_with_refresh(self, |token| {
|
|
1508
1536
|
let fut = f(token);
|
|
1509
|
-
async move { fut.await.
|
|
1537
|
+
async move { fut.await.context(QuerySnafu) }
|
|
1510
1538
|
})
|
|
1511
1539
|
.await
|
|
1512
1540
|
}
|
|
@@ -1695,6 +1723,16 @@ pub struct ConnectionInfo {
|
|
|
1695
1723
|
pub master_token: Option<SensitiveString>,
|
|
1696
1724
|
/// The User-Agent string built by the core for this client
|
|
1697
1725
|
pub user_agent: Option<String>,
|
|
1726
|
+
/// The configured HTTP proxy hostname, if any
|
|
1727
|
+
pub proxy_host: Option<String>,
|
|
1728
|
+
/// The configured HTTP proxy port, if any
|
|
1729
|
+
pub proxy_port: Option<i64>,
|
|
1730
|
+
/// The configured HTTP proxy username for Basic auth, if any
|
|
1731
|
+
pub proxy_user: Option<String>,
|
|
1732
|
+
/// The configured HTTP proxy password for Basic auth (redacted in Debug output)
|
|
1733
|
+
pub proxy_password: Option<SensitiveString>,
|
|
1734
|
+
/// Comma-separated list of hosts that bypass the proxy, if configured
|
|
1735
|
+
pub no_proxy: Option<String>,
|
|
1698
1736
|
}
|
|
1699
1737
|
|
|
1700
1738
|
fn setting_as_display_string(setting: &Setting) -> Option<String> {
|
|
@@ -1848,6 +1886,18 @@ impl DatabaseDriverV1 {
|
|
|
1848
1886
|
.as_ref()
|
|
1849
1887
|
.map(crate::rest::snowflake::user_agent);
|
|
1850
1888
|
|
|
1889
|
+
// Rebuild the effective proxy config from the resolved login
|
|
1890
|
+
// snapshot (falling back to the raw seed before login) so the
|
|
1891
|
+
// legacy `PROXY` URL form is merged with the individual
|
|
1892
|
+
// `proxy_*` fields exactly as the HTTP client sees them. Reuses
|
|
1893
|
+
// the single parser rather than re-reading fields piecemeal.
|
|
1894
|
+
let proxy_settings: &dyn Settings = conn
|
|
1895
|
+
.resolved_connect
|
|
1896
|
+
.as_ref()
|
|
1897
|
+
.map(|s| s as &dyn Settings)
|
|
1898
|
+
.unwrap_or(&conn.connection_seed);
|
|
1899
|
+
let proxy = ProxyConfig::from_settings(proxy_settings);
|
|
1900
|
+
|
|
1851
1901
|
Ok(ConnectionInfo {
|
|
1852
1902
|
host,
|
|
1853
1903
|
port,
|
|
@@ -1862,6 +1912,11 @@ impl DatabaseDriverV1 {
|
|
|
1862
1912
|
warehouse,
|
|
1863
1913
|
master_token,
|
|
1864
1914
|
user_agent,
|
|
1915
|
+
proxy_host: proxy.host,
|
|
1916
|
+
proxy_port: proxy.port,
|
|
1917
|
+
proxy_user: proxy.user,
|
|
1918
|
+
proxy_password: proxy.password,
|
|
1919
|
+
no_proxy: proxy.no_proxy,
|
|
1865
1920
|
})
|
|
1866
1921
|
}
|
|
1867
1922
|
None => InvalidArgumentSnafu {
|
|
@@ -2023,7 +2078,7 @@ impl DatabaseDriverV1 {
|
|
|
2023
2078
|
|
|
2024
2079
|
let (canonical, def) = canonicalize_setting_key(&key);
|
|
2025
2080
|
if let Some(d) = def
|
|
2026
|
-
&& d.
|
|
2081
|
+
&& d.is_session_scoped()
|
|
2027
2082
|
{
|
|
2028
2083
|
if let Some(s) = conn
|
|
2029
2084
|
.session_overrides
|
|
@@ -2908,6 +2963,85 @@ mod tests {
|
|
|
2908
2963
|
assert_eq!(info.warehouse, None);
|
|
2909
2964
|
assert!(info.session_token.is_none());
|
|
2910
2965
|
assert_eq!(info.session_id, None);
|
|
2966
|
+
assert_eq!(info.proxy_host, None);
|
|
2967
|
+
assert_eq!(info.proxy_port, None);
|
|
2968
|
+
assert_eq!(info.proxy_user, None);
|
|
2969
|
+
assert!(info.proxy_password.is_none());
|
|
2970
|
+
assert_eq!(info.no_proxy, None);
|
|
2971
|
+
|
|
2972
|
+
ds.connection_release(handle).unwrap();
|
|
2973
|
+
}
|
|
2974
|
+
|
|
2975
|
+
#[tokio::test]
|
|
2976
|
+
async fn connection_get_info_returns_proxy_settings() {
|
|
2977
|
+
let ds = DatabaseDriverV1::new();
|
|
2978
|
+
let handle = ds.connection_new();
|
|
2979
|
+
ds.connection_set_option(
|
|
2980
|
+
handle,
|
|
2981
|
+
"proxy_host".into(),
|
|
2982
|
+
Setting::String("proxy.example.com".into()),
|
|
2983
|
+
)
|
|
2984
|
+
.await
|
|
2985
|
+
.unwrap();
|
|
2986
|
+
ds.connection_set_option(handle, "proxy_port".into(), Setting::Int(8080))
|
|
2987
|
+
.await
|
|
2988
|
+
.unwrap();
|
|
2989
|
+
ds.connection_set_option(handle, "proxy_user".into(), Setting::String("puser".into()))
|
|
2990
|
+
.await
|
|
2991
|
+
.unwrap();
|
|
2992
|
+
ds.connection_set_option(
|
|
2993
|
+
handle,
|
|
2994
|
+
"proxy_password".into(),
|
|
2995
|
+
Setting::String("ppass".into()),
|
|
2996
|
+
)
|
|
2997
|
+
.await
|
|
2998
|
+
.unwrap();
|
|
2999
|
+
ds.connection_set_option(
|
|
3000
|
+
handle,
|
|
3001
|
+
"no_proxy".into(),
|
|
3002
|
+
Setting::String("localhost,127.0.0.1".into()),
|
|
3003
|
+
)
|
|
3004
|
+
.await
|
|
3005
|
+
.unwrap();
|
|
3006
|
+
|
|
3007
|
+
let info = ds.connection_get_info(handle).await.unwrap();
|
|
3008
|
+
|
|
3009
|
+
assert_eq!(info.proxy_host, Some("proxy.example.com".into()));
|
|
3010
|
+
assert_eq!(info.proxy_port, Some(8080));
|
|
3011
|
+
assert_eq!(info.proxy_user, Some("puser".into()));
|
|
3012
|
+
assert_eq!(
|
|
3013
|
+
info.proxy_password.as_ref().map(|p| p.reveal().as_str()),
|
|
3014
|
+
Some("ppass")
|
|
3015
|
+
);
|
|
3016
|
+
assert_eq!(info.no_proxy, Some("localhost,127.0.0.1".into()));
|
|
3017
|
+
|
|
3018
|
+
ds.connection_release(handle).unwrap();
|
|
3019
|
+
}
|
|
3020
|
+
|
|
3021
|
+
/// The legacy ODBC `PROXY` URL form must be parsed and surfaced through
|
|
3022
|
+
/// `connection_get_info` exactly as the HTTP client sees it, since the
|
|
3023
|
+
/// info aggregation reuses `ProxyConfig::from_settings`.
|
|
3024
|
+
#[tokio::test]
|
|
3025
|
+
async fn connection_get_info_parses_legacy_proxy_url() {
|
|
3026
|
+
let ds = DatabaseDriverV1::new();
|
|
3027
|
+
let handle = ds.connection_new();
|
|
3028
|
+
ds.connection_set_option(
|
|
3029
|
+
handle,
|
|
3030
|
+
"proxy".into(),
|
|
3031
|
+
Setting::String("http://puser:ppass@proxy.example.com:8080".into()),
|
|
3032
|
+
)
|
|
3033
|
+
.await
|
|
3034
|
+
.unwrap();
|
|
3035
|
+
|
|
3036
|
+
let info = ds.connection_get_info(handle).await.unwrap();
|
|
3037
|
+
|
|
3038
|
+
assert_eq!(info.proxy_host, Some("proxy.example.com".into()));
|
|
3039
|
+
assert_eq!(info.proxy_port, Some(8080));
|
|
3040
|
+
assert_eq!(info.proxy_user, Some("puser".into()));
|
|
3041
|
+
assert_eq!(
|
|
3042
|
+
info.proxy_password.as_ref().map(|p| p.reveal().as_str()),
|
|
3043
|
+
Some("ppass")
|
|
3044
|
+
);
|
|
2911
3045
|
|
|
2912
3046
|
ds.connection_release(handle).unwrap();
|
|
2913
3047
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
use std::collections::HashMap;
|
|
2
|
+
use tokio::sync::Mutex;
|
|
3
|
+
|
|
4
|
+
use super::error::*;
|
|
5
|
+
use super::global_state::DatabaseDriverV1;
|
|
6
|
+
use super::validation::{ValidationIssue, resolve_and_apply_options};
|
|
7
|
+
use crate::chunks::{ChunkFormatKind, FetchChunkInput, PrefetchConfig, fetch_chunks_reader};
|
|
8
|
+
use crate::config::ParamStore;
|
|
9
|
+
use crate::config::settings::Setting;
|
|
10
|
+
use crate::handle_manager::Handle;
|
|
11
|
+
use crate::query_types::RowType;
|
|
12
|
+
use crate::tls;
|
|
13
|
+
use arrow::ffi_stream::FFI_ArrowArrayStream;
|
|
14
|
+
use snafu::ResultExt;
|
|
15
|
+
|
|
16
|
+
impl DatabaseDriverV1 {
|
|
17
|
+
pub fn database_new(&self) -> Handle {
|
|
18
|
+
self.databases.add_handle(Mutex::new(Database::new()))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
pub async fn database_set_options(
|
|
22
|
+
&self,
|
|
23
|
+
db_handle: Handle,
|
|
24
|
+
options: HashMap<String, Setting>,
|
|
25
|
+
) -> Result<Vec<ValidationIssue>, ApiError> {
|
|
26
|
+
match self.databases.get_obj(db_handle) {
|
|
27
|
+
Some(db_ptr) => {
|
|
28
|
+
let mut db = db_ptr.lock().await;
|
|
29
|
+
resolve_and_apply_options(&mut db.settings, options)
|
|
30
|
+
}
|
|
31
|
+
None => InvalidArgumentSnafu {
|
|
32
|
+
argument: "Database handle not found".to_string(),
|
|
33
|
+
}
|
|
34
|
+
.fail(),
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
pub fn database_init(&self, db_handle: Handle) -> Result<(), ApiError> {
|
|
39
|
+
match self.databases.get_obj(db_handle) {
|
|
40
|
+
Some(_db_ptr) => Ok(()),
|
|
41
|
+
None => InvalidArgumentSnafu {
|
|
42
|
+
argument: "Database handle not found".to_string(),
|
|
43
|
+
}
|
|
44
|
+
.fail(),
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
pub fn database_release(&self, db_handle: Handle) -> Result<(), ApiError> {
|
|
49
|
+
match self.databases.delete_handle(db_handle) {
|
|
50
|
+
true => Ok(()),
|
|
51
|
+
false => InvalidArgumentSnafu {
|
|
52
|
+
argument: "Failed to release database handle".to_string(),
|
|
53
|
+
}
|
|
54
|
+
.fail(),
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
pub async fn database_fetch_chunk(
|
|
59
|
+
&self,
|
|
60
|
+
conn_handle: Option<Handle>,
|
|
61
|
+
chunks: Vec<FetchChunkInput>,
|
|
62
|
+
chunk_format: ChunkFormatKind,
|
|
63
|
+
nullable_flags: &[bool],
|
|
64
|
+
row_types: Vec<RowType>,
|
|
65
|
+
) -> Result<Box<FFI_ArrowArrayStream>, ApiError> {
|
|
66
|
+
let (client, prefetch_config) = match conn_handle {
|
|
67
|
+
Some(conn_handle) => {
|
|
68
|
+
let conn_ptr = self.connections.get_obj(conn_handle).ok_or_else(|| {
|
|
69
|
+
InvalidArgumentSnafu {
|
|
70
|
+
argument: "Connection handle not found".to_string(),
|
|
71
|
+
}
|
|
72
|
+
.build()
|
|
73
|
+
})?;
|
|
74
|
+
let conn = conn_ptr.lock().await;
|
|
75
|
+
let client = conn
|
|
76
|
+
.http_client
|
|
77
|
+
.clone()
|
|
78
|
+
.ok_or_else(|| ConnectionNotInitializedSnafu.build())?;
|
|
79
|
+
let session_params = conn.session_parameters.read().await;
|
|
80
|
+
let prefetch_config = PrefetchConfig::from_session_params(&session_params);
|
|
81
|
+
(client, prefetch_config)
|
|
82
|
+
}
|
|
83
|
+
None => {
|
|
84
|
+
// TODO(SNOW-3801967): when no conn handle, we fall back to a fresh TLS client and
|
|
85
|
+
// default prefetch config, but we could restore proper configuration if it's
|
|
86
|
+
// serialized with the result chunk
|
|
87
|
+
let client = tls::create_tls_client_with_config(
|
|
88
|
+
tls::TlsConfig::default(),
|
|
89
|
+
self.crl_worker.clone(),
|
|
90
|
+
)
|
|
91
|
+
.context(TlsClientCreationSnafu)?;
|
|
92
|
+
(client, PrefetchConfig::default())
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
let reader = fetch_chunks_reader(
|
|
96
|
+
chunks,
|
|
97
|
+
chunk_format,
|
|
98
|
+
row_types,
|
|
99
|
+
nullable_flags,
|
|
100
|
+
client,
|
|
101
|
+
&prefetch_config,
|
|
102
|
+
)
|
|
103
|
+
.await
|
|
104
|
+
.context(ChunkFetchSnafu)?;
|
|
105
|
+
|
|
106
|
+
Ok(Box::new(FFI_ArrowArrayStream::new(reader)))
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
pub struct Database {
|
|
111
|
+
pub(crate) settings: ParamStore,
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
impl Default for Database {
|
|
115
|
+
fn default() -> Self {
|
|
116
|
+
Self::new()
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
impl Database {
|
|
121
|
+
pub fn new() -> Self {
|
|
122
|
+
Database {
|
|
123
|
+
settings: ParamStore::new(),
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -159,6 +159,12 @@ pub enum ApiError {
|
|
|
159
159
|
#[snafu(implicit)]
|
|
160
160
|
location: Location,
|
|
161
161
|
},
|
|
162
|
+
#[snafu(display("Background chunk-decode task failed to join"))]
|
|
163
|
+
BlockingTaskJoin {
|
|
164
|
+
source: tokio::task::JoinError,
|
|
165
|
+
#[snafu(implicit)]
|
|
166
|
+
location: Location,
|
|
167
|
+
},
|
|
162
168
|
#[snafu(display("Failed to encode inline JSON rowset as Arrow IPC"))]
|
|
163
169
|
InlineJsonEncode {
|
|
164
170
|
#[snafu(implicit)]
|
|
@@ -14,7 +14,7 @@ use crate::logging::LogManager;
|
|
|
14
14
|
use crate::rest::snowflake::prompt_lock::PromptLockMap;
|
|
15
15
|
use crate::telemetry::platform_detection::{DetectionConfig, detect_platforms};
|
|
16
16
|
use crate::telemetry::snowflake_exporter::SessionRegistry;
|
|
17
|
-
use crate::token_cache::{KeyringTokenCache, TokenCacheError};
|
|
17
|
+
use crate::token_cache::{KeyringTokenCache, TokenCache, TokenCacheError};
|
|
18
18
|
|
|
19
19
|
/// Which shape the PUT/GET result set should take.
|
|
20
20
|
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
|
@@ -95,12 +95,13 @@ pub struct DatabaseDriverV1 {
|
|
|
95
95
|
pub(super) connections: HandleManager<Mutex<Connection>>,
|
|
96
96
|
pub(super) statements: HandleManager<Mutex<Statement>>,
|
|
97
97
|
pub(super) results: HandleManager<Mutex<ResultSet>>,
|
|
98
|
-
token_cache: once_cell::sync::OnceCell<
|
|
98
|
+
token_cache: once_cell::sync::OnceCell<Arc<dyn TokenCache>>,
|
|
99
99
|
fs: Arc<dyn FsAdapter>,
|
|
100
100
|
platforms: tokio::sync::OnceCell<Vec<String>>,
|
|
101
101
|
log_manager: Option<LogManager>,
|
|
102
102
|
pub(super) wrapper_presets: WrapperPresets,
|
|
103
|
-
/// Process-global per
|
|
103
|
+
/// Process-global per-[`crate::token_cache::CacheKey`] prompt locks
|
|
104
|
+
/// (scoped by idp, snowflake, username, role, and token_type).
|
|
104
105
|
/// Shared across all connections on this driver instance.
|
|
105
106
|
pub(crate) prompt_locks: Arc<PromptLockMap>,
|
|
106
107
|
/// Lazy CRL worker shared across all connections on this driver instance.
|
|
@@ -186,8 +187,12 @@ impl DatabaseDriverV1 {
|
|
|
186
187
|
}
|
|
187
188
|
}
|
|
188
189
|
|
|
189
|
-
pub fn token_cache(&self) -> Result
|
|
190
|
-
self.token_cache
|
|
190
|
+
pub fn token_cache(&self) -> Result<Arc<dyn TokenCache>, TokenCacheError> {
|
|
191
|
+
self.token_cache
|
|
192
|
+
.get_or_try_init(|| {
|
|
193
|
+
KeyringTokenCache::new().map(|c| Arc::new(c) as Arc<dyn TokenCache>)
|
|
194
|
+
})
|
|
195
|
+
.map(Arc::clone)
|
|
191
196
|
}
|
|
192
197
|
|
|
193
198
|
pub fn fs_adapter(&self) -> Arc<dyn FsAdapter> {
|
|
@@ -244,7 +249,7 @@ mod tests {
|
|
|
244
249
|
let first = driver.token_cache().expect("first call failed");
|
|
245
250
|
let second = driver.token_cache().expect("second call failed");
|
|
246
251
|
assert!(
|
|
247
|
-
|
|
252
|
+
Arc::ptr_eq(&first, &second),
|
|
248
253
|
"token_cache() should return the same instance on repeated calls"
|
|
249
254
|
);
|
|
250
255
|
}
|
|
@@ -138,12 +138,11 @@ fn validate_config(config: &LogoutConfig) -> Result<(), ApiError> {
|
|
|
138
138
|
if let Some(timeout) = config.logout_request_timeout
|
|
139
139
|
&& timeout.is_zero()
|
|
140
140
|
{
|
|
141
|
-
return
|
|
141
|
+
return InvalidArgumentSnafu {
|
|
142
142
|
argument:
|
|
143
143
|
"logout_request_timeout: 0s. Zero timeout means immediate failure. Must be positive."
|
|
144
144
|
.to_string(),
|
|
145
|
-
}
|
|
146
|
-
.build());
|
|
145
|
+
}.fail();
|
|
147
146
|
}
|
|
148
147
|
Ok(())
|
|
149
148
|
}
|
|
@@ -20,13 +20,14 @@ mod query;
|
|
|
20
20
|
pub(crate) mod result_set;
|
|
21
21
|
pub mod spcs_token;
|
|
22
22
|
pub(crate) mod statement;
|
|
23
|
+
mod stream_transfer;
|
|
23
24
|
pub(crate) mod validation;
|
|
24
25
|
|
|
26
|
+
pub use crate::chunks::FetchChunkInput;
|
|
25
27
|
pub use crate::config::settings::Setting;
|
|
26
28
|
pub use crate::handle_manager::Handle;
|
|
27
29
|
pub use async_query_registry::AsyncQueryRegistry;
|
|
28
30
|
pub use connection::{Connection, ConnectionInfo, RefreshContext, with_valid_session};
|
|
29
|
-
pub use database::FetchChunkInput;
|
|
30
31
|
pub use error::ApiError;
|
|
31
32
|
pub use get_objects::{
|
|
32
33
|
ColumnDescriptor, DEPTH_CATALOGS, DEPTH_COLUMNS, DEPTH_DB_SCHEMAS, DEPTH_TABLES,
|