snowflake-connector-python 3.7.0__tar.gz → 3.7.1__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 (235) hide show
  1. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/DESCRIPTION.md +10 -0
  2. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/PKG-INFO +15 -5
  3. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/setup.cfg +4 -4
  4. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/setup.py +3 -0
  5. snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +64 -0
  6. snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +33 -0
  7. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +62 -4
  8. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +1 -0
  9. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +12 -2
  10. snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +79 -0
  11. snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +34 -0
  12. snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +50 -0
  13. snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +32 -0
  14. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +1 -0
  15. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +2 -1
  16. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/pandas_tools.py +9 -3
  17. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/version.py +1 -1
  18. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/PKG-INFO +15 -5
  19. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/SOURCES.txt +6 -0
  20. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/requires.txt +4 -4
  21. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/CONTRIBUTING.md +0 -0
  22. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/LICENSE.txt +0 -0
  23. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/MANIFEST.in +0 -0
  24. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/NOTICE +0 -0
  25. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/README.md +0 -0
  26. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/SECURITY.md +0 -0
  27. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/pyproject.toml +0 -0
  28. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/__init__.py +0 -0
  29. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/_query_context_cache.py +0 -0
  30. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/_sql_util.py +0 -0
  31. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/arrow_context.py +0 -0
  32. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/__init__.py +0 -0
  33. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/_auth.py +0 -0
  34. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/by_plugin.py +0 -0
  35. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/default.py +0 -0
  36. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/idtoken.py +0 -0
  37. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/keypair.py +0 -0
  38. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/oauth.py +0 -0
  39. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/okta.py +0 -0
  40. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  41. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/webbrowser.py +0 -0
  42. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/azure_storage_client.py +0 -0
  43. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/backoff_policies.py +0 -0
  44. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/bind_upload_agent.py +0 -0
  45. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/cache.py +0 -0
  46. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/compat.py +0 -0
  47. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/config_manager.py +0 -0
  48. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/connection.py +0 -0
  49. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/connection_diagnostic.py +0 -0
  50. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/constants.py +0 -0
  51. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter.py +0 -0
  52. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter_issue23517.py +0 -0
  53. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter_null.py +0 -0
  54. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter_snowsql.py +0 -0
  55. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/cursor.py +0 -0
  56. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/dbapi.py +0 -0
  57. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/description.py +0 -0
  58. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/encryption_util.py +0 -0
  59. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/errorcode.py +0 -0
  60. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/errors.py +0 -0
  61. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/feature.py +0 -0
  62. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/file_compression_type.py +0 -0
  63. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/file_transfer_agent.py +0 -0
  64. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/file_util.py +0 -0
  65. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/gcs_storage_client.py +0 -0
  66. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/gzip_decoder.py +0 -0
  67. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/local_storage_client.py +0 -0
  68. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  69. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  70. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  71. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  72. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  73. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  74. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  75. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  76. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  77. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  78. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  79. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  80. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  81. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  82. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  83. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  84. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  85. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  86. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  87. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  88. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  89. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  90. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  91. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  92. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  93. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  94. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  95. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  96. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  97. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  98. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  99. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  100. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  101. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  102. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  103. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  104. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  105. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  106. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  107. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  108. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  109. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  110. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  111. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  112. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  113. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  114. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  115. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  116. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  117. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  118. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  119. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  120. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  121. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  122. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  123. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  124. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  125. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  126. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  127. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  128. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  129. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  130. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  131. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  132. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  133. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  134. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  135. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  136. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  137. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  138. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  139. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  140. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  141. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  142. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  143. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  144. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/network.py +0 -0
  145. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  146. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  147. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/options.py +0 -0
  148. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/proxy.py +0 -0
  149. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/py.typed +0 -0
  150. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/result_batch.py +0 -0
  151. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/result_set.py +0 -0
  152. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/s3_storage_client.py +0 -0
  153. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/secret_detector.py +0 -0
  154. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sf_dirs.py +0 -0
  155. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sfbinaryformat.py +0 -0
  156. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sfdatetime.py +0 -0
  157. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/snow_logging.py +0 -0
  158. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sqlstate.py +0 -0
  159. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  160. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  161. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/storage_client.py +0 -0
  162. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/telemetry.py +0 -0
  163. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/telemetry_oob.py +0 -0
  164. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/test_util.py +0 -0
  165. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/time_util.py +0 -0
  166. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/__init__.py +0 -0
  167. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/dump_certs.py +0 -0
  168. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  169. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  170. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/probe_connection.py +0 -0
  171. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/url_util.py +0 -0
  172. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/util_text.py +0 -0
  173. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/__init__.py +0 -0
  174. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  175. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  176. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  177. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  178. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  179. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/api.py +0 -0
  180. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  181. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  182. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  183. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  184. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  185. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/help.py +0 -0
  186. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  187. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/models.py +0 -0
  188. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  189. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  190. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  191. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  192. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  193. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  194. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  195. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  196. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  197. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  198. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  199. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  200. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  201. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  202. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  203. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  204. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  205. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  206. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  207. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  208. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  209. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  210. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  211. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  212. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  213. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  214. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  215. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  216. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  217. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  218. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  219. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  220. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  221. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  222. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  223. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  224. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  225. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  226. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  227. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  228. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  229. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  230. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  231. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  232. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  233. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  234. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  235. {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -8,6 +8,15 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
8
8
 
9
9
  # Release Notes
10
10
 
11
+ - v3.7.1(February 21, 2024)
12
+
13
+ - Bumped pandas dependency from >=1.0.0,<2.2.0 to >=1.0.0,<3.0.0.
14
+ - Bumped cryptography dependency from <42.0.0,>=3.1.0 to >=3.1.0,<43.0.0.
15
+ - Bumped pyOpenSSL dependency from >=16.2.0,<24.0.0 to >=16.2.0,<25.0.0.
16
+ - Fixed a memory leak in decimal data conversion.
17
+ - Fixed a bug where `write_pandas` wasn't truncating the target table.
18
+ - Bumped keyring dependency lower bound to 23.1.0 to address security vulnerability.
19
+
11
20
  - v3.7.0(January 25,2024)
12
21
 
13
22
  - Added a new boolean parameter `force_return_table` to `SnowflakeCursor.fetch_arrow_all` to force returning `pyarrow.Table` in case of zero rows.
@@ -17,6 +26,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
17
26
  - Fixed PyArrow Table type hinting
18
27
  - Added support for connecting using an existing connection via the session and master token.
19
28
  - Added support for connecting to Snowflake by authenticating with multiple SAML IDP using external browser.
29
+ - Added support for structured types (OBJECT, MAP, ARRAY) to nanoarrow converters.
20
30
  - Fixed compilation issue due to missing cstdint header on gcc13.
21
31
  - Improved config permissions warning message.
22
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.7.0
3
+ Version: 3.7.1
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -40,8 +40,8 @@ License-File: LICENSE.txt
40
40
  License-File: NOTICE
41
41
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
42
  Requires-Dist: cffi<2.0.0,>=1.9
43
- Requires-Dist: cryptography<42.0.0,>=3.1.0
44
- Requires-Dist: pyOpenSSL<24.0.0,>=16.2.0
43
+ Requires-Dist: cryptography<43.0.0,>=3.1.0
44
+ Requires-Dist: pyOpenSSL<25.0.0,>=16.2.0
45
45
  Requires-Dist: pyjwt<3.0.0
46
46
  Requires-Dist: pytz
47
47
  Requires-Dist: requests<3.0.0
@@ -70,10 +70,10 @@ Requires-Dist: pytest-timeout; extra == "development"
70
70
  Requires-Dist: pytest-xdist; extra == "development"
71
71
  Requires-Dist: pytzdata; extra == "development"
72
72
  Provides-Extra: pandas
73
- Requires-Dist: pandas<2.2.0,>=1.0.0; extra == "pandas"
73
+ Requires-Dist: pandas<3.0.0,>=1.0.0; extra == "pandas"
74
74
  Requires-Dist: pyarrow; extra == "pandas"
75
75
  Provides-Extra: secure-local-storage
76
- Requires-Dist: keyring!=16.1.0,<25.0.0; extra == "secure-local-storage"
76
+ Requires-Dist: keyring<25.0.0,>=23.1.0; extra == "secure-local-storage"
77
77
 
78
78
  This package includes the Snowflake Connector for Python, which conforms to the Python DB API 2.0 specification:
79
79
  https://www.python.org/dev/peps/pep-0249/
@@ -85,6 +85,15 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
85
85
 
86
86
  # Release Notes
87
87
 
88
+ - v3.7.1(February 21, 2024)
89
+
90
+ - Bumped pandas dependency from >=1.0.0,<2.2.0 to >=1.0.0,<3.0.0.
91
+ - Bumped cryptography dependency from <42.0.0,>=3.1.0 to >=3.1.0,<43.0.0.
92
+ - Bumped pyOpenSSL dependency from >=16.2.0,<24.0.0 to >=16.2.0,<25.0.0.
93
+ - Fixed a memory leak in decimal data conversion.
94
+ - Fixed a bug where `write_pandas` wasn't truncating the target table.
95
+ - Bumped keyring dependency lower bound to 23.1.0 to address security vulnerability.
96
+
88
97
  - v3.7.0(January 25,2024)
89
98
 
90
99
  - Added a new boolean parameter `force_return_table` to `SnowflakeCursor.fetch_arrow_all` to force returning `pyarrow.Table` in case of zero rows.
@@ -94,6 +103,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
94
103
  - Fixed PyArrow Table type hinting
95
104
  - Added support for connecting using an existing connection via the session and master token.
96
105
  - Added support for connecting to Snowflake by authenticating with multiple SAML IDP using external browser.
106
+ - Added support for structured types (OBJECT, MAP, ARRAY) to nanoarrow converters.
97
107
  - Fixed compilation issue due to missing cstdint header on gcc13.
98
108
  - Improved config permissions warning message.
99
109
 
@@ -45,8 +45,8 @@ packages = find_namespace:
45
45
  install_requires =
46
46
  asn1crypto>0.24.0,<2.0.0
47
47
  cffi>=1.9,<2.0.0
48
- cryptography>=3.1.0,<42.0.0
49
- pyOpenSSL>=16.2.0,<24.0.0
48
+ cryptography>=3.1.0,<43.0.0
49
+ pyOpenSSL>=16.2.0,<25.0.0
50
50
  pyjwt<3.0.0
51
51
  pytz
52
52
  requests<3.0.0
@@ -93,10 +93,10 @@ development =
93
93
  pytest-xdist
94
94
  pytzdata
95
95
  pandas =
96
- pandas>=1.0.0,<2.2.0
96
+ pandas>=1.0.0,<3.0.0
97
97
  pyarrow
98
98
  secure-local-storage =
99
- keyring!=16.1.0,<25.0.0
99
+ keyring>=23.1.0,<25.0.0
100
100
 
101
101
  [egg_info]
102
102
  tag_build =
@@ -94,6 +94,7 @@ if _ABLE_TO_COMPILE_EXTENSIONS and not SNOWFLAKE_DISABLE_COMPILE_ARROW_EXTENSION
94
94
  *((file,) if isinstance(file, str) else file)
95
95
  )
