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.
Files changed (510) hide show
  1. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/Cargo.lock +1 -1
  2. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/PKG-INFO +2 -1
  3. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/hatch_build.py +0 -4
  4. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/protobuf/database_driver_v1.proto +28 -0
  5. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/pyproject.toml +15 -19
  6. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/Cargo.toml +2 -2
  7. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/context.rs +2 -0
  8. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/converters/map.rs +187 -0
  9. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/mod.rs +10 -1
  10. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/number.rs +37 -1
  11. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timezone.rs +7 -3
  12. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/util.rs +61 -4
  13. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/error.rs +67 -0
  14. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/iterator.rs +58 -2
  15. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/mod.rs +3 -0
  16. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/plan.rs +113 -17
  17. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/scaled_f64.rs +1 -1
  18. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/fixed.rs +49 -0
  19. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/int_values.rs +99 -0
  20. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/interval.rs +19 -0
  21. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/mod.rs +222 -0
  22. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/tests.rs +1178 -0
  23. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/time.rs +54 -0
  24. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/timestamp/mod.rs +72 -0
  25. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/timestamp/scale.rs +244 -0
  26. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/timestamp/tz.rs +36 -0
  27. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table/utils.rs +43 -0
  28. snowflake_connector_python-5.0.0rc5/python_bridge/src/arrow/table_iterator.rs +361 -0
  29. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/lib.rs +3 -1
  30. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/CHANGELOG.md +15 -0
  31. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/Cargo.toml +11 -9
  32. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/README.md +18 -0
  33. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/connection.rs +129 -46
  34. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/database.rs +1 -1
  35. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/error_kind.rs +15 -0
  36. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/global_state.rs +103 -69
  37. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/logout.rs +5 -0
  38. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/query.rs +5 -5
  39. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/result_set.rs +38 -1
  40. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/statement.rs +15 -13
  41. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/stream_transfer.rs +26 -6
  42. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/auth.rs +92 -19
  43. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/collect_chunk_data.rs +14 -7
  44. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/tls_client.rs +2 -2
  45. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/connection_config.rs +226 -40
  46. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/mod.rs +1 -1
  47. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/private_key.rs +1 -1
  48. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/rest_parameters.rs +131 -4
  49. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/token.rs +30 -0
  50. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/cache.rs +73 -110
  51. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/disk_tests.rs +3 -1
  52. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/integration_test.rs +4 -4
  53. snowflake_connector_python-5.0.0rc5/sf_core/src/crl/manager.rs +137 -0
  54. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/mod.rs +2 -0
  55. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/validator.rs +7 -8
  56. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/worker.rs +1 -10
  57. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crypto/private_key.rs +69 -82
  58. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/diagnostic/mod.rs +9 -6
  59. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/env_vars.rs +0 -5
  60. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/azure_transfer.rs +2 -2
  61. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/cloud_http.rs +3 -3
  62. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/gcs_transfer.rs +1 -1
  63. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/mod.rs +4 -4
  64. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/s3_transfer.rs +18 -8
  65. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/types.rs +6 -6
  66. snowflake_connector_python-5.0.0rc5/sf_core/src/handle_manager.rs +335 -0
  67. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/apis/database_driver_v1/converter.rs +89 -6
  68. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/apis/database_driver_v1/mod.rs +27 -1
  69. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/async_exec.rs +65 -51
  70. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/auth.rs +29 -2
  71. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/error_context.rs +2 -0
  72. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/heartbeat.rs +1 -1
  73. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/mod.rs +320 -57
  74. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/query_response.rs +1 -1
  75. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/telemetry.rs +5 -4
  76. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/aws.rs +50 -88
  77. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/azure.rs +65 -1
  78. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/gcp.rs +2 -0
  79. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/oidc.rs +1 -0
  80. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/stage_binding.rs +5 -5
  81. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/mod.rs +68 -40
  82. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/tests.rs +33 -28
  83. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/session_telemetry.rs +1 -0
  84. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/aws_http_client.rs +154 -52
  85. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/client.rs +332 -126
  86. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/crl_verifier.rs +84 -83
  87. snowflake_connector_python-5.0.0rc5/sf_core/src/tls/mod.rs +234 -0
  88. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/test_helpers.rs +19 -23
  89. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/x509_utils.rs +5 -16
  90. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/token_cache/mod.rs +2 -2
  91. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/snowflake_test_client.rs +11 -0
  92. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/xp_backend/fixtures.rs +1 -0
  93. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_params_spec/src/lib.rs +57 -4
  94. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/__init__.py +23 -1
  95. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/api_client/client_api.py +9 -0
  96. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow.py +14 -1
  97. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_stream_async.py +8 -7
  98. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_stream_utils.py +34 -11
  99. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/authenticator_type.py +1 -0
  100. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/connection.py +1 -1
  101. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection_config_mixin.py +3 -0
  102. snowflake_connector_python-5.0.0rc5/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +408 -0
  103. {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
  104. {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
  105. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/result_batch.py +4 -0
  106. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_base.py +4 -4
  107. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/result_batch.py +2 -0
  108. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/connection_config.py +9 -2
  109. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_base.py +3 -0
  110. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/network.py +2 -0
  111. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/result_batch.py +2 -0
  112. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/version.py +1 -1
  113. snowflake_connector_python-5.0.0rc4/sf_core/src/handle_manager.rs +0 -136
  114. snowflake_connector_python-5.0.0rc4/sf_core/src/tls/mod.rs +0 -230
  115. snowflake_connector_python-5.0.0rc4/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +0 -402
  116. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/.gitignore +0 -0
  117. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/Cargo.toml +0 -0
  118. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/README.md +0 -0
  119. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/build_common.rs +0 -0
  120. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/ci/anaconda/recipe/README.md +0 -0
  121. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace/Cargo.toml +0 -0
  122. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace/src/lib.rs +0 -0
  123. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace_derive/Cargo.toml +0 -0
  124. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/error_trace_derive/src/lib.rs +0 -0
  125. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/Cargo.lock +0 -0
  126. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/Cargo.toml +0 -0
  127. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/README.md +0 -0
  128. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generator.rs +0 -0
  129. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/csharp_generator.rs +0 -0
  130. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/helpers.rs +0 -0
  131. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/java_generator.rs +0 -0
  132. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/json_generator.rs +0 -0
  133. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/mod.rs +0 -0
  134. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/python_generator.rs +0 -0
  135. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/generators/rust_generator.rs +0 -0
  136. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/lib.rs +0 -0
  137. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/main.rs +0 -0
  138. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/protobuf.rs +0 -0
  139. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_generator/src/protoc_installer.rs +0 -0
  140. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_utils/Cargo.toml +0 -0
  141. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/proto_utils/src/lib.rs +0 -0
  142. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/build.rs +0 -0
  143. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/async_iterator.rs +0 -0
  144. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/batch_converter.rs +0 -0
  145. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/binary.rs +0 -0
  146. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/boolean.rs +0 -0
  147. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/date.rs +0 -0
  148. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/decfloat.rs +0 -0
  149. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/decode.rs +0 -0
  150. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/interval.rs +0 -0
  151. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/numpy.rs +0 -0
  152. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/real.rs +0 -0
  153. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/test_util.rs +0 -0
  154. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/text.rs +0 -0
  155. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/time.rs +0 -0
  156. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timestamp_ltz.rs +0 -0
  157. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timestamp_ntz.rs +0 -0
  158. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/timestamp_tz.rs +0 -0
  159. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/converters/vector.rs +0 -0
  160. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/stream.rs +0 -0
  161. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/src/arrow/test_support.rs +0 -0
  162. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/stub_gen/Cargo.toml +0 -0
  163. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/python_bridge/stub_gen/src/main.rs +0 -0
  164. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/benches/prefetch_bench.rs +0 -0
  165. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/build.rs +0 -0
  166. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/cbindgen-xp-providers.toml +0 -0
  167. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/exports.def +0 -0
  168. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/include/sf_core_providers.h +0 -0
  169. {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
  170. {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
  171. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/error.rs +0 -0
  172. {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
  173. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/get_objects.rs +0 -0
  174. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/heartbeat.rs +0 -0
  175. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/like_pattern.rs +0 -0
  176. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/mod.rs +0 -0
  177. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/multistatement.rs +0 -0
  178. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/query_submit.rs +0 -0
  179. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/spcs_token.rs +0 -0
  180. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/database_driver_v1/validation.rs +0 -0
  181. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/mod.rs +0 -0
  182. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/apis/operation_ctx.rs +0 -0
  183. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/arrow_utils.rs +0 -0
  184. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/README.md +0 -0
  185. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/bin/spcs_probe.rs +0 -0
  186. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/c_api.rs +0 -0
  187. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/arrow_parser.rs +0 -0
  188. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/async_arrow_batch_fetcher.rs +0 -0
  189. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/error.rs +0 -0
  190. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/http_downloader.rs +0 -0
  191. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/json_parser.rs +0 -0
  192. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/memory_budget.rs +0 -0
  193. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/mock.rs +0 -0
  194. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/mod.rs +0 -0
  195. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/chunks/prefetch.rs +0 -0
  196. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/compression.rs +0 -0
  197. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/compression_types.rs +0 -0
  198. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/config_manager.rs +0 -0
  199. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/configured_redirect_uri.rs +0 -0
  200. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/error_context.rs +0 -0
  201. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/ini_loader.rs +0 -0
  202. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/logging_config_loader.rs +0 -0
  203. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/logout.rs +0 -0
  204. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/param_registry.rs +0 -0
  205. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/param_store.rs +0 -0
  206. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/path_resolver.rs +0 -0
  207. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/resolver.rs +0 -0
  208. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/retry.rs +0 -0
  209. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/settings.rs +0 -0
  210. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/config/toml_loader.rs +0 -0
  211. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/certificate_parser.rs +0 -0
  212. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/config.rs +0 -0
  213. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crl/error.rs +0 -0
  214. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/crypto/mod.rs +0 -0
  215. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/encryption.rs +0 -0
  216. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/multipart.rs +0 -0
  217. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/path_expansion.rs +0 -0
  218. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/scheduler.rs +0 -0
  219. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/file_manager/spool.rs +0 -0
  220. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/fs_adapter.rs +0 -0
  221. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/fs_lock.rs +0 -0
  222. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/http/mod.rs +0 -0
  223. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/http/retry.rs +0 -0
  224. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/lib.rs +0 -0
  225. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/c_api.rs +0 -0
  226. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/callback_layer.rs +0 -0
  227. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/error.rs +0 -0
  228. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/log_manager.rs +0 -0
  229. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/mod.rs +0 -0
  230. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/logging/opentelemetry.rs +0 -0
  231. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/perf_timing/c_api.rs +0 -0
  232. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/perf_timing/mod.rs +0 -0
  233. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/apis/mod.rs +0 -0
  234. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/c_api.rs +0 -0
  235. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/config_setting_ext.rs +0 -0
  236. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/generated.rs +0 -0
  237. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/protobuf/mod.rs +0 -0
  238. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/query_types/mod.rs +0 -0
  239. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/query_types/row_type.rs +0 -0
  240. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/query_types/statement_type.rs +0 -0
  241. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/refresh.rs +0 -0
  242. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/mod.rs +0 -0
  243. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/browser.rs +0 -0
  244. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/external_browser.rs +0 -0
  245. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/logout.rs +0 -0
  246. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/native_okta.rs +0 -0
  247. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/authorization_code.rs +0 -0
  248. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/client_credentials.rs +0 -0
  249. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/dpop.rs +0 -0
  250. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/error.rs +0 -0
  251. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/http_client.rs +0 -0
  252. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/loopback_server.rs +0 -0
  253. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/mod.rs +0 -0
  254. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/pkce.rs +0 -0
  255. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/random.rs +0 -0
  256. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/oauth/token.rs +0 -0
  257. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/prompt_lock.rs +0 -0
  258. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/query_context_cache.rs +0 -0
  259. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/query_request.rs +0 -0
  260. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/sql_state.rs +0 -0
  261. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/host_allowlist.rs +0 -0
  262. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/rest/snowflake/workload_identity/mod.rs +0 -0
  263. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/sensitive.rs +0 -0
  264. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/environment.rs +0 -0
  265. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/mod.rs +0 -0
  266. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/os_details.rs +0 -0
  267. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/aws.rs +0 -0
  268. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/azure.rs +0 -0
  269. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/platform_detection/gcp.rs +0 -0
  270. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/serialization.rs +0 -0
  271. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/session_batch.rs +0 -0
  272. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/snowflake_exporter.rs +0 -0
  273. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/snowflake_processor.rs +0 -0
  274. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/telemetry/types.rs +0 -0
  275. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/config.rs +0 -0
  276. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/crypto_module.rs +0 -0
  277. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/error.rs +0 -0
  278. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/tls/revocation.rs +0 -0
  279. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/token_cache/file_cache.rs +0 -0
  280. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/token_cache/keyring_cache.rs +0 -0
  281. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/utils/mod.rs +0 -0
  282. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/utils/sync.rs +0 -0
  283. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/connection_settings.rs +0 -0
  284. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/ffi.rs +0 -0
  285. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/mod.rs +0 -0
  286. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/registry.rs +0 -0
  287. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/src/xp_backend/response_compat.rs +0 -0
  288. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_deserialize.rs +0 -0
  289. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_deserialize_macro/Cargo.toml +0 -0
  290. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_deserialize_macro/src/lib.rs +0 -0
  291. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_extract_value.rs +0 -0
  292. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/arrow_result_helper.rs +0 -0
  293. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/browser_opener.rs +0 -0
  294. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/cloud_gating.rs +0 -0
  295. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/config.rs +0 -0
  296. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/connect_proxy.rs +0 -0
  297. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/counting_proxy.rs +0 -0
  298. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/crypto_provider.rs +0 -0
  299. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/dead_proxy.rs +0 -0
  300. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/file_utils.rs +0 -0
  301. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mitm_port_detector.py +0 -0
  302. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mitm_proxy.rs +0 -0
  303. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/auth.rs +0 -0
  304. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/external_browser.rs +0 -0
  305. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/mfa.rs +0 -0
  306. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/mod.rs +0 -0
  307. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/oauth.rs +0 -0
  308. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/okta.rs +0 -0
  309. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/password.rs +0 -0
  310. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/put_get.rs +0 -0
  311. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/query.rs +0 -0
  312. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mocks/session.rs +0 -0
  313. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/mod.rs +0 -0
  314. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/private_key_helper.rs +0 -0
  315. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/put_get_common.rs +0 -0
  316. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/test_server.rs +0 -0
  317. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/test_utils.rs +0 -0
  318. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/common/tls_proxy.rs +0 -0
  319. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/xp_backend/fake_host.rs +0 -0
  320. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_core/tests/xp_backend/link_sf_core.rs +0 -0
  321. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_params_spec/Cargo.toml +0 -0
  322. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_params_spec/tests/odbc_legacy_compatibility.rs +0 -0
  323. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/Cargo.toml +0 -0
  324. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/binary.rs +0 -0
  325. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/boolean.rs +0 -0
  326. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/civil.rs +0 -0
  327. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/clock.rs +0 -0
  328. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/date.rs +0 -0
  329. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/decfloat.rs +0 -0
  330. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/error.rs +0 -0
  331. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/fixed.rs +0 -0
  332. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/interval.rs +0 -0
  333. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/lib.rs +0 -0
  334. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/nullable.rs +0 -0
  335. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/real.rs +0 -0
  336. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/text.rs +0 -0
  337. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/time.rs +0 -0
  338. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/timestamp.rs +0 -0
  339. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/traits.rs +0 -0
  340. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/sf_types/src/vector.rs +0 -0
  341. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/__init__.py +0 -0
  342. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/extras.py +0 -0
  343. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/telemetry.py +0 -0
  344. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_common/wif_util.py +0 -0
  345. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/__init__.py +0 -0
  346. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/_private_key_helper.py +0 -0
  347. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/api_client/__init__.py +0 -0
  348. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/api_client/bridge.py +0 -0
  349. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_context.py +0 -0
  350. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/arrow_stream_iterator.pyi +0 -0
  351. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/backward_compatibility.py +0 -0
  352. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/binding_converters.py +0 -0
  353. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/config_utils.py +0 -0
  354. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/__init__.py +0 -0
  355. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/connection_types.py +0 -0
  356. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/constants.py +0 -0
  357. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/decorators.py +0 -0
  358. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/freezable_proxy.py +0 -0
  359. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/connection/queries.py +0 -0
  360. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/__init__.py +0 -0
  361. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/base.py +0 -0
  362. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/cursor_types.py +0 -0
  363. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/decorators.py +0 -0
  364. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/query_result.py +0 -0
  365. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/query_result_waiter.py +0 -0
  366. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/result_metadata.py +0 -0
  367. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/cursor/result_set_wrapper.py +0 -0
  368. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/decorators.py +0 -0
  369. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/error_kinds.py +0 -0
  370. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/errorcode.py +0 -0
  371. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/errorhandler.py +0 -0
  372. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/__init__.py +0 -0
  373. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/config.py +0 -0
  374. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/core_logger.py +0 -0
  375. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logging/native_extension_logger.py +0 -0
  376. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/logout_config_mapping.py +0 -0
  377. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  378. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  379. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.cpp +0 -0
  380. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.hpp +0 -0
  381. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  382. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  383. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  384. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  385. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  386. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  387. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.cpp +0 -0
  388. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.hpp +0 -0
  389. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.cpp +0 -0
  390. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.hpp +0 -0
  391. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.cpp +0 -0
  392. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.hpp +0 -0
  393. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  394. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  395. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  396. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  397. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  398. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  399. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  400. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  401. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  402. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  403. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  404. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  405. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  406. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  407. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  408. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  409. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  410. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  411. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  412. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  413. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  414. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  415. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  416. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  417. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  418. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  419. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  420. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  421. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  422. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  423. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  424. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  425. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  426. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  427. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  428. {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
  429. {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
  430. {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
  431. {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
  432. {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
  433. {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
  434. {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
  435. {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
  436. {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
  437. {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
  438. {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
  439. {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
  440. {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
  441. {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
  442. {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
  443. {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
  444. {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
  445. {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
  446. {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
  447. {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
  448. {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
  449. {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
  450. {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
  451. {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
  452. {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
  453. {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
  454. {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
  455. {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
  456. {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
  457. {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
  458. {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
  459. {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
  460. {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
  461. {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
  462. {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
  463. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  464. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  465. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  466. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  467. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  468. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  469. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.cpp +0 -0
  470. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.hpp +0 -0
  471. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/protobuf_gen/__init__.py +0 -0
  472. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/protobuf_gen/proto_exception.py +0 -0
  473. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/snowflake_restful.py +0 -0
  474. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/snowpark_backcompat_helpers.py +0 -0
  475. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/sqlstate.py +0 -0
  476. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/statement_utils.py +0 -0
  477. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/text_utils.py +0 -0
  478. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/type_codes.py +0 -0
  479. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/utils.py +0 -0
  480. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/_internal/write_pandas_operation.py +0 -0
  481. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/README.md +0 -0
  482. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/__init__.py +0 -0
  483. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/connection/__init__.py +0 -0
  484. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/connection/_connection.py +0 -0
  485. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/__init__.py +0 -0
  486. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_dict_cursor.py +0 -0
  487. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_result_set_wrapper.py +0 -0
  488. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/cursor/_snowflake_cursor.py +0 -0
  489. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/aio/pandas_tools.py +0 -0
  490. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/auth/__init__.py +0 -0
  491. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/auth/workload_identity.py +0 -0
  492. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/compat.py +0 -0
  493. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/config_manager.py +0 -0
  494. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/connection/__init__.py +0 -0
  495. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/connection/_connection.py +0 -0
  496. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/constants.py +0 -0
  497. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/__init__.py +0 -0
  498. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_chunked_download_reader.py +0 -0
  499. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_dict_cursor.py +0 -0
  500. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_result_set_wrapper.py +0 -0
  501. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/cursor/_snowflake_cursor.py +0 -0
  502. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/description.py +0 -0
  503. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/errors.py +0 -0
  504. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/pandas_tools.py +0 -0
  505. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/py.typed +0 -0
  506. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/telemetry.py +0 -0
  507. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/time_util.py +0 -0
  508. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/types.py +0 -0
  509. {snowflake_connector_python-5.0.0rc4 → snowflake_connector_python-5.0.0rc5}/src/snowflake/connector/util_text.py +0 -0
  510. {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.0rc4
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
- # Unit / integ: on failure, once-rerun last-failed tests (cap at 5 failures)
300
- # via pytest cache --lf / --maxfail. https://docs.pytest.org/en/stable/how-to/cache.html
301
- unit = "pytest tests/unit {args} || pytest tests/unit --lf --maxfail=5 {args}"
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 (no auto --lf; merge-group last-failed is a separate step).
326
- # Override the `dev` template scripts: those `|| pytest --lf` wrappers hide
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
- # Native-arrow overlays python_bridge in install-wheel, then runs :cov.
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.scripts]
347
- # Production wheel, then cargo-test + native-arrow overlay in this env's Python.
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]
@@ -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
- # Tests for the native path use --features native-arrow (activates optional arrow).
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, NumberNumpyIntMaterializer,
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(super) struct TimezoneProvider {
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(super) fn new(name: Option<String>) -> Self {
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(super) fn get<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyTzInfo>> {
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, Int64Array, StructArray,
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
  }