snowflake-connector-python 5.2.0__cp315-cp315-win_amd64.whl

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 (204) hide show
  1. snowflake/connector/__init__.py +148 -0
  2. snowflake/connector/_common/__init__.py +0 -0
  3. snowflake/connector/_common/extras.py +134 -0
  4. snowflake/connector/_common/telemetry.py +221 -0
  5. snowflake/connector/_common/wif_util.py +92 -0
  6. snowflake/connector/_core/sf_core_python.cp315-win_amd64.pyd +0 -0
  7. snowflake/connector/_core/sf_core_python.pyi +79 -0
  8. snowflake/connector/_internal/__init__.py +6 -0
  9. snowflake/connector/_internal/_private_key_helper.py +31 -0
  10. snowflake/connector/_internal/api_client/__init__.py +93 -0
  11. snowflake/connector/_internal/api_client/bridge.py +41 -0
  12. snowflake/connector/_internal/api_client/client_api.py +976 -0
  13. snowflake/connector/_internal/arrow.py +47 -0
  14. snowflake/connector/_internal/arrow_context.py +240 -0
  15. snowflake/connector/_internal/arrow_stream_async.py +266 -0
  16. snowflake/connector/_internal/arrow_stream_iterator.cp311-win_amd64.pyd +0 -0
  17. snowflake/connector/_internal/arrow_stream_iterator.cp312-win_amd64.pyd +0 -0
  18. snowflake/connector/_internal/arrow_stream_iterator.cp313-win_amd64.pyd +0 -0
  19. snowflake/connector/_internal/arrow_stream_iterator.cp314-win_amd64.pyd +0 -0
  20. snowflake/connector/_internal/arrow_stream_iterator.cp314t-win_amd64.pyd +0 -0
  21. snowflake/connector/_internal/arrow_stream_iterator.cp315-win_amd64.pyd +0 -0
  22. snowflake/connector/_internal/arrow_stream_iterator.pyi +42 -0
  23. snowflake/connector/_internal/arrow_stream_utils.py +171 -0
  24. snowflake/connector/_internal/authenticator_type.py +53 -0
  25. snowflake/connector/_internal/backward_compatibility.py +245 -0
  26. snowflake/connector/_internal/binding_converters.py +741 -0
  27. snowflake/connector/_internal/config_utils.py +71 -0
  28. snowflake/connector/_internal/connection/__init__.py +39 -0
  29. snowflake/connector/_internal/connection/connection.py +616 -0
  30. snowflake/connector/_internal/connection/connection_types.py +13 -0
  31. snowflake/connector/_internal/connection/constants.py +25 -0
  32. snowflake/connector/_internal/connection/decorators.py +31 -0
  33. snowflake/connector/_internal/connection/freezable_proxy.py +104 -0
  34. snowflake/connector/_internal/connection/queries.py +10 -0
  35. snowflake/connector/_internal/connection_config_mixin.py +755 -0
  36. snowflake/connector/_internal/cursor/__init__.py +25 -0
  37. snowflake/connector/_internal/cursor/base.py +732 -0
  38. snowflake/connector/_internal/cursor/cursor_types.py +13 -0
  39. snowflake/connector/_internal/cursor/decorators.py +56 -0
  40. snowflake/connector/_internal/cursor/query_result.py +202 -0
  41. snowflake/connector/_internal/cursor/query_result_waiter.py +98 -0
  42. snowflake/connector/_internal/cursor/result_metadata.py +255 -0
  43. snowflake/connector/_internal/cursor/result_set_wrapper.py +66 -0
  44. snowflake/connector/_internal/decorators.py +539 -0
  45. snowflake/connector/_internal/error_kinds.py +111 -0
  46. snowflake/connector/_internal/errorcode.py +35 -0
  47. snowflake/connector/_internal/errorhandler.py +278 -0
  48. snowflake/connector/_internal/fips.py +28 -0
  49. snowflake/connector/_internal/logging/__init__.py +52 -0
  50. snowflake/connector/_internal/logging/config.py +134 -0
  51. snowflake/connector/_internal/logging/core_logger.py +218 -0
  52. snowflake/connector/_internal/logging/native_extension_logger.py +144 -0
  53. snowflake/connector/_internal/logout_config_mapping.py +187 -0
  54. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +57 -0
  55. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +29 -0
  56. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.cpp +943 -0
  57. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.hpp +63 -0
  58. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +18 -0
  59. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +26 -0
  60. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +21 -0
  61. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +23 -0
  62. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +118 -0
  63. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +116 -0
  64. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.cpp +323 -0
  65. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.hpp +133 -0
  66. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.cpp +275 -0
  67. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.hpp +168 -0
  68. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.cpp +439 -0
  69. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.hpp +30 -0
  70. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +48 -0
  71. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +46 -0
  72. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +76 -0
  73. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +35 -0
  74. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +90 -0
  75. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +63 -0
  76. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +62 -0
  77. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +28 -0
  78. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +29 -0
  79. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +35 -0
  80. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +17 -0
  81. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +23 -0
  82. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +41 -0
  83. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +65 -0
  84. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +54 -0
  85. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/LICENSE.txt +209 -0
  86. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +79 -0
  87. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +30 -0
  88. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +52 -0
  89. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +29 -0
  90. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +8 -0
  91. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +117 -0
  92. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +54 -0
  93. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +34 -0
  94. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +33 -0
  95. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +48 -0
  96. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +18 -0
  97. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +26 -0
  98. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +39 -0
  99. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +31 -0
  100. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +326 -0
  101. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +138 -0
  102. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +14 -0
  103. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.cpp +65 -0
  104. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.hpp +68 -0
  105. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.cpp +13278 -0
  106. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.pyx +204 -0
  107. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +109 -0
  108. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +125 -0
  109. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +45 -0
  110. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +1914 -0
  111. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +208 -0
  112. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +128 -0
  113. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +7 -0
  114. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +58 -0
  115. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +144 -0
  116. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +31 -0
  117. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +8 -0
  118. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +144 -0
  119. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +160 -0
  120. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +98 -0
  121. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +243 -0
  122. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +14 -0
  123. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +207 -0
  124. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +80 -0
  125. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +83 -0
  126. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +20 -0
  127. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +51 -0
  128. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +201 -0
  129. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +108 -0
  130. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +19 -0
  131. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +52 -0
  132. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +2 -0
  133. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +25 -0
  134. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +67 -0
  135. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +164 -0
  136. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +926 -0
  137. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +182 -0
  138. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +6 -0
  139. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +52 -0
  140. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc.c +3052 -0
  141. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.c +3019 -0
  142. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.h +3354 -0
  143. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +344 -0
  144. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +29305 -0
  145. snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +381 -0
  146. snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.cpp +108 -0
  147. snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.hpp +47 -0
  148. snowflake/connector/_internal/nanoarrow_cpp/scripts/.clang-format +8 -0
  149. snowflake/connector/_internal/nanoarrow_cpp/scripts/format.sh +8 -0
  150. snowflake/connector/_internal/protobuf_gen/__init__.py +0 -0
  151. snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +408 -0
  152. snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.pyi +4487 -0
  153. snowflake/connector/_internal/protobuf_gen/database_driver_v1_services.py +2088 -0
  154. snowflake/connector/_internal/protobuf_gen/proto_exception.py +17 -0
  155. snowflake/connector/_internal/result_batch.py +150 -0
  156. snowflake/connector/_internal/snowflake_restful.py +222 -0
  157. snowflake/connector/_internal/snowpark_backcompat_helpers.py +31 -0
  158. snowflake/connector/_internal/sqlstate.py +11 -0
  159. snowflake/connector/_internal/statement_utils.py +207 -0
  160. snowflake/connector/_internal/text_utils.py +112 -0
  161. snowflake/connector/_internal/type_codes.py +139 -0
  162. snowflake/connector/_internal/utils.py +65 -0
  163. snowflake/connector/_internal/write_pandas_operation.py +657 -0
  164. snowflake/connector/aio/README.md +168 -0
  165. snowflake/connector/aio/__init__.py +37 -0
  166. snowflake/connector/aio/connection/__init__.py +17 -0
  167. snowflake/connector/aio/connection/_connection.py +506 -0
  168. snowflake/connector/aio/cursor/__init__.py +35 -0
  169. snowflake/connector/aio/cursor/_base.py +1034 -0
  170. snowflake/connector/aio/cursor/_dict_cursor.py +78 -0
  171. snowflake/connector/aio/cursor/_result_set_wrapper.py +35 -0
  172. snowflake/connector/aio/cursor/_snowflake_cursor.py +72 -0
  173. snowflake/connector/aio/pandas_tools.py +279 -0
  174. snowflake/connector/aio/result_batch.py +165 -0
  175. snowflake/connector/auth/__init__.py +0 -0
  176. snowflake/connector/auth/workload_identity.py +5 -0
  177. snowflake/connector/compat.py +22 -0
  178. snowflake/connector/config_manager.py +392 -0
  179. snowflake/connector/connection/__init__.py +30 -0
  180. snowflake/connector/connection/_connection.py +641 -0
  181. snowflake/connector/connection_config.py +517 -0
  182. snowflake/connector/constants.py +52 -0
  183. snowflake/connector/cursor/__init__.py +37 -0
  184. snowflake/connector/cursor/_base.py +1169 -0
  185. snowflake/connector/cursor/_chunked_download_reader.py +75 -0
  186. snowflake/connector/cursor/_dict_cursor.py +78 -0
  187. snowflake/connector/cursor/_result_set_wrapper.py +35 -0
  188. snowflake/connector/cursor/_snowflake_cursor.py +72 -0
  189. snowflake/connector/description.py +7 -0
  190. snowflake/connector/errors.py +492 -0
  191. snowflake/connector/network.py +71 -0
  192. snowflake/connector/pandas_tools.py +191 -0
  193. snowflake/connector/py.typed +0 -0
  194. snowflake/connector/result_batch.py +216 -0
  195. snowflake/connector/telemetry.py +40 -0
  196. snowflake/connector/time_util.py +11 -0
  197. snowflake/connector/types.py +134 -0
  198. snowflake/connector/util_text.py +3 -0
  199. snowflake/connector/version.py +23 -0
  200. snowflake_connector_python-5.2.0.dist-info/DELVEWHEEL +2 -0
  201. snowflake_connector_python-5.2.0.dist-info/METADATA +190 -0
  202. snowflake_connector_python-5.2.0.dist-info/RECORD +204 -0
  203. snowflake_connector_python-5.2.0.dist-info/WHEEL +4 -0
  204. snowflake_connector_python.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll +0 -0
