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.
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/DESCRIPTION.md +10 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/PKG-INFO +15 -5
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/setup.cfg +4 -4
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/setup.py +3 -0
- snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +64 -0
- snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +33 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +62 -4
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +1 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +12 -2
- snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +79 -0
- snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +34 -0
- snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +50 -0
- snowflake-connector-python-3.7.1/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +32 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +1 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +2 -1
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/pandas_tools.py +9 -3
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/version.py +1 -1
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/PKG-INFO +15 -5
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/SOURCES.txt +6 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/requires.txt +4 -4
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/CONTRIBUTING.md +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/LICENSE.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/MANIFEST.in +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/NOTICE +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/README.md +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/SECURITY.md +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/pyproject.toml +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/cache.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/compat.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/constants.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/cursor.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/description.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/errors.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/feature.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/file_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {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
- {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
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {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
- {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
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {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
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {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
- {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
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/network.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/options.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/proxy.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/py.typed +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/result_set.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/test_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/time_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/url_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/util_text.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.7.1}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {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.
|
|
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<
|
|
44
|
-
Requires-Dist: pyOpenSSL<
|
|
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<
|
|
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
|
|
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,<
|
|
49
|
-
pyOpenSSL>=16.2.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,<
|
|
96
|
+
pandas>=1.0.0,<3.0.0
|
|
97
97
|
pyarrow
|
|
98
98
|
secure-local-storage =
|
|
99
|
-
keyring
|
|
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
|
-
|
|
382
|
-
|
|
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
|
-
|
|
88
|
-
|
|
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},
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.7.
|
|
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<
|
|
44
|
-
Requires-Dist: pyOpenSSL<
|
|
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<
|
|
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
|
|
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
|
|