96
96
  for file in {
97
+ "ArrayConverter.cpp",
97
98
  "BinaryConverter.cpp",
98
99
  "BooleanConverter.cpp",
99
100
  "CArrowChunkIterator.cpp",
@@ -104,6 +105,8 @@ if _ABLE_TO_COMPILE_EXTENSIONS and not SNOWFLAKE_DISABLE_COMPILE_ARROW_EXTENSION
104
105
  "FixedSizeListConverter.cpp",
105
106
  "FloatConverter.cpp",
106
107
  "IntConverter.cpp",
108
+ "MapConverter.cpp",
109
+ "ObjectConverter.cpp",
107
110
  "SnowflakeType.cpp",
108
111
  "StringConverter.cpp",
109
112
  "TimeConverter.cpp",
@@ -0,0 +1,64 @@
1
+ //
2
+ // Copyright (c) 2012-2023 Snowflake Computing Inc. All rights reserved.
3
+ //
4
+
5
+ #include "ArrayConverter.hpp"
6
+
7
+ #include <memory>
8
+
9
+ #include "CArrowChunkIterator.hpp"
10
+ #include "CArrowIterator.hpp"
11
+ #include "SnowflakeType.hpp"
12
+
13
+ namespace sf {
14
+ Logger* ArrayConverter::logger =
15
+ new Logger("snowflake.connector.ArrayConverter");
16
+
17
+ void ArrayConverter::generateError(const std::string& msg) const {
18
+ logger->error(__FILE__, __func__, __LINE__, msg.c_str());
19
+ PyErr_SetString(PyExc_Exception, msg.c_str());
20
+ }
21
+
22
+ ArrayConverter::ArrayConverter(ArrowSchemaView* schemaView,
23
+ ArrowArrayView* array, PyObject* context,
24
+ bool useNumpy) {
25
+ m_array = array;
26
+
27
+ if (schemaView->schema->n_children != 1) {
28
+ std::string errorInfo = Logger::formatString(
29
+ "[Snowflake Exception] invalid arrow schema for array items expected 1 "
30
+ "schema child, but got %d",
31
+ schemaView->schema->n_children);
32
+ this->generateError(errorInfo);
33
+ return;
34
+ }
35
+
36
+ ArrowSchema* item_schema = schemaView->schema->children[0];
37
+ ArrowArrayView* item_array = array->children[0];
38
+ m_item_converter = getConverterFromSchema(item_schema, item_array, context,
39
+ useNumpy, logger);
40
+ }
41
+
42
+ PyObject* ArrayConverter::toPyObject(int64_t rowIndex) const {
43
+ if (ArrowArrayViewIsNull(m_array, rowIndex)) {
44
+ Py_RETURN_NONE;
45
+ }
46
+
47
+ // Array item offsets are stored in the second array buffers
48
+ // Infer start an end of this rows slice by looking at the
49
+ // current and next offset. If there isn't another offset use
50
+ // the end of the array instead.
51
+ int start = m_array->buffer_views[1].data.as_int32[rowIndex];
52
+ int end = m_array->children[0]->length;
53
+ if (rowIndex + 1 < m_array->length) {
54
+ end = m_array->buffer_views[1].data.as_int32[rowIndex + 1];
55
+ }
56
+
57
+ PyObject* list = PyList_New(end - start);
58
+ for (int i = start; i < end; i++) {
59
+ PyList_SetItem(list, i - start, m_item_converter->toPyObject(i));
60
+ }
61
+ return list;
62
+ }
63
+
64
+ } // namespace sf
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright (c) 2012-2023 Snowflake Computing Inc. All rights reserved.
3
+ //
4
+
5
+ #ifndef PC_ARRAYCONVERTER_HPP
6
+ #define PC_ARRAYCONVERTER_HPP
7
+
8
+ #include <memory>
9
+
10
+ #include "IColumnConverter.hpp"
11
+ #include "logging.hpp"
12
+ #include "nanoarrow.h"
13
+ #include "nanoarrow.hpp"
14
+
15
+ namespace sf {
16
+
17
+ class ArrayConverter : public IColumnConverter {
18
+ public:
19
+ explicit ArrayConverter(ArrowSchemaView* schemaView, ArrowArrayView* array,
20
+ PyObject* context, bool useNumpy);
21
+
22
+ PyObject* toPyObject(int64_t rowIndex) const override;
23
+
24
+ private:
25
+ void generateError(const std::string& msg) const;
26
+
27
+ ArrowArrayView* m_array;
28
+ std::shared_ptr<sf::IColumnConverter> m_item_converter;
29
+ static Logger* logger;
30
+ };
31
+
32
+ } // namespace sf
33
+ #endif // PC_ARRAYCONVERTER_HPP
@@ -8,6 +8,7 @@
8
8
  #include <string>
9
9
  #include <vector>
10
10
 
11
+ #include "ArrayConverter.hpp"
11
12
  #include "BinaryConverter.hpp"
12
13
  #include "BooleanConverter.hpp"
13
14
  #include "DateConverter.hpp"
@@ -15,6 +16,8 @@
15
16
  #include "FixedSizeListConverter.hpp"
16
17
  #include "FloatConverter.hpp"
17
18
  #include "IntConverter.hpp"
19
+ #include "MapConverter.hpp"
20
+ #include "ObjectConverter.hpp"
18
21
  #include "StringConverter.hpp"
19
22
  #include "TimeConverter.hpp"
20
23
  #include "TimeStampConverter.hpp"
@@ -193,9 +196,7 @@ std::shared_ptr<sf::IColumnConverter> getConverterFromSchema(
193
196
  }
194
197
 
195
198
  case SnowflakeType::Type::ANY:
196
- case SnowflakeType::Type::ARRAY:
197
199
  case SnowflakeType::Type::CHAR:
198
- case SnowflakeType::Type::OBJECT:
199
200
  case SnowflakeType::Type::TEXT:
200
201
  case SnowflakeType::Type::VARIANT: {
201
202
  converter = std::make_shared<sf::StringConverter>(array);
@@ -378,8 +379,13 @@ std::shared_ptr<sf::IColumnConverter> getConverterFromSchema(
378
379
  returnCode);
379
380
  scale =
380
381
  std::stoi(std::string(scaleString.data, scaleString.size_bytes));
381
- byteLength = std::stoi(
382
- std::string(byteLengthString.data, byteLengthString.size_bytes));
382
+
383
+ // Byte Length may be unset if TIMESTAMP_TZ is the child of a structured
384
+ // type In this case rely on the default value.
385
+ if (byteLengthString.data != nullptr) {
386
+ byteLength = std::stoi(
387
+ std::string(byteLengthString.data, byteLengthString.size_bytes));
388
+ }
383
389
  }
384
390
  switch (byteLength) {
385
391
  case 8: {
@@ -408,6 +414,58 @@ std::shared_ptr<sf::IColumnConverter> getConverterFromSchema(
408
414
  break;
409
415
  }
410
416
 
417
+ case SnowflakeType::Type::ARRAY: {
418
+ switch (schemaView.type) {
419
+ case NANOARROW_TYPE_STRING:
420
+ converter = std::make_shared<sf::StringConverter>(array);
421
+ break;
422
+ case NANOARROW_TYPE_LIST:
423
+ converter = std::make_shared<sf::ArrayConverter>(&schemaView, array,
424
+ context, useNumpy);
425
+ break;
426
+ default: {
427
+ std::string errorInfo = Logger::formatString(
428
+ "[Snowflake Exception] unknown arrow internal data type(%d) "
429
+ "for ARRAY data in %s",
430
+ NANOARROW_TYPE_ENUM_STRING[schemaView.type],
431
+ schemaView.schema->name);
432
+ logger->error(__FILE__, __func__, __LINE__, errorInfo.c_str());
433
+ PyErr_SetString(PyExc_Exception, errorInfo.c_str());
434
+ break;
435
+ }
436
+ }
437
+ break;
438
+ }
439
+
440
+ case SnowflakeType::Type::MAP: {
441
+ converter = std::make_shared<sf::MapConverter>(&schemaView, array,
442
+ context, useNumpy);
443
+ break;
444
+ }
445
+
446
+ case SnowflakeType::Type::OBJECT: {
447
+ switch (schemaView.type) {
448
+ case NANOARROW_TYPE_STRING:
449
+ converter = std::make_shared<sf::StringConverter>(array);
450
+ break;
451
+ case NANOARROW_TYPE_STRUCT:
452
+ converter = std::make_shared<sf::ObjectConverter>(&schemaView, array,
453
+ context, useNumpy);
454
+ break;
455
+ default: {
456
+ std::string errorInfo = Logger::formatString(
457
+ "[Snowflake Exception] unknown arrow internal data type(%d) "
458
+ "for OBJECT data in %s",
459
+ NANOARROW_TYPE_ENUM_STRING[schemaView.type],
460
+ schemaView.schema->name);
461
+ logger->error(__FILE__, __func__, __LINE__, errorInfo.c_str());
462
+ PyErr_SetString(PyExc_Exception, errorInfo.c_str());
463
+ break;
464
+ }
465
+ }
466
+ break;
467
+ }
468
+
411
469
  case SnowflakeType::Type::VECTOR: {
412
470
  converter = std::make_shared<sf::FixedSizeListConverter>(array);
413
471
  break;
@@ -112,6 +112,7 @@ void CArrowTableIterator::reconstructRecordBatches_nanoarrow() {
112
112
  case SnowflakeType::Type::BOOLEAN:
113
113
  case SnowflakeType::Type::CHAR:
114
114
  case SnowflakeType::Type::DATE:
115
+ case SnowflakeType::Type::MAP:
115
116
  case SnowflakeType::Type::OBJECT:
116
117
  case SnowflakeType::Type::REAL:
117
118
  case SnowflakeType::Type::TEXT:
@@ -84,8 +84,18 @@ PyObject* DecimalFromDecimalConverter::toPyObject(int64_t rowIndex) const {
84
84
  ArrowDecimalGetBytes(&arrowDecimal, outBytes);
85
85
  PyObject* int128_bytes = PyBytes_FromStringAndSize(&outBytes, 16);
86
86
  */
87
- return PyObject_CallMethod(m_context, "DECIMAL128_to_decimal", "Si",
88
- int128_bytes, m_scale);
87
+ PyObject* return_object = PyObject_CallMethod(
88
+ m_context, "DECIMAL128_to_decimal", "Si", int128_bytes, m_scale);
89
+ /**
90
+ int128_bytes is a new referenced created by PyBytes_FromStringAndSize,
91
+ to avoid memory leak we need to free it after usage
92
+ check docs:
93
+ https://docs.python.org/3/c-api/bytes.html#c.PyBytes_FromStringAndSize
94
+ https://docs.python.org/3/c-api/refcounting.html#c.Py_XDECREF
95
+
96
+ */
97
+ Py_XDECREF(int128_bytes);
98
+ return return_object;
89
99
  }
90
100
 
91
101
  } // namespace sf
@@ -0,0 +1,79 @@
1
+ //
2
+ // Copyright (c) 2012-2023 Snowflake Computing Inc. All rights reserved.
3
+ //
4
+
5
+ #include "MapConverter.hpp"
6
+
7
+ #include <memory>
8
+
9
+ #include "CArrowChunkIterator.hpp"
10
+ #include "CArrowIterator.hpp"
11
+ #include "SnowflakeType.hpp"
12
+
13
+ namespace sf {
14
+ Logger* MapConverter::logger = new Logger("snowflake.connector.MapConverter");
15
+
16
+ void MapConverter::generateError(const std::string& msg) const {
17
+ logger->error(__FILE__, __func__, __LINE__, msg.c_str());
18
+ PyErr_SetString(PyExc_Exception, msg.c_str());
19
+ }
20
+
21
+ MapConverter::MapConverter(ArrowSchemaView* schemaView, ArrowArrayView* array,
22
+ PyObject* context, bool useNumpy) {
23
+ m_array = array;
24
+
25
+ if (schemaView->schema->n_children != 1) {
26
+ std::string errorInfo = Logger::formatString(
27
+ "[Snowflake Exception] invalid arrow schema for map entries expected 1 "
28
+ "schema child, but got %d",
29
+ schemaView->schema->n_children);
30
+ this->generateError(errorInfo);
31
+ return;
32
+ }
33
+
34
+ ArrowSchema* entries = schemaView->schema->children[0];
35
+
36
+ if (entries->n_children != 2) {
37
+ std::string errorInfo = Logger::formatString(
38
+ "[Snowflake Exception] invalid arrow schema for map key/value pair "
39
+ "expected 2 entries, but got %d",
40
+ entries->n_children);
41
+ this->generateError(errorInfo);
42
+ return;
43
+ }
44
+
45
+ ArrowSchema* key_schema = entries->children[0];
46
+ ArrowArrayView* key_array = array->children[0]->children[0];
47
+ m_key_converter =
48
+ getConverterFromSchema(key_schema, key_array, context, useNumpy, logger);
49
+
50
+ ArrowSchema* value_schema = entries->children[1];
51
+ ArrowArrayView* value_array = array->children[0]->children[1];
52
+ m_value_converter = getConverterFromSchema(value_schema, value_array, context,
53
+ useNumpy, logger);
54
+ }
55
+
56
+ PyObject* MapConverter::toPyObject(int64_t rowIndex) const {
57
+ if (ArrowArrayViewIsNull(m_array, rowIndex)) {
58
+ Py_RETURN_NONE;
59
+ }
60
+
61
+ // Map ArrowArrays have two child Arrays that contain the the keys and values.
62
+ // The offsets for how many items belong to each row are stored in the parent
63
+ // array offset buffer. The start and end of a row slice has to be infered
64
+ // from the offsets for each row.
65
+ int start = m_array->buffer_views[1].data.as_int32[rowIndex];
66
+ int end = m_array->children[0]->length;
67
+ if (rowIndex + 1 < m_array->length) {
68
+ end = m_array->buffer_views[1].data.as_int32[rowIndex + 1];
69
+ }
70
+
71
+ PyObject* dict = PyDict_New();
72
+ for (int i = start; i < end; i++) {
73
+ PyDict_SetItem(dict, m_key_converter->toPyObject(i),
74
+ m_value_converter->toPyObject(i));
75
+ }
76
+ return dict;
77
+ }
78
+
79
+ } // namespace sf
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright (c) 2012-2023 Snowflake Computing Inc. All rights reserved.
3
+ //
4
+
5
+ #ifndef PC_MAPCONVERTER_HPP
6
+ #define PC_MAPCONVERTER_HPP
7
+
8
+ #include <memory>
9
+
10
+ #include "IColumnConverter.hpp"
11
+ #include "logging.hpp"
12
+ #include "nanoarrow.h"
13
+ #include "nanoarrow.hpp"
14
+
15
+ namespace sf {
16
+
17
+ class MapConverter : public IColumnConverter {
18
+ public:
19
+ explicit MapConverter(ArrowSchemaView* schemaView, ArrowArrayView* array,
20
+ PyObject* context, bool useNumpy);
21
+
22
+ PyObject* toPyObject(int64_t rowIndex) const override;
23
+
24
+ private:
25
+ void generateError(const std::string& msg) const;
26
+
27
+ ArrowArrayView* m_array;
28
+ std::shared_ptr<sf::IColumnConverter> m_key_converter;
29
+ std::shared_ptr<sf::IColumnConverter> m_value_converter;
30
+ static Logger* logger;
31
+ };
32
+
33
+ } // namespace sf
34
+ #endif // PC_MAPCONVERTER_HPP
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright (c) 2012-2023 Snowflake Computing Inc. All rights reserved.
3
+ //
4
+
5
+ #include "ObjectConverter.hpp"
6
+
7
+ #include <memory>
8
+
9
+ #include "CArrowChunkIterator.hpp"
10
+ #include "CArrowIterator.hpp"
11
+ #include "SnowflakeType.hpp"
12
+
13
+ namespace sf {
14
+ Logger* ObjectConverter::logger =
15
+ new Logger("snowflake.connector.BinaryConverter");
16
+
17
+ ObjectConverter::ObjectConverter(ArrowSchemaView* schemaView,
18
+ ArrowArrayView* array, PyObject* context,
19
+ bool useNumpy) {
20
+ m_array = array;
21
+ m_converters.clear();
22
+ m_property_names.clear();
23
+ m_propertyCount = schemaView->schema->n_children;
24
+
25
+ for (int i = 0; i < schemaView->schema->n_children; i++) {
26
+ ArrowSchema* property_schema = schemaView->schema->children[i];
27
+
28
+ m_property_names.push_back(property_schema->name);
29
+
30
+ ArrowArrayView* child_array = array->children[i];
31
+
32
+ m_converters.push_back(getConverterFromSchema(property_schema, child_array,
33
+ context, useNumpy, logger));
34
+ }
35
+ }
36
+
37
+ PyObject* ObjectConverter::toPyObject(int64_t rowIndex) const {
38
+ if (ArrowArrayViewIsNull(m_array, rowIndex)) {
39
+ Py_RETURN_NONE;
40
+ }
41
+
42
+ PyObject* dict = PyDict_New();
43
+ for (int i = 0; i < m_propertyCount; i++) {
44
+ PyDict_SetItemString(dict, m_property_names[i],
45
+ m_converters[i]->toPyObject(rowIndex));
46
+ }
47
+ return dict;
48
+ }
49
+
50
+ } // namespace sf
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright (c) 2012-2023 Snowflake Computing Inc. All rights reserved.
3
+ //
4
+ #ifndef PC_OBJECTCONVERTER_HPP
5
+ #define PC_OBJECTCONVERTER_HPP
6
+
7
+ #include <memory>
8
+
9
+ #include "IColumnConverter.hpp"
10
+ #include "logging.hpp"
11
+ #include "nanoarrow.h"
12
+ #include "nanoarrow.hpp"
13
+
14
+ namespace sf {
15
+
16
+ class ObjectConverter : public IColumnConverter {
17
+ public:
18
+ explicit ObjectConverter(ArrowSchemaView* schemaView, ArrowArrayView* array,
19
+ PyObject* context, bool useNumpy);
20
+ PyObject* toPyObject(int64_t rowIndex) const override;
21
+
22
+ private:
23
+ static Logger* logger;
24
+ ArrowArrayView* m_array;
25
+ int m_propertyCount;
26
+ std::vector<const char*> m_property_names;
27
+ std::vector<std::shared_ptr<sf::IColumnConverter>> m_converters;
28
+ };
29
+
30
+ } // namespace sf
31
+
32
+ #endif // PC_OBJECTCONVERTER_HPP
@@ -18,6 +18,7 @@ std::unordered_map<std::string, SnowflakeType::Type>
18
18
  {"DOUBLE", SnowflakeType::Type::REAL},
19
19
  {"FIXED", SnowflakeType::Type::FIXED},
20
20
  {"FLOAT", SnowflakeType::Type::REAL},
21
+ {"MAP", SnowflakeType::Type::MAP},
21
22
  {"OBJECT", SnowflakeType::Type::OBJECT},
22
23
  {"REAL", SnowflakeType::Type::REAL},
23
24
  {"STRING", SnowflakeType::Type::TEXT},
@@ -31,7 +31,8 @@ class SnowflakeType {
31
31
  TIMESTAMP_NTZ = 13,
32
32
  TIMESTAMP_TZ = 14,
33
33
  VARIANT = 15,
34
- VECTOR = 16
34
+ VECTOR = 16,
35
+ MAP = 17,
35
36
  };
36
37
 
37
38
  static SnowflakeType::Type snowflakeTypeFromString(std::string str) {
@@ -389,7 +389,7 @@ def write_pandas(
389
389
  target_table_location = build_location_helper(
390
390
  database,
391
391
  schema,
392
- random_string() if overwrite else table_name,
392
+ random_string() if (overwrite and auto_create_table) else table_name,
393
393
  quote_identifiers,
394
394
  )
395
395
 
@@ -417,6 +417,11 @@ def write_pandas(
417
417
  )
418
418
 
419
419
  try:
420
+ if overwrite and (not auto_create_table):
421
+ truncate_sql = f"TRUNCATE TABLE {target_table_location} /* Python:snowflake.connector.pandas_tools.write_pandas() */"
422
+ logger.debug(f"truncating table with '{truncate_sql}'")
423
+ cursor.execute(truncate_sql, _is_internal=True)
424
+
420
425
  copy_into_sql = (
421
426
  f"COPY INTO {target_table_location} /* Python:snowflake.connector.pandas_tools.write_pandas() */ "
422
427
  f"({columns}) "
@@ -432,7 +437,7 @@ def write_pandas(
432
437
  logger.debug(f"copying into with '{copy_into_sql}'")
433
438
  copy_results = cursor.execute(copy_into_sql, _is_internal=True).fetchall()
434
439
 
435
- if overwrite:
440
+ if overwrite and auto_create_table:
436
441
  original_table_location = build_location_helper(
437
442
  database=database,
438
443
  schema=schema,
@@ -444,7 +449,8 @@ def write_pandas(
444
449
  logger.debug(f"rename table with '{rename_table_sql}'")
445
450
  cursor.execute(rename_table_sql, _is_internal=True)
446
451
  except ProgrammingError:
447
- if overwrite:
452
+ if overwrite and auto_create_table:
453
+ # drop table only if we created a new one with a random name
448
454
  drop_object(target_table_location, "table")
449
455
  raise
450
456
  finally:
@@ -1,3 +1,3 @@
1
1
  # Update this for the versions
2
2
  # Don't change the forth version number from None
3
- VERSION = (3, 7, 0, None)
3
+ VERSION = (3, 7, 1, None)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.7.0
3
+ Version: 3.7.1
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -40,8 +40,8 @@ License-File: LICENSE.txt
40
40
  License-File: NOTICE
41
41
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
42
  Requires-Dist: cffi<2.0.0,>=1.9
43
- Requires-Dist: cryptography<42.0.0,>=3.1.0
44
- Requires-Dist: pyOpenSSL<24.0.0,>=16.2.0
43
+ Requires-Dist: cryptography<43.0.0,>=3.1.0
44
+ Requires-Dist: pyOpenSSL<25.0.0,>=16.2.0
45
45
  Requires-Dist: pyjwt<3.0.0
46
46
  Requires-Dist: pytz
47
47
  Requires-Dist: requests<3.0.0
@@ -70,10 +70,10 @@ Requires-Dist: pytest-timeout; extra == "development"
70
70
  Requires-Dist: pytest-xdist; extra == "development"
71
71
  Requires-Dist: pytzdata; extra == "development"
72
72
  Provides-Extra: pandas
73
- Requires-Dist: pandas<2.2.0,>=1.0.0; extra == "pandas"
73
+ Requires-Dist: pandas<3.0.0,>=1.0.0; extra == "pandas"
74
74
  Requires-Dist: pyarrow; extra == "pandas"
75
75
  Provides-Extra: secure-local-storage
76
- Requires-Dist: keyring!=16.1.0,<25.0.0; extra == "secure-local-storage"
76
+ Requires-Dist: keyring<25.0.0,>=23.1.0; extra == "secure-local-storage"
77
77
 
78
78
  This package includes the Snowflake Connector for Python, which conforms to the Python DB API 2.0 specification:
79
79
  https://www.python.org/dev/peps/pep-0249/
@@ -85,6 +85,15 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
85
85
 
86
86
  # Release Notes
87
87
 
88
+ - v3.7.1(February 21, 2024)
89
+
90
+ - Bumped pandas dependency from >=1.0.0,<2.2.0 to >=1.0.0,<3.0.0.
91
+ - Bumped cryptography dependency from <42.0.0,>=3.1.0 to >=3.1.0,<43.0.0.
92
+ - Bumped pyOpenSSL dependency from >=16.2.0,<24.0.0 to >=16.2.0,<25.0.0.
93
+ - Fixed a memory leak in decimal data conversion.
94
+ - Fixed a bug where `write_pandas` wasn't truncating the target table.
95
+ - Bumped keyring dependency lower bound to 23.1.0 to address security vulnerability.
96
+
88
97
  - v3.7.0(January 25,2024)
89
98
 
90
99
  - Added a new boolean parameter `force_return_table` to `SnowflakeCursor.fetch_arrow_all` to force returning `pyarrow.Table` in case of zero rows.
@@ -94,6 +103,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
94
103
  - Fixed PyArrow Table type hinting
95
104
  - Added support for connecting using an existing connection via the session and master token.
96
105
  - Added support for connecting to Snowflake by authenticating with multiple SAML IDP using external browser.
106
+ - Added support for structured types (OBJECT, MAP, ARRAY) to nanoarrow converters.
97
107
  - Fixed compilation issue due to missing cstdint header on gcc13.
98
108
  - Improved config permissions warning message.
99
109