@@ -0,0 +1,63 @@
1
+ #ifndef PC_ARROWTABLECONVERTER_HPP
2
+ #define PC_ARROWTABLECONVERTER_HPP
3
+
4
+ #include <string>
5
+
6
+ #include "CArrowIterator.hpp"
7
+ #include "logging.hpp"
8
+ #include "nanoarrow.h"
9
+ #include "nanoarrow.hpp"
10
+
11
+ namespace sf {
12
+
13
+ /**
14
+ * Stateless-ish helper that applies Snowflake-specific type conversions to
15
+ * Arrow columns in-place. Both CArrowTableIterator (IPC-based) and
16
+ * CArrowStreamTableIterator (stream-based) delegate all per-column
17
+ * conversion to this class so the logic lives in a single place.
18
+ *
19
+ * Construction captures the three session-level knobs that affect
20
+ * conversion behaviour; individual columns are converted via
21
+ * convertIfNeeded().
22
+ */
23
+ class ArrowTableConverter {
24
+ public:
25
+ ArrowTableConverter(bool number_to_decimal, bool force_microsecond_precision, const std::string& timezone);
26
+
27
+ /**
28
+ * Inspect the Snowflake logical-type metadata on @p columnSchema and
29
+ * convert @p columnArray in-place when necessary.
30
+ *
31
+ * Sets a Python exception on failure (caller should check
32
+ * py::checkPyError() after the call).
33
+ */
34
+ void convertIfNeeded(ArrowSchema* columnSchema, ArrowArrayView* columnArray);
35
+
36
+ private:
37
+ void convertScaledFixedNumberColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, unsigned int scale);
38
+
39
+ void convertScaledFixedNumberColumnToDecimalColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, unsigned int scale);
40
+
41
+ void convertScaledFixedNumberColumnToDoubleColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, unsigned int scale);
42
+
43
+ void convertTimeColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, int scale);
44
+
45
+ void convertIntervalDayTimeColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, int scale);
46
+
47
+ void convertTimestampColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, int scale, const std::string& timezone = "");
48
+
49
+ void convertTimestampTZColumn_nanoarrow(ArrowSchemaView* field, ArrowArrayView* columnArray, int scale, int byteLength, const std::string& timezone);
50
+
51
+ template <typename T>
52
+ double convertScaledFixedNumberToDouble(unsigned int scale, T originalValue);
53
+
54
+ const bool m_convert_number_to_decimal;
55
+ const bool m_force_microsecond_precision;
56
+ const std::string m_timezone;
57
+
58
+ static Logger* logger;
59
+ };
60
+
61
+ } // namespace sf
62
+
63
+ #endif // PC_ARROWTABLECONVERTER_HPP
@@ -0,0 +1,18 @@
1
+ #include "BinaryConverter.hpp"
2
+
3
+ #include <memory>
4
+
5
+ namespace sf {
6
+ Logger* BinaryConverter::logger = new Logger("snowflake.connector.BinaryConverter");
7
+
8
+ BinaryConverter::BinaryConverter(ArrowArrayView* array) : m_array(array) {}
9
+
10
+ PyObject* BinaryConverter::toPyObject(int64_t rowIndex) const {
11
+ if (ArrowArrayViewIsNull(m_array, rowIndex)) {
12
+ Py_RETURN_NONE;
13
+ }
14
+ ArrowStringView stringView = ArrowArrayViewGetStringUnsafe(m_array, rowIndex);
15
+ return PyByteArray_FromStringAndSize(stringView.data, stringView.size_bytes);
16
+ }
17
+
18
+ } // namespace sf
@@ -0,0 +1,26 @@
1
+ #ifndef PC_BINARYCONVERTER_HPP
2
+ #define PC_BINARYCONVERTER_HPP
3
+
4
+ #include <memory>
5
+
6
+ #include "IColumnConverter.hpp"
7
+ #include "logging.hpp"
8
+ #include "nanoarrow.h"
9
+
10
+ namespace sf {
11
+
12
+ class BinaryConverter : public IColumnConverter {
13
+ public:
14
+ explicit BinaryConverter(ArrowArrayView* array);
15
+
16
+ PyObject* toPyObject(int64_t rowIndex) const override;
17
+
18
+ private:
19
+ ArrowArrayView* m_array;
20
+
21
+ static Logger* logger;
22
+ };
23
+
24
+ } // namespace sf
25
+
26
+ #endif // PC_BINARYCONVERTER_HPP
@@ -0,0 +1,21 @@
1
+ #include "BooleanConverter.hpp"
2
+
3
+ #include <memory>
4
+
5
+ namespace sf {
6
+
7
+ BooleanConverter::BooleanConverter(ArrowArrayView* array) : m_array(array) {}
8
+
9
+ PyObject* BooleanConverter::toPyObject(int64_t rowIndex) const {
10
+ if (ArrowArrayViewIsNull(m_array, rowIndex)) {
11
+ Py_RETURN_NONE;
12
+ }
13
+
14
+ if (ArrowArrayViewGetIntUnsafe(m_array, rowIndex)) {
15
+ Py_RETURN_TRUE;
16
+ } else {
17
+ Py_RETURN_FALSE;
18
+ }
19
+ }
20
+
21
+ } // namespace sf
@@ -0,0 +1,23 @@
1
+ #ifndef PC_BOOLEANCONVERTER_HPP
2
+ #define PC_BOOLEANCONVERTER_HPP
3
+
4
+ #include <memory>
5
+
6
+ #include "IColumnConverter.hpp"
7
+ #include "nanoarrow.h"
8
+
9
+ namespace sf {
10
+
11
+ class BooleanConverter : public IColumnConverter {
12
+ public:
13
+ explicit BooleanConverter(ArrowArrayView* array);
14
+
15
+ PyObject* toPyObject(int64_t rowIndex) const override;
16
+
17
+ private:
18
+ ArrowArrayView* m_array;
19
+ };
20
+
21
+ } // namespace sf
22
+
23
+ #endif // PC_BOOLEANCONVERTER_HPP
@@ -0,0 +1,118 @@
1
+ #include "CArrowIterator.hpp"
2
+
3
+ #include <memory>
4
+
5
+ #include "nanoarrow.h"
6
+ #include "nanoarrow_ipc.h"
7
+
8
+ namespace sf {
9
+
10
+ const char* const NANOARROW_TYPE_ENUM_STRING[] = {"NANOARROW_TYPE_UNINITIALIZED",
11
+ "NANOARROW_TYPE_NA",
12
+ "NANOARROW_TYPE_BOOL",
13
+ "NANOARROW_TYPE_UINT8",
14
+ "NANOARROW_TYPE_INT8",
15
+ "NANOARROW_TYPE_UINT16",
16
+ "NANOARROW_TYPE_INT16",
17
+ "NANOARROW_TYPE_UINT32",
18
+ "NANOARROW_TYPE_INT32",
19
+ "NANOARROW_TYPE_UINT64",
20
+ "NANOARROW_TYPE_INT64",
21
+ "NANOARROW_TYPE_HALF_FLOAT",
22
+ "NANOARROW_TYPE_FLOAT",
23
+ "NANOARROW_TYPE_DOUBLE",
24
+ "NANOARROW_TYPE_STRING",
25
+ "NANOARROW_TYPE_BINARY",
26
+ "NANOARROW_TYPE_FIXED_SIZE_BINARY",
27
+ "NANOARROW_TYPE_DATE32",
28
+ "NANOARROW_TYPE_DATE64",
29
+ "NANOARROW_TYPE_TIMESTAMP",
30
+ "NANOARROW_TYPE_TIME32",
31
+ "NANOARROW_TYPE_TIME64",
32
+ "NANOARROW_TYPE_INTERVAL_MONTHS",
33
+ "NANOARROW_TYPE_INTERVAL_DAY_TIME",
34
+ "NANOARROW_TYPE_DECIMAL128",
35
+ "NANOARROW_TYPE_DECIMAL256",
36
+ "NANOARROW_TYPE_LIST",
37
+ "NANOARROW_TYPE_STRUCT",
38
+ "NANOARROW_TYPE_SPARSE_UNION",
39
+ "NANOARROW_TYPE_DENSE_UNION",
40
+ "NANOARROW_TYPE_DICTIONARY",
41
+ "NANOARROW_TYPE_MAP",
42
+ "NANOARROW_TYPE_EXTENSION",
43
+ "NANOARROW_TYPE_FIXED_SIZE_LIST",
44
+ "NANOARROW_TYPE_DURATION",
45
+ "NANOARROW_TYPE_LARGE_STRING",
46
+ "NANOARROW_TYPE_LARGE_BINARY",
47
+ "NANOARROW_TYPE_LARGE_LIST",
48
+ "NANOARROW_TYPE_INTERVAL_MONTH_DAY_NANO"};
49
+
50
+ Logger* CArrowIterator::logger = new Logger("snowflake.connector.CArrowIterator");
51
+
52
+ CArrowIterator::CArrowIterator(char* arrow_bytes, int64_t arrow_bytes_size) {
53
+ int returnCode = 0;
54
+ ArrowBuffer input_buffer;
55
+ ArrowBufferInit(&input_buffer);
56
+ returnCode = ArrowBufferAppend(&input_buffer, arrow_bytes, arrow_bytes_size);
57
+ SF_CHECK_ARROW_RC(returnCode, "[Snowflake Exception] error loading arrow bytes, error code: %d",
58
+ returnCode);
59
+ ArrowIpcInputStream input;
60
+ returnCode = ArrowIpcInputStreamInitBuffer(&input, &input_buffer);
61
+ SF_CHECK_ARROW_RC(returnCode,
62
+ "[Snowflake Exception] error initializing "
63
+ "ArrowIpcInputStream, error code: %d",
64
+ returnCode);
65
+ ArrowArrayStream stream;
66
+ returnCode = ArrowIpcArrayStreamReaderInit(&stream, &input, nullptr);
67
+ SF_CHECK_ARROW_RC_AND_RELEASE_ARROW_STREAM(
68
+ returnCode, stream,
69
+ "[Snowflake Exception] error initializing ArrowIpcArrayStreamReader, "
70
+ "error code: %d",
71
+ returnCode);
72
+ returnCode = stream.get_schema(&stream, m_ipcArrowSchema.get());
73
+ SF_CHECK_ARROW_RC_AND_RELEASE_ARROW_STREAM(
74
+ returnCode, stream, "[Snowflake Exception] error getting schema from stream, error code: %d",
75
+ returnCode);
76
+
77
+ while (true) {
78
+ nanoarrow::UniqueArray newUniqueArray;
79
+ nanoarrow::UniqueArrayView newUniqueArrayView;
80
+ auto retcode = stream.get_next(&stream, newUniqueArray.get());
81
+ if (retcode == NANOARROW_OK && newUniqueArray->release != nullptr) {
82
+ m_ipcArrowArrayVec.push_back(std::move(newUniqueArray));
83
+
84
+ ArrowError error;
85
+ returnCode =
86
+ ArrowArrayViewInitFromSchema(newUniqueArrayView.get(), m_ipcArrowSchema.get(), &error);
87
+ SF_CHECK_ARROW_RC_AND_RELEASE_ARROW_STREAM(
88
+ returnCode, stream,
89
+ "[Snowflake Exception] error initializing ArrowArrayView from schema "
90
+ ": %s, error code: %d",
91
+ ArrowErrorMessage(&error), returnCode);
92
+
93
+ returnCode = ArrowArrayViewSetArray(newUniqueArrayView.get(), newUniqueArray.get(), &error);
94
+ SF_CHECK_ARROW_RC_AND_RELEASE_ARROW_STREAM(
95
+ returnCode, stream,
96
+ "[Snowflake Exception] error setting ArrowArrayView from array : %s, "
97
+ "error code: %d",
98
+ ArrowErrorMessage(&error), returnCode);
99
+ m_ipcArrowArrayViewVec.push_back(std::move(newUniqueArrayView));
100
+ } else {
101
+ SF_CHECK_ARROW_RC_AND_RELEASE_ARROW_STREAM(
102
+ retcode, stream,
103
+ "[Snowflake Exception] error getting schema from stream, error code: "
104
+ "%d",
105
+ returnCode);
106
+ break;
107
+ }
108
+ }
109
+ stream.release(&stream);
110
+ logger->debug(__FILE__, __func__, __LINE__, "Arrow BatchSize: %d", m_ipcArrowArrayVec.size());
111
+ }
112
+
113
+ ReturnVal CArrowIterator::checkInitializationStatus() {
114
+ SF_CHECK_PYTHON_ERR()
115
+ return ReturnVal(nullptr, nullptr);
116
+ }
117
+
118
+ } // namespace sf
@@ -0,0 +1,116 @@
1
+ #ifndef PC_ARROWITERATOR_HPP
2
+ #define PC_ARROWITERATOR_HPP
3
+
4
+ #include <cstdint>
5
+ #include <memory>
6
+ #include <string>
7
+ #include <vector>
8
+
9
+ #include "Python/Common.hpp"
10
+ #include "logging.hpp"
11
+ #include "nanoarrow.hpp"
12
+
13
+ // logger->error() and PyErr_SetString() both call into the Python/C API. This
14
+ // may run inside a Py_BEGIN_ALLOW_THREADS block (e.g. ArrowTableConverter's
15
+ // per-column conversion loop) as well as ordinary GIL-holding code paths, so
16
+ // guard with py::PyUniqueLock, which re-acquires the GIL only if it isn't
17
+ // already held by this thread.
18
+ #define SF_CHECK_ARROW_RC(arrow_status, format_string, ...) \
19
+ if (arrow_status != NANOARROW_OK) { \
20
+ std::string errorInfo = Logger::formatString(format_string, ##__VA_ARGS__); \
21
+ { \
22
+ py::PyUniqueLock gilGuard; \
23
+ logger->error(__FILE__, __func__, __LINE__, errorInfo.c_str()); \
24
+ PyErr_SetString(PyExc_Exception, errorInfo.c_str()); \
25
+ } \
26
+ return; \
27
+ }
28
+
29
+ #define SF_CHECK_ARROW_RC_AND_RETURN(arrow_status, ret_val, format_string, ...) \
30
+ if (arrow_status != NANOARROW_OK) { \
31
+ std::string errorInfo = Logger::formatString(format_string, ##__VA_ARGS__); \
32
+ logger->error(__FILE__, __func__, __LINE__, errorInfo.c_str()); \
33
+ PyErr_SetString(PyExc_Exception, errorInfo.c_str()); \
34
+ return ret_val; \
35
+ }
36
+
37
+ #define SF_CHECK_ARROW_RC_AND_RELEASE_ARROW_STREAM(arrow_status, stream, format_string, ...) \
38
+ if (arrow_status != NANOARROW_OK) { \
39
+ std::string errorInfo = std::string(format_string) + std::string(", error info: ") + \
40
+ std::string(stream.get_last_error(&stream)); \
41
+ std::string fullErrorInfo = Logger::formatString(errorInfo.c_str(), ##__VA_ARGS__); \
42
+ logger->error(__FILE__, __func__, __LINE__, fullErrorInfo.c_str()); \
43
+ PyErr_SetString(PyExc_Exception, fullErrorInfo.c_str()); \
44
+ stream.release(&stream); \
45
+ return; \
46
+ }
47
+
48
+ #define SF_CHECK_PYTHON_ERR() \
49
+ if (py::checkPyError()) { \
50
+ PyObject *type, *val, *traceback; \
51
+ PyErr_Fetch(&type, &val, &traceback); \
52
+ PyErr_Clear(); \
53
+ m_currentPyException.reset(val); \
54
+ \
55
+ Py_XDECREF(type); \
56
+ Py_XDECREF(traceback); \
57
+ \
58
+ return ReturnVal(nullptr, m_currentPyException.get()); \
59
+ }
60
+
61
+ namespace sf {
62
+
63
+ extern const char* const NANOARROW_TYPE_ENUM_STRING[];
64
+
65
+ /**
66
+ * A simple struct to contain return data back cython.
67
+ * PyObject would be nullptr if failed and cause string will be populated
68
+ *
69
+ * Note that `ReturnVal` does not own these pointers, so they should
70
+ * not be decref'ed by the receiver.
71
+ */
72
+ class ReturnVal {
73
+ public:
74
+ ReturnVal() : successObj(nullptr), exception(nullptr) {}
75
+
76
+ ReturnVal(PyObject* obj, PyObject* except) : successObj(obj), exception(except) {}
77
+
78
+ PyObject* successObj;
79
+
80
+ PyObject* exception;
81
+ };
82
+
83
+ /**
84
+ * Arrow base iterator implementation in C++.
85
+ */
86
+
87
+ class CArrowIterator {
88
+ public:
89
+ CArrowIterator(char* arrow_bytes, int64_t arrow_bytes_size);
90
+
91
+ virtual ~CArrowIterator() = default;
92
+
93
+ /**
94
+ * @return a python object which might be current row or an Arrow Table
95
+ */
96
+ virtual ReturnVal next() = 0;
97
+ virtual std::vector<uintptr_t> getArrowArrayPtrs() { return {}; };
98
+ virtual std::vector<uintptr_t> getArrowSchemaPtrs() { return {}; };
99
+
100
+ /** check whether initialization succeeded or encountered error */
101
+ ReturnVal checkInitializationStatus();
102
+
103
+ protected:
104
+ static Logger* logger;
105
+
106
+ /** nanoarrow data */
107
+ std::vector<nanoarrow::UniqueArray> m_ipcArrowArrayVec;
108
+ std::vector<nanoarrow::UniqueArrayView> m_ipcArrowArrayViewVec;
109
+ nanoarrow::UniqueSchema m_ipcArrowSchema;
110
+
111
+ /** pointer to the current python exception object */
112
+ py::UniqueRef m_currentPyException;
113
+ };
114
+ } // namespace sf
115
+
116
+ #endif // PC_ARROWITERATOR_HPP