snowflake-connector-python 5.0.0b5__tar.gz → 5.0.0b6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of snowflake-connector-python might be problematic. Click here for more details.

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