snowflake-connector-python 5.0.0rc4__tar.gz → 5.0.0rc5__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.
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/Cargo.lock +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/PKG-INFO +2 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/hatch_build.py +0 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/protobuf/database_driver_v1.proto +28 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/pyproject.toml +15 -19
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/Cargo.toml +2 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/context.rs +2 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/converters/map.rs +187 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/mod.rs +10 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/number.rs +37 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timezone.rs +7 -3
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/util.rs +61 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/error.rs +67 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/iterator.rs +58 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/mod.rs +3 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/plan.rs +113 -17
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/scaled_f64.rs +1 -1
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/fixed.rs +49 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/int_values.rs +99 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/interval.rs +19 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/mod.rs +222 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/tests.rs +1178 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/time.rs +54 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/timestamp/mod.rs +72 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/timestamp/scale.rs +244 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/timestamp/tz.rs +36 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/utils.rs +43 -0
- snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table_iterator.rs +361 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/lib.rs +3 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/CHANGELOG.md +15 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/Cargo.toml +11 -9
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/README.md +18 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/connection.rs +129 -46
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/database.rs +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/error_kind.rs +15 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/global_state.rs +103 -69
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/logout.rs +5 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/query.rs +5 -5
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/result_set.rs +38 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/statement.rs +15 -13
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/stream_transfer.rs +26 -6
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/auth.rs +92 -19
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/collect_chunk_data.rs +14 -7
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/tls_client.rs +2 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/connection_config.rs +226 -40
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/mod.rs +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/private_key.rs +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/rest_parameters.rs +131 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/token.rs +30 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/cache.rs +73 -110
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/disk_tests.rs +3 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/integration_test.rs +4 -4
- snowflake_connector_python-5.0.0rc5/sf_core/src/crl/manager.rs +137 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/mod.rs +2 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/validator.rs +7 -8
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/worker.rs +1 -10
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crypto/private_key.rs +69 -82
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/diagnostic/mod.rs +9 -6
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/env_vars.rs +0 -5
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/azure_transfer.rs +2 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/cloud_http.rs +3 -3
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/gcs_transfer.rs +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/mod.rs +4 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/s3_transfer.rs +18 -8
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/types.rs +6 -6
- snowflake_connector_python-5.0.0rc5/sf_core/src/handle_manager.rs +335 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/apis/database_driver_v1/converter.rs +89 -6
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/apis/database_driver_v1/mod.rs +27 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/async_exec.rs +65 -51
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/auth.rs +29 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/error_context.rs +2 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/heartbeat.rs +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/mod.rs +320 -57
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/query_response.rs +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/telemetry.rs +5 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/aws.rs +50 -88
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/azure.rs +65 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/gcp.rs +2 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/oidc.rs +1 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/stage_binding.rs +5 -5
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/mod.rs +68 -40
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/tests.rs +33 -28
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/session_telemetry.rs +1 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/aws_http_client.rs +154 -52
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/client.rs +332 -126
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/crl_verifier.rs +84 -83
- snowflake_connector_python-5.0.0rc5/sf_core/src/tls/mod.rs +234 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/test_helpers.rs +19 -23
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/x509_utils.rs +5 -16
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/token_cache/mod.rs +2 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/snowflake_test_client.rs +11 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/xp_backend/fixtures.rs +1 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_params_spec/src/lib.rs +57 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/__init__.py +23 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/api_client/client_api.py +9 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow.py +14 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_stream_async.py +8 -7
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_stream_utils.py +34 -11
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/authenticator_type.py +1 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/connection.py +1 -1
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection_config_mixin.py +3 -0
- snowflake_connector_python-5.0.0rc5/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +408 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.pyi +80 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_services.py +33 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/result_batch.py +4 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_base.py +4 -4
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/result_batch.py +2 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/connection_config.py +9 -2
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_base.py +3 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/network.py +2 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/result_batch.py +2 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/version.py +1 -1
- snowflake_connector_python-5.0.0rc4/sf_core/src/handle_manager.rs +0 -136
- snowflake_connector_python-5.0.0rc4/sf_core/src/tls/mod.rs +0 -230
- snowflake_connector_python-5.0.0rc4/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +0 -402
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/.gitignore +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/README.md +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/build_common.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/ci/anaconda/recipe/README.md +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace_derive/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace_derive/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/Cargo.lock +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/README.md +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/csharp_generator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/helpers.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/java_generator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/json_generator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/python_generator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/rust_generator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/main.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/protobuf.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/protoc_installer.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_utils/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_utils/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/build.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/async_iterator.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/batch_converter.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/binary.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/boolean.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/date.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/decfloat.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/decode.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/interval.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/numpy.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/real.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/test_util.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/text.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/time.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timestamp_ltz.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timestamp_ntz.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timestamp_tz.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/vector.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/stream.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/test_support.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/stub_gen/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/stub_gen/src/main.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/benches/prefetch_bench.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/build.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/cbindgen-xp-providers.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/exports.def +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/include/sf_core_providers.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/alter_session_parser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/async_query_registry.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/final_session_names.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/get_objects.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/heartbeat.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/like_pattern.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/multistatement.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/query_submit.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/spcs_token.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/validation.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/operation_ctx.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/arrow_utils.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/README.md +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/spcs_probe.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/arrow_parser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/async_arrow_batch_fetcher.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/http_downloader.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/json_parser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/memory_budget.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/mock.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/prefetch.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/compression.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/compression_types.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/config_manager.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/configured_redirect_uri.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/error_context.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/ini_loader.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/logging_config_loader.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/logout.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/param_registry.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/param_store.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/path_resolver.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/resolver.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/retry.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/settings.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/toml_loader.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/certificate_parser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/config.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crypto/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/encryption.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/multipart.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/path_expansion.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/scheduler.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/spool.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/fs_adapter.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/fs_lock.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/http/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/http/retry.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/callback_layer.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/log_manager.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/opentelemetry.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/perf_timing/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/perf_timing/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/apis/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/c_api.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/config_setting_ext.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/generated.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/query_types/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/query_types/row_type.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/query_types/statement_type.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/refresh.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/browser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/external_browser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/logout.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/native_okta.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/authorization_code.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/client_credentials.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/dpop.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/http_client.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/loopback_server.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/pkce.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/random.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/token.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/prompt_lock.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/query_context_cache.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/query_request.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/sql_state.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/host_allowlist.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/sensitive.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/environment.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/os_details.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/aws.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/azure.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/gcp.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/serialization.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/session_batch.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/snowflake_exporter.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/snowflake_processor.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/types.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/config.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/crypto_module.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/revocation.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/token_cache/file_cache.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/token_cache/keyring_cache.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/utils/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/utils/sync.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/connection_settings.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/ffi.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/registry.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/response_compat.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_deserialize.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_deserialize_macro/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_deserialize_macro/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_extract_value.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_result_helper.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/browser_opener.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/cloud_gating.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/config.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/connect_proxy.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/counting_proxy.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/crypto_provider.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/dead_proxy.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/file_utils.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mitm_port_detector.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mitm_proxy.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/auth.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/external_browser.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/mfa.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/oauth.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/okta.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/password.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/put_get.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/query.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/session.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mod.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/private_key_helper.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/put_get_common.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/test_server.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/test_utils.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/tls_proxy.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/xp_backend/fake_host.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/xp_backend/link_sf_core.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_params_spec/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_params_spec/tests/odbc_legacy_compatibility.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/Cargo.toml +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/binary.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/boolean.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/civil.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/clock.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/date.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/decfloat.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/error.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/fixed.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/interval.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/lib.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/nullable.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/real.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/text.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/time.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/timestamp.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/traits.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/vector.rs +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/extras.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/telemetry.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/wif_util.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/_private_key_helper.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/api_client/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/api_client/bridge.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_context.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_stream_iterator.pyi +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/backward_compatibility.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/binding_converters.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/config_utils.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/connection_types.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/constants.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/decorators.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/freezable_proxy.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/queries.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/base.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/cursor_types.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/decorators.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/query_result.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/query_result_waiter.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/result_metadata.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/result_set_wrapper.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/decorators.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/error_kinds.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/errorcode.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/errorhandler.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/config.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/core_logger.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/native_extension_logger.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logout_config_mapping.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.pyx +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/protobuf_gen/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/protobuf_gen/proto_exception.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/snowflake_restful.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/snowpark_backcompat_helpers.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/sqlstate.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/statement_utils.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/text_utils.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/type_codes.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/utils.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/write_pandas_operation.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/README.md +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/connection/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/connection/_connection.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_dict_cursor.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_result_set_wrapper.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_snowflake_cursor.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/pandas_tools.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/auth/workload_identity.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/connection/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/connection/_connection.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/__init__.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_chunked_download_reader.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_dict_cursor.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_result_set_wrapper.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_snowflake_cursor.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/types.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/tests/README.md +0 -0
|
@@ -4452,7 +4452,6 @@ dependencies = [
|
|
|
4452
4452
|
"futures",
|
|
4453
4453
|
"glob",
|
|
4454
4454
|
"hex",
|
|
4455
|
-
"hmac",
|
|
4456
4455
|
"html-escape",
|
|
4457
4456
|
"http 1.3.1",
|
|
4458
4457
|
"http-body 1.0.1",
|
|
@@ -4515,6 +4514,7 @@ dependencies = [
|
|
|
4515
4514
|
"urlencoding",
|
|
4516
4515
|
"uuid",
|
|
4517
4516
|
"webbrowser",
|
|
4517
|
+
"webpki-roots",
|
|
4518
4518
|
"wiremock",
|
|
4519
4519
|
"x509-cert",
|
|
4520
4520
|
"x509-parser",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 5.0.
|
|
3
|
+
Version: 5.0.0rc5
|
|
4
4
|
Summary: Snowflake DB driver for Python
|
|
5
5
|
Project-URL: Homepage, https://github.com/snowflakedb/drivers
|
|
6
6
|
Project-URL: Bug Reports, https://github.com/snowflakedb/drivers/issues
|
|
@@ -45,6 +45,7 @@ Requires-Dist: numpy>=2.1.0; (python_version >= '3.13') and extra == 'test'
|
|
|
45
45
|
Requires-Dist: pytest-cov; extra == 'test'
|
|
46
46
|
Requires-Dist: pytest-json-report; extra == 'test'
|
|
47
47
|
Requires-Dist: pytest-randomly; extra == 'test'
|
|
48
|
+
Requires-Dist: pytest-rerunfailures; extra == 'test'
|
|
48
49
|
Requires-Dist: pytest-split; extra == 'test'
|
|
49
50
|
Requires-Dist: pytest-timeout; extra == 'test'
|
|
50
51
|
Requires-Dist: pytest-xdist; extra == 'test'
|
|
@@ -380,10 +380,6 @@ class BuildHook(BuildHookInterface):
|
|
|
380
380
|
if os.environ.get("SF_PERF_METRICS", "").lower() in ("1", "true"):
|
|
381
381
|
extra_cargo_args.extend(["--features", "sf_core/perf_timing"])
|
|
382
382
|
|
|
383
|
-
# Opt-in PyO3-based nanoarrow replacement.
|
|
384
|
-
if os.environ.get("SF_NATIVE_ARROW", "").lower() in ("1", "true"):
|
|
385
|
-
extra_cargo_args.extend(["--features", "native-arrow"])
|
|
386
|
-
|
|
387
383
|
# Use a stable target dir when CORE_CARGO_TARGET_DIR is set (enables
|
|
388
384
|
# incremental Rust compilation and CI caching). Otherwise fall back to a
|
|
389
385
|
# temporary directory that is cleaned up after the build.
|
|
@@ -37,6 +37,18 @@ enum ErrorKind {
|
|
|
37
37
|
ERROR_KIND_STAGE_BINDING = 15;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
// Distinguishes ERROR_KIND_IO failures that share one kind but different
|
|
41
|
+
// legacy JDBC vendor codes. Unset when kind is not ERROR_KIND_IO, and when
|
|
42
|
+
// an I/O failure has no JDBC vendor code.
|
|
43
|
+
enum IoClass {
|
|
44
|
+
IO_CLASS_UNSPECIFIED = 0;
|
|
45
|
+
IO_CLASS_GENERIC = 1;
|
|
46
|
+
IO_CLASS_NETWORK = 2;
|
|
47
|
+
IO_CLASS_FILE_UPLOAD = 3;
|
|
48
|
+
IO_CLASS_FILE_DOWNLOAD = 4;
|
|
49
|
+
IO_CLASS_NO_SPACE_LEFT = 5;
|
|
50
|
+
}
|
|
51
|
+
|
|
40
52
|
// Info codes corresponding to Thrift InfoCode enum
|
|
41
53
|
enum InfoCode {
|
|
42
54
|
INFO_CODE_UNSPECIFIED = 0;
|
|
@@ -120,6 +132,8 @@ message DriverException {
|
|
|
120
132
|
// What the abort-request fired on cancellation achieved. Set only when kind is
|
|
121
133
|
// ERROR_KIND_CANCELLED *and* an abort was actually issued; unset otherwise.
|
|
122
134
|
optional CancellationAbortOutcome cancellation_abort_outcome = 13;
|
|
135
|
+
// Present when kind is ERROR_KIND_IO and the failure has a legacy JDBC vendor code.
|
|
136
|
+
optional IoClass io_class = 14;
|
|
123
137
|
}
|
|
124
138
|
|
|
125
139
|
// Column metadata for description
|
|
@@ -1015,6 +1029,17 @@ message ConfigGetPathsResponse {
|
|
|
1015
1029
|
string connections_file = 2;
|
|
1016
1030
|
}
|
|
1017
1031
|
|
|
1032
|
+
// Reports this build's linked TLS provider only. These fields do not establish
|
|
1033
|
+
// that every operation or the complete driver artifact is FIPS compliant.
|
|
1034
|
+
message DriverGetTlsStatusRequest {}
|
|
1035
|
+
|
|
1036
|
+
message DriverGetTlsStatusResponse {
|
|
1037
|
+
// Rustls's FIPS verdict for the linked TLS crypto provider.
|
|
1038
|
+
bool tls_provider_is_fips = 1;
|
|
1039
|
+
// Whether sf_core was compiled with the fips-tls feature.
|
|
1040
|
+
bool fips_tls_build_enabled = 2;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1018
1043
|
// =============================================================================
|
|
1019
1044
|
// WORKLOAD IDENTITY FEDERATION (WIF) - standalone attestation
|
|
1020
1045
|
// =============================================================================
|
|
@@ -1081,6 +1106,9 @@ message TelemetrySendLogRequest {
|
|
|
1081
1106
|
// Database Driver service definition
|
|
1082
1107
|
service DatabaseDriver {
|
|
1083
1108
|
option (service_error) = "DriverException";
|
|
1109
|
+
// Available without a database or connection handle, even in standard builds.
|
|
1110
|
+
rpc DriverGetTlsStatus(DriverGetTlsStatusRequest) returns (DriverGetTlsStatusResponse);
|
|
1111
|
+
|
|
1084
1112
|
// Database operations
|
|
1085
1113
|
rpc DatabaseNew(DatabaseNewRequest) returns (DatabaseNewResponse);
|
|
1086
1114
|
rpc DatabaseSetOptions(DatabaseSetOptionsRequest) returns (DatabaseSetOptionsResponse);
|
|
@@ -57,6 +57,7 @@ test = [
|
|
|
57
57
|
"pytest-xdist",
|
|
58
58
|
"pytest-randomly",
|
|
59
59
|
"pytest-timeout",
|
|
60
|
+
"pytest-rerunfailures",
|
|
60
61
|
"hypothesis",
|
|
61
62
|
"requests",
|
|
62
63
|
"brotli",
|
|
@@ -139,6 +140,8 @@ testpaths = ["tests"]
|
|
|
139
140
|
python_files = ["test_*.py"]
|
|
140
141
|
python_classes = ["Test*"]
|
|
141
142
|
python_functions = ["test_*"]
|
|
143
|
+
# Dedicated plugin dir only — do not put all of scripts/ on pythonpath (import shadow).
|
|
144
|
+
pythonpath = ["../scripts/pytest_junit_retry_plugin"]
|
|
142
145
|
addopts = [
|
|
143
146
|
"--strict-markers",
|
|
144
147
|
"--strict-config",
|
|
@@ -147,6 +150,10 @@ addopts = [
|
|
|
147
150
|
# minimum 8 workers configured via pytest_xdist_auto_num_workers in conftest.py
|
|
148
151
|
"-n", "auto",
|
|
149
152
|
"--max-worker-restart=4",
|
|
153
|
+
# Two extra attempts after the first failure (3 total).
|
|
154
|
+
"--reruns", "2",
|
|
155
|
+
# Stock junitxml keeps only the last attempt; this plugin writes flakyFailure.
|
|
156
|
+
"-p", "pytest_junit_retry_plugin",
|
|
150
157
|
# Flaky tests are excluded by default; the python_flaky_tests CI job
|
|
151
158
|
# overrides this with `-m flaky` to run them in isolation.
|
|
152
159
|
"-m", "not flaky and not requires_no_mfa",
|
|
@@ -296,10 +303,9 @@ SKIP_CORE_BUILD = "{env:SKIP_CORE_BUILD:1}"
|
|
|
296
303
|
python = ["3.11", "3.12", "3.13", "3.14"]
|
|
297
304
|
|
|
298
305
|
[tool.hatch.envs.dev.scripts]
|
|
299
|
-
#
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
integ = "pytest tests/integ {args} || pytest tests/integ --lf --maxfail=5 {args}"
|
|
306
|
+
# Per-test retries come from addopts --reruns 2 (not a second whole-suite run).
|
|
307
|
+
unit = "pytest tests/unit {args}"
|
|
308
|
+
integ = "pytest tests/integ {args}"
|
|
303
309
|
# End-to-end tests
|
|
304
310
|
e2e = "pytest tests/e2e {args}"
|
|
305
311
|
# All tests
|
|
@@ -322,9 +328,8 @@ python = ["3.11", "3.12", "3.13", "3.14"]
|
|
|
322
328
|
[tool.hatch.envs.test.scripts]
|
|
323
329
|
# Install from wheel
|
|
324
330
|
install-wheel = "uv pip install {env:WHEEL_PATH:dist/*.whl}"
|
|
325
|
-
# Split suites used by CI
|
|
326
|
-
#
|
|
327
|
-
# failures from GitHub Actions, and `dev:e2e` does not ignore pandas.
|
|
331
|
+
# Split suites used by CI. Override the `dev` template so `dev:e2e` does not
|
|
332
|
+
# ignore pandas. Per-test retries come from addopts --reruns 2.
|
|
328
333
|
unit = "pytest tests/unit {args}"
|
|
329
334
|
integ = "pytest tests/integ {args}"
|
|
330
335
|
e2e = "pytest tests/e2e --ignore=tests/e2e/pandas --ignore=tests/e2e/numpy {args}"
|
|
@@ -335,24 +340,15 @@ flaky = "pytest tests/ --ignore=tests/packaging --ignore=tests/e2e/pandas --igno
|
|
|
335
340
|
# Runs @pytest.mark.requires_no_mfa tests (parameters_aws_local.json).
|
|
336
341
|
no_mfa = "pytest tests/e2e/authentication/test_user_password.py -m requires_no_mfa -n 0 --no-cov {args}"
|
|
337
342
|
|
|
338
|
-
#
|
|
343
|
+
# Same unit/integ/e2e split as `test`. The harness sets use_core_arrow.
|
|
339
344
|
[tool.hatch.envs.test-native-arrow]
|
|
340
345
|
template = "test"
|
|
341
|
-
features = ["test", "dev", "pyarrow"]
|
|
342
346
|
|
|
343
347
|
[[tool.hatch.envs.test-native-arrow.matrix]]
|
|
344
348
|
python = ["3.13"]
|
|
345
349
|
|
|
346
|
-
[tool.hatch.envs.test-native-arrow.
|
|
347
|
-
|
|
348
|
-
install-wheel = [
|
|
349
|
-
"uv pip install {env:WHEEL_PATH:dist/*.whl}",
|
|
350
|
-
"python hatch_native_arrow.py",
|
|
351
|
-
]
|
|
352
|
-
# BOOLEAN, REAL, TEXT, BINARY, NUMBER, DECFLOAT, DATE, TIME, TIMESTAMP_LTZ, VECTOR,
|
|
353
|
-
# DictCursor, and numpy (NUMBER/REAL/DECFLOAT, DATE, TIMESTAMP_NTZ, INTERVAL) are live.
|
|
354
|
-
# Table and insert cases can run because execute_query status rows are NUMBER.
|
|
355
|
-
cov = "pytest tests/unit/test_arrow_stream_utils.py tests/integ/test_cursor.py::TestDictCursorCreation tests/integ/test_cursor.py::TestDictCursorFetchOne tests/integ/test_cursor.py::TestDictCursorFetchMany tests/integ/test_cursor.py::TestDictCursorFetchAll tests/integ/test_cursor.py::TestDictCursorIteration tests/integ/test_cursor.py::TestDictCursorLargeResults tests/integ/test_cursor.py::TestDictCursorMultipleQueries tests/e2e/types/test_boolean.py tests/e2e/types/test_float.py tests/e2e/types/test_string.py tests/e2e/types/test_binary.py tests/e2e/types/test_number.py tests/e2e/types/test_int.py tests/e2e/types/test_decfloat.py tests/e2e/types/test_date.py tests/e2e/types/test_time.py tests/e2e/types/test_timestamp_ltz.py tests/e2e/types/test_vector.py tests/e2e/types/numpy/test_number_numpy.py tests/e2e/types/numpy/test_float_numpy.py tests/e2e/types/numpy/test_decfloat_numpy.py tests/e2e/types/numpy/test_date_numpy.py tests/e2e/types/numpy/test_timestamp_ntz_numpy.py tests/e2e/types/numpy/test_interval_numpy.py --cov=src/snowflake --cov-report=xml --cov-report=html {args}"
|
|
350
|
+
[tool.hatch.envs.test-native-arrow.env-vars]
|
|
351
|
+
SNOWFLAKE_TEST_USE_CORE_ARROW = "1"
|
|
356
352
|
|
|
357
353
|
# Pandas and NumPy consumer CI test environment
|
|
358
354
|
[tool.hatch.envs.test-pandas]
|
{snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/Cargo.toml
RENAMED
|
@@ -8,7 +8,7 @@ name = "sf_core_python"
|
|
|
8
8
|
crate-type = ["cdylib", "rlib"]
|
|
9
9
|
|
|
10
10
|
[features]
|
|
11
|
-
default = ["extension-module"]
|
|
11
|
+
default = ["extension-module", "native-arrow"]
|
|
12
12
|
extension-module = ["pyo3/extension-module"]
|
|
13
13
|
native-arrow = ["dep:arrow", "dep:snafu", "dep:error_trace", "dep:sf_types", "dep:chrono", "pyo3/chrono"]
|
|
14
14
|
# Links the FIPS-mode crypto module (aws-lc-fips-sys) instead of
|
|
@@ -35,7 +35,7 @@ futures = "0.3"
|
|
|
35
35
|
tracing = "0.1.41"
|
|
36
36
|
|
|
37
37
|
[dev-dependencies]
|
|
38
|
-
#
|
|
38
|
+
# `native-arrow` is a default feature. `--no-default-features` drops it.
|
|
39
39
|
pyo3 = { version = "0.29.0", features = ["auto-initialize"] }
|
|
40
40
|
arrow = { version = ">=54.0.0, <59", features = ["ffi"] }
|
|
41
41
|
tracing-subscriber = { version = "0.3.19", features = ["fmt"] }
|
|
@@ -14,6 +14,7 @@ use super::boolean;
|
|
|
14
14
|
use super::date;
|
|
15
15
|
use super::decfloat;
|
|
16
16
|
use super::interval;
|
|
17
|
+
use super::map;
|
|
17
18
|
use super::number;
|
|
18
19
|
use super::numpy::NumpyProvider;
|
|
19
20
|
use super::real;
|
|
@@ -167,6 +168,7 @@ impl ConversionContext {
|
|
|
167
168
|
self.use_numpy,
|
|
168
169
|
),
|
|
169
170
|
SnowflakeFieldType::Vector { .. } => vector::from_column(array, field_type),
|
|
171
|
+
SnowflakeFieldType::ArrowMap => map::from_column(self, array),
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
use std::sync::Arc;
|
|
2
|
+
|
|
3
|
+
use arrow::array::{Array, ArrayRef, MapArray};
|
|
4
|
+
use arrow::datatypes::{DataType, FieldRef};
|
|
5
|
+
use pyo3::exceptions::PyValueError;
|
|
6
|
+
use pyo3::prelude::*;
|
|
7
|
+
use pyo3::types::PyDict;
|
|
8
|
+
|
|
9
|
+
use super::Column;
|
|
10
|
+
use super::context::ConversionContext;
|
|
11
|
+
use super::util::{downcast_column, py_none};
|
|
12
|
+
use crate::arrow::error::{InvalidMapSchemaSnafu, PlanError};
|
|
13
|
+
use crate::arrow::plan::SnowflakeFieldType;
|
|
14
|
+
|
|
15
|
+
pub(crate) struct MapColumn {
|
|
16
|
+
map: MapArray,
|
|
17
|
+
// MapColumn is a column so this has to be boxed to not have a circular reference
|
|
18
|
+
key: Box<Column>,
|
|
19
|
+
value: Box<Column>,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
impl MapColumn {
|
|
23
|
+
pub(super) fn to_py<'py>(&self, py: Python<'py>, row: usize) -> PyResult<Bound<'py, PyAny>> {
|
|
24
|
+
if self.map.is_null(row) {
|
|
25
|
+
return Ok(py_none(py));
|
|
26
|
+
}
|
|
27
|
+
let offsets = self.map.offsets();
|
|
28
|
+
let start = map_offset(offsets, row)?;
|
|
29
|
+
let end = map_offset(offsets, row + 1)?;
|
|
30
|
+
if start > end || end > self.map.entries().len() {
|
|
31
|
+
return Err(PyValueError::new_err(
|
|
32
|
+
"[Snowflake Exception] map offsets are out of range",
|
|
33
|
+
));
|
|
34
|
+
}
|
|
35
|
+
let dict = PyDict::new(py);
|
|
36
|
+
for index in start..end {
|
|
37
|
+
dict.set_item(self.key.to_py(py, index)?, self.value.to_py(py, index)?)?;
|
|
38
|
+
}
|
|
39
|
+
Ok(dict.into_any())
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
pub(super) fn from_column(context: &ConversionContext, array: &ArrayRef) -> PyResult<Column> {
|
|
44
|
+
let map = downcast_column::<MapArray>(array, &SnowflakeFieldType::ArrowMap)?;
|
|
45
|
+
let [key_field, value_field] = entry_fields(map.data_type())?;
|
|
46
|
+
let key_type = SnowflakeFieldType::from_field(key_field.as_ref())?;
|
|
47
|
+
let value_type = SnowflakeFieldType::from_field(value_field.as_ref())?;
|
|
48
|
+
let key = context.converter_from_column(map.keys(), &key_type)?;
|
|
49
|
+
let value = context.converter_from_column(map.values(), &value_type)?;
|
|
50
|
+
Ok(Column::Map(MapColumn {
|
|
51
|
+
map,
|
|
52
|
+
key: Box::new(key),
|
|
53
|
+
value: Box::new(value),
|
|
54
|
+
}))
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
fn entry_fields(data_type: &DataType) -> Result<[FieldRef; 2], PlanError> {
|
|
58
|
+
let DataType::Map(entries, _) = data_type else {
|
|
59
|
+
return InvalidMapSchemaSnafu { count: 0usize }.fail();
|
|
60
|
+
};
|
|
61
|
+
let DataType::Struct(fields) = entries.data_type() else {
|
|
62
|
+
return InvalidMapSchemaSnafu { count: 0usize }.fail();
|
|
63
|
+
};
|
|
64
|
+
let [key_field, value_field] = fields.as_ref() else {
|
|
65
|
+
return InvalidMapSchemaSnafu {
|
|
66
|
+
count: fields.len(),
|
|
67
|
+
}
|
|
68
|
+
.fail();
|
|
69
|
+
};
|
|
70
|
+
Ok([Arc::clone(key_field), Arc::clone(value_field)])
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
fn map_offset(offsets: &[i32], index: usize) -> PyResult<usize> {
|
|
74
|
+
let raw = offsets.get(index).copied().ok_or_else(|| {
|
|
75
|
+
PyValueError::new_err(format!(
|
|
76
|
+
"[Snowflake Exception] map offset index {index} is out of range"
|
|
77
|
+
))
|
|
78
|
+
})?;
|
|
79
|
+
usize::try_from(raw).map_err(|_| {
|
|
80
|
+
PyValueError::new_err(format!(
|
|
81
|
+
"[Snowflake Exception] map offset {raw} is negative"
|
|
82
|
+
))
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
#[cfg(test)]
|
|
87
|
+
mod tests {
|
|
88
|
+
use std::collections::HashMap;
|
|
89
|
+
use std::sync::Arc;
|
|
90
|
+
|
|
91
|
+
use arrow::array::{Decimal128Array, MapArray, StringArray, StructArray};
|
|
92
|
+
use arrow::buffer::{NullBuffer, OffsetBuffer, ScalarBuffer};
|
|
93
|
+
use arrow::datatypes::{DataType, Field, Schema};
|
|
94
|
+
use pyo3::prelude::*;
|
|
95
|
+
use pyo3::types::PyDict;
|
|
96
|
+
use snafu::ResultExt;
|
|
97
|
+
|
|
98
|
+
use super::*;
|
|
99
|
+
use crate::arrow::converters::test_util::{assert_py_int, assert_py_none, assert_py_str};
|
|
100
|
+
use crate::arrow::error::ColumnConvertSnafu;
|
|
101
|
+
|
|
102
|
+
fn meta(logical_type: &str, extra: &[(&str, &str)]) -> HashMap<String, String> {
|
|
103
|
+
let mut metadata = HashMap::from([("logicalType".to_string(), logical_type.to_string())]);
|
|
104
|
+
for (key, value) in extra {
|
|
105
|
+
metadata.insert((*key).to_string(), (*value).to_string());
|
|
106
|
+
}
|
|
107
|
+
metadata
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
fn varchar_int_map(values: Vec<Option<i128>>, nulls: Option<Vec<bool>>) -> ArrayRef {
|
|
111
|
+
let key_field = Field::new("key", DataType::Utf8, false).with_metadata(meta("TEXT", &[]));
|
|
112
|
+
let value_field = Field::new("value", DataType::Decimal128(38, 0), true)
|
|
113
|
+
.with_metadata(meta("FIXED", &[("scale", "0"), ("precision", "38")]));
|
|
114
|
+
let keys = Arc::new(StringArray::from(
|
|
115
|
+
values
|
|
116
|
+
.iter()
|
|
117
|
+
.enumerate()
|
|
118
|
+
.map(|(index, value)| value.map(|_| format!("{}", (b'a' + index as u8) as char)))
|
|
119
|
+
.collect::<Vec<_>>(),
|
|
120
|
+
));
|
|
121
|
+
let decimals = Arc::new(
|
|
122
|
+
Decimal128Array::from(values)
|
|
123
|
+
.with_precision_and_scale(38, 0)
|
|
124
|
+
.unwrap(),
|
|
125
|
+
);
|
|
126
|
+
let entries = StructArray::try_new(
|
|
127
|
+
vec![key_field.clone(), value_field.clone()].into(),
|
|
128
|
+
vec![keys, decimals],
|
|
129
|
+
None,
|
|
130
|
+
)
|
|
131
|
+
.unwrap();
|
|
132
|
+
let mut offsets = Vec::with_capacity(entries.len() + 1);
|
|
133
|
+
offsets.push(0i32);
|
|
134
|
+
for index in 0..entries.len() {
|
|
135
|
+
offsets.push((index + 1) as i32);
|
|
136
|
+
}
|
|
137
|
+
let nulls = nulls.map(NullBuffer::from);
|
|
138
|
+
let entries_field = Arc::new(Field::new(
|
|
139
|
+
"entries",
|
|
140
|
+
DataType::Struct(vec![key_field, value_field].into()),
|
|
141
|
+
false,
|
|
142
|
+
));
|
|
143
|
+
Arc::new(
|
|
144
|
+
MapArray::try_new(
|
|
145
|
+
entries_field,
|
|
146
|
+
OffsetBuffer::new(ScalarBuffer::from(offsets)),
|
|
147
|
+
entries,
|
|
148
|
+
nulls,
|
|
149
|
+
false,
|
|
150
|
+
)
|
|
151
|
+
.context(ColumnConvertSnafu)
|
|
152
|
+
.unwrap(),
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
#[test]
|
|
157
|
+
fn map_row_is_dict_and_null_is_none() {
|
|
158
|
+
Python::initialize();
|
|
159
|
+
let context = ConversionContext::new(&Schema::empty()).unwrap();
|
|
160
|
+
let array = varchar_int_map(vec![Some(1), Some(2)], Some(vec![true, false]));
|
|
161
|
+
let column = context
|
|
162
|
+
.converter_from_column(&array, &SnowflakeFieldType::ArrowMap)
|
|
163
|
+
.unwrap();
|
|
164
|
+
|
|
165
|
+
Python::attach(|py| {
|
|
166
|
+
let dict = column.to_py(py, 0).unwrap();
|
|
167
|
+
let dict = dict.cast::<PyDict>().unwrap();
|
|
168
|
+
assert_eq!(dict.len(), 1);
|
|
169
|
+
assert_py_int(&dict.get_item("a").unwrap().unwrap(), 1);
|
|
170
|
+
assert_py_none(&column.to_py(py, 1).unwrap());
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
#[test]
|
|
175
|
+
fn utf8_map_stays_json_string() {
|
|
176
|
+
Python::initialize();
|
|
177
|
+
let field = Field::new("m", DataType::Utf8, true).with_metadata(meta("MAP", &[]));
|
|
178
|
+
let field_type = SnowflakeFieldType::from_field(&field).unwrap();
|
|
179
|
+
let context = ConversionContext::new(&Schema::empty()).unwrap();
|
|
180
|
+
let array: ArrayRef = Arc::new(StringArray::from(vec![Some("{\"a\": 1}")]));
|
|
181
|
+
let column = context.converter_from_column(&array, &field_type).unwrap();
|
|
182
|
+
|
|
183
|
+
Python::attach(|py| {
|
|
184
|
+
assert_py_str(&column.to_py(py, 0).unwrap(), "{\"a\": 1}");
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -5,6 +5,7 @@ mod date;
|
|
|
5
5
|
mod decfloat;
|
|
6
6
|
mod decode;
|
|
7
7
|
mod interval;
|
|
8
|
+
mod map;
|
|
8
9
|
mod number;
|
|
9
10
|
mod numpy;
|
|
10
11
|
mod real;
|
|
@@ -15,6 +16,8 @@ mod timestamp_ntz;
|
|
|
15
16
|
mod timestamp_tz;
|
|
16
17
|
mod timezone;
|
|
17
18
|
mod util;
|
|
19
|
+
|
|
20
|
+
pub(crate) use timezone::TimezoneProvider;
|
|
18
21
|
mod vector;
|
|
19
22
|
|
|
20
23
|
#[cfg(test)]
|
|
@@ -40,8 +43,10 @@ use self::interval::{
|
|
|
40
43
|
IntervalNumpyColumn, IntervalYearMonthColumn, IntervalYearMonthNumpyMMaterializer,
|
|
41
44
|
IntervalYearMonthNumpyYMaterializer,
|
|
42
45
|
};
|
|
46
|
+
use self::map::MapColumn;
|
|
43
47
|
use self::number::{
|
|
44
|
-
NumberColumn, NumberMaterializer, NumberNumpyFloatMaterializer,
|
|
48
|
+
NumberColumn, NumberI64Column, NumberMaterializer, NumberNumpyFloatMaterializer,
|
|
49
|
+
NumberNumpyIntMaterializer,
|
|
45
50
|
};
|
|
46
51
|
use self::real::{RealMaterializer, RealNumpyMaterializer};
|
|
47
52
|
use self::text::TextMaterializer;
|
|
@@ -56,6 +61,7 @@ pub(crate) use context::{ConversionContext, RowShape};
|
|
|
56
61
|
pub(crate) enum Column {
|
|
57
62
|
Bool(TypedColumn<BooleanArray, SnowflakeBoolean, BoolMaterializer>),
|
|
58
63
|
Number(NumberColumn<NumberMaterializer>),
|
|
64
|
+
NumberI64(NumberI64Column),
|
|
59
65
|
NumberNumpyInt(NumberColumn<NumberNumpyIntMaterializer>),
|
|
60
66
|
NumberNumpyFloat(NumberColumn<NumberNumpyFloatMaterializer>),
|
|
61
67
|
Real(TypedColumn<Float64Array, SnowflakeReal, RealMaterializer>),
|
|
@@ -78,6 +84,7 @@ pub(crate) enum Column {
|
|
|
78
84
|
IntervalDayTimeNumpyNs(IntervalNumpyColumn<IntervalDayTimeNumpyNsMaterializer>),
|
|
79
85
|
IntervalDayTimeNumpyMs(IntervalNumpyColumn<IntervalDayTimeNumpyMsMaterializer>),
|
|
80
86
|
Vector(TypedColumn<FixedSizeListArray, SnowflakeVector, VectorMaterializer>),
|
|
87
|
+
Map(MapColumn),
|
|
81
88
|
}
|
|
82
89
|
|
|
83
90
|
impl Column {
|
|
@@ -85,6 +92,7 @@ impl Column {
|
|
|
85
92
|
match self {
|
|
86
93
|
Self::Bool(column) => column.to_py(py, row),
|
|
87
94
|
Self::Number(column) => column.to_py(py, row),
|
|
95
|
+
Self::NumberI64(column) => column.to_py(py, row),
|
|
88
96
|
Self::NumberNumpyInt(column) => column.to_py(py, row),
|
|
89
97
|
Self::NumberNumpyFloat(column) => column.to_py(py, row),
|
|
90
98
|
Self::Real(column) => column.to_py(py, row),
|
|
@@ -107,6 +115,7 @@ impl Column {
|
|
|
107
115
|
Self::IntervalDayTimeNumpyNs(column) => column.to_py(py, row),
|
|
108
116
|
Self::IntervalDayTimeNumpyMs(column) => column.to_py(py, row),
|
|
109
117
|
Self::Vector(column) => column.to_py(py, row),
|
|
118
|
+
Self::Map(column) => column.to_py(py, row),
|
|
110
119
|
}
|
|
111
120
|
}
|
|
112
121
|
}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
use std::sync::Arc;
|
|
2
2
|
|
|
3
|
+
use std::ffi::c_longlong;
|
|
4
|
+
|
|
3
5
|
use arrow::array::ArrayRef;
|
|
6
|
+
use arrow::datatypes::DataType;
|
|
4
7
|
use pyo3::exceptions::PyValueError;
|
|
8
|
+
use pyo3::ffi::PyLong_FromLongLong;
|
|
5
9
|
use pyo3::prelude::*;
|
|
6
10
|
use sf_types::{ReadArrowError, SnowflakeFixed};
|
|
7
11
|
|
|
8
12
|
use super::Column;
|
|
9
13
|
use super::decode::PyMaterializer;
|
|
10
14
|
use super::numpy::NumpyProvider;
|
|
11
|
-
use crate::arrow::converters::util::{IntColumn, py_decimal_from_coeff_exp, py_none};
|
|
15
|
+
use crate::arrow::converters::util::{IntColumn, IntColumn64, py_decimal_from_coeff_exp, py_none};
|
|
12
16
|
use crate::arrow::plan::SnowflakeFieldType;
|
|
13
17
|
use crate::arrow::scaled_f64::scaled_f64;
|
|
14
18
|
|
|
@@ -27,6 +31,26 @@ impl<M: PyMaterializer<SnowflakeFixed>> NumberColumn<M> {
|
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
|
|
34
|
+
pub(crate) struct NumberI64Column {
|
|
35
|
+
values: IntColumn64,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
impl NumberI64Column {
|
|
39
|
+
pub(crate) fn to_py<'py>(&self, py: Python<'py>, row: usize) -> PyResult<Bound<'py, PyAny>> {
|
|
40
|
+
match self.values.get(row) {
|
|
41
|
+
Ok(value) => py_long_from_i64(py, value),
|
|
42
|
+
Err(ReadArrowError::NullValue { .. }) => Ok(py_none(py)),
|
|
43
|
+
Err(err) => Err(PyValueError::new_err(err.to_string())),
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fn py_long_from_i64<'py>(py: Python<'py>, value: i64) -> PyResult<Bound<'py, PyAny>> {
|
|
49
|
+
// SAFETY: `PyLong_FromLongLong` returns a new reference, or NULL when allocation fails.
|
|
50
|
+
// `from_owned_ptr_or_err` takes that reference and turns NULL into the current Python error.
|
|
51
|
+
unsafe { Bound::from_owned_ptr_or_err(py, PyLong_FromLongLong(value as c_longlong)) }
|
|
52
|
+
}
|
|
53
|
+
|
|
30
54
|
pub(super) fn from_column(
|
|
31
55
|
array: &ArrayRef,
|
|
32
56
|
field_type: &SnowflakeFieldType,
|
|
@@ -34,6 +58,11 @@ pub(super) fn from_column(
|
|
|
34
58
|
numpy: Arc<NumpyProvider>,
|
|
35
59
|
use_numpy: bool,
|
|
36
60
|
) -> PyResult<Column> {
|
|
61
|
+
if scale == 0 && !use_numpy && is_i64_width(array) {
|
|
62
|
+
return Ok(Column::NumberI64(NumberI64Column {
|
|
63
|
+
values: IntColumn64::from_fixed(array, field_type)?,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
37
66
|
let values = IntColumn::from_fixed(array, field_type)?;
|
|
38
67
|
// Numpy FIXED uses the same scale split as Python FIXED, but only on
|
|
39
68
|
// integer physical widths: scale 0 is numpy.int64, scale > 0 is
|
|
@@ -57,6 +86,13 @@ pub(super) fn from_column(
|
|
|
57
86
|
}))
|
|
58
87
|
}
|
|
59
88
|
|
|
89
|
+
fn is_i64_width(array: &ArrayRef) -> bool {
|
|
90
|
+
matches!(
|
|
91
|
+
array.data_type(),
|
|
92
|
+
DataType::Int8 | DataType::Int16 | DataType::Int32 | DataType::Int64
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
|
|
60
96
|
pub(crate) struct NumberMaterializer {
|
|
61
97
|
scale: u32,
|
|
62
98
|
}
|
|
@@ -2,20 +2,24 @@ use pyo3::prelude::*;
|
|
|
2
2
|
use pyo3::sync::PyOnceLock;
|
|
3
3
|
use pyo3::types::PyTzInfo;
|
|
4
4
|
|
|
5
|
-
pub(
|
|
5
|
+
pub(crate) struct TimezoneProvider {
|
|
6
6
|
name: Option<String>,
|
|
7
7
|
tz: PyOnceLock<Py<PyTzInfo>>,
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
impl TimezoneProvider {
|
|
11
|
-
pub(
|
|
11
|
+
pub(crate) fn new(name: Option<String>) -> Self {
|
|
12
12
|
Self {
|
|
13
13
|
name,
|
|
14
14
|
tz: PyOnceLock::new(),
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
pub(
|
|
18
|
+
pub(crate) fn name(&self) -> Option<&str> {
|
|
19
|
+
self.name.as_deref().filter(|name| !name.is_empty())
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
pub(crate) fn get<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyTzInfo>> {
|
|
19
23
|
self.tz
|
|
20
24
|
.get_or_try_init(py, || resolve_session_timezone(py, self.name.as_deref()))
|
|
21
25
|
.map(|tz| tz.bind(py).clone())
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
use arrow::array::{
|
|
2
|
-
Array, ArrayRef, Decimal128Array, Int8Array, Int16Array, Int32Array,
|
|
2
|
+
Array, ArrayRef, ArrowPrimitiveType, Decimal128Array, Int8Array, Int16Array, Int32Array,
|
|
3
|
+
Int64Array, PrimitiveArray, StructArray,
|
|
3
4
|
};
|
|
4
5
|
use arrow::datatypes::DataType;
|
|
5
6
|
use chrono::NaiveDateTime;
|
|
@@ -8,7 +9,7 @@ use pyo3::prelude::*;
|
|
|
8
9
|
use pyo3::sync::PyOnceLock;
|
|
9
10
|
use pyo3::types::{PyNone, PyTuple};
|
|
10
11
|
use sf_types::{
|
|
11
|
-
ReadArrowError, ReadArrowType, SnowflakeFixed, read_scaled_timestamp,
|
|
12
|
+
NullValueSnafu, ReadArrowError, ReadArrowType, SnowflakeFixed, read_scaled_timestamp,
|
|
12
13
|
read_scaled_timestamp_nanos, read_struct_timestamp, read_struct_timestamp_nanos,
|
|
13
14
|
};
|
|
14
15
|
|
|
@@ -63,6 +64,45 @@ impl IntColumn {
|
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
pub(super) enum IntColumn64 {
|
|
68
|
+
I8(Int8Array),
|
|
69
|
+
I16(Int16Array),
|
|
70
|
+
I32(Int32Array),
|
|
71
|
+
I64(Int64Array),
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
impl IntColumn64 {
|
|
75
|
+
pub(super) fn from_fixed(array: &ArrayRef, field_type: &SnowflakeFieldType) -> PyResult<Self> {
|
|
76
|
+
Ok(match array.data_type() {
|
|
77
|
+
DataType::Int8 => Self::I8(downcast_column(array, field_type)?),
|
|
78
|
+
DataType::Int16 => Self::I16(downcast_column(array, field_type)?),
|
|
79
|
+
DataType::Int32 => Self::I32(downcast_column(array, field_type)?),
|
|
80
|
+
DataType::Int64 => Self::I64(downcast_column(array, field_type)?),
|
|
81
|
+
other => return Err(logical_mismatch_err(field_type, other)),
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
pub(super) fn get(&self, row: usize) -> Result<i64, ReadArrowError> {
|
|
86
|
+
match self {
|
|
87
|
+
Self::I8(array) => read_widened_i64(array, row),
|
|
88
|
+
Self::I16(array) => read_widened_i64(array, row),
|
|
89
|
+
Self::I32(array) => read_widened_i64(array, row),
|
|
90
|
+
Self::I64(array) => read_widened_i64(array, row),
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fn read_widened_i64<T>(array: &PrimitiveArray<T>, row: usize) -> Result<i64, ReadArrowError>
|
|
96
|
+
where
|
|
97
|
+
T: ArrowPrimitiveType,
|
|
98
|
+
T::Native: Into<i64>,
|
|
99
|
+
{
|
|
100
|
+
if array.is_null(row) {
|
|
101
|
+
return Err(NullValueSnafu.build());
|
|
102
|
+
}
|
|
103
|
+
Ok(array.value(row).into())
|
|
104
|
+
}
|
|
105
|
+
|
|
66
106
|
pub(super) enum TimestampColumn {
|
|
67
107
|
Int64(Int64Array),
|
|
68
108
|
Struct(StructArray),
|
|
@@ -133,11 +173,12 @@ fn decimal_type(py: Python<'_>) -> PyResult<&Bound<'_, PyAny>> {
|
|
|
133
173
|
mod tests {
|
|
134
174
|
use std::sync::Arc;
|
|
135
175
|
|
|
136
|
-
use arrow::array::{ArrayRef, Int32Array, Int64Array};
|
|
176
|
+
use arrow::array::{ArrayRef, Int8Array, Int32Array, Int64Array};
|
|
137
177
|
use pyo3::exceptions::PyValueError;
|
|
138
178
|
use pyo3::prelude::*;
|
|
179
|
+
use sf_types::ReadArrowError;
|
|
139
180
|
|
|
140
|
-
use super::downcast_column;
|
|
181
|
+
use super::{IntColumn64, downcast_column};
|
|
141
182
|
use crate::arrow::plan::SnowflakeFieldType;
|
|
142
183
|
|
|
143
184
|
#[test]
|
|
@@ -175,4 +216,20 @@ mod tests {
|
|
|
175
216
|
);
|
|
176
217
|
});
|
|
177
218
|
}
|
|
219
|
+
|
|
220
|
+
#[test]
|
|
221
|
+
fn int_column64_widens_to_i64_and_reports_null() {
|
|
222
|
+
let field_type = SnowflakeFieldType::Number {
|
|
223
|
+
scale: 0,
|
|
224
|
+
precision: 38,
|
|
225
|
+
};
|
|
226
|
+
let array: ArrayRef = Arc::new(Int8Array::from(vec![Some(i8::MIN), None, Some(i8::MAX)]));
|
|
227
|
+
let column = IntColumn64::from_fixed(&array, &field_type).unwrap();
|
|
228
|
+
assert_eq!(column.get(0).unwrap(), i64::from(i8::MIN));
|
|
229
|
+
assert!(matches!(
|
|
230
|
+
column.get(1),
|
|
231
|
+
Err(ReadArrowError::NullValue { .. })
|
|
232
|
+
));
|
|
233
|
+
assert_eq!(column.get(2).unwrap(), i64::from(i8::MAX));
|
|
234
|
+
}
|
|
178
235
|
}
|