arrowsql 0.1.0__tar.gz → 0.3.0__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 (521) hide show
  1. arrowsql-0.3.0/AGENTS.md +27 -0
  2. arrowsql-0.3.0/CHANGELOG.md +184 -0
  3. {arrowsql-0.1.0 → arrowsql-0.3.0}/CONTRIBUTING.md +3 -2
  4. {arrowsql-0.1.0 → arrowsql-0.3.0}/Cargo.lock +28 -1
  5. {arrowsql-0.1.0 → arrowsql-0.3.0}/Cargo.toml +28 -12
  6. {arrowsql-0.1.0 → arrowsql-0.3.0}/PKG-INFO +3 -1
  7. {arrowsql-0.1.0 → arrowsql-0.3.0}/README.md +2 -0
  8. arrowsql-0.3.0/build.rs +3 -0
  9. arrowsql-0.3.0/crates/arrowsql-core/Cargo.toml +31 -0
  10. arrowsql-0.3.0/crates/arrowsql-core/src/api.rs +558 -0
  11. arrowsql-0.3.0/crates/arrowsql-core/src/arrow/mod.rs +79 -0
  12. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/arrow/sink.rs +14 -16
  13. arrowsql-0.3.0/crates/arrowsql-core/src/arrow/stream.rs +465 -0
  14. arrowsql-0.3.0/crates/arrowsql-core/src/connection.rs +246 -0
  15. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/connstr.rs +19 -0
  16. arrowsql-0.3.0/crates/arrowsql-core/src/decode/ascii.rs +90 -0
  17. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/decode/buffer.rs +83 -2
  18. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/decode/describe.rs +0 -60
  19. arrowsql-0.3.0/crates/arrowsql-core/src/decode/mod.rs +12 -0
  20. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/diag.rs +0 -9
  21. arrowsql-0.3.0/crates/arrowsql-core/src/error.rs +126 -0
  22. arrowsql-0.3.0/crates/arrowsql-core/src/lib.rs +85 -0
  23. arrowsql-0.3.0/crates/arrowsql-core/src/numeric.rs +40 -0
  24. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/batch.rs +57 -9
  25. arrowsql-0.3.0/crates/arrowsql-core/src/params/mod.rs +125 -0
  26. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/udt.rs +3 -22
  27. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/pooling.rs +10 -11
  28. arrowsql-0.3.0/crates/arrowsql-core/src/read.rs +1028 -0
  29. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/runtime.rs +125 -88
  30. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/cancel.rs +3 -1
  31. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/cursor.rs +29 -26
  32. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/exec.rs +17 -28
  33. arrowsql-0.3.0/crates/arrowsql-core/src/statement/mod.rs +122 -0
  34. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/wire.rs +27 -6
  35. arrowsql-0.3.0/crates/arrowsql-core/src/txn_abort.rs +145 -0
  36. arrowsql-0.3.0/crates/arrowsql-core/src/utf8.rs +156 -0
  37. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/utf8_wrap.rs +0 -36
  38. arrowsql-0.3.0/crates/arrowsql-core/tests/live.rs +368 -0
  39. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/AGENT_MODE.md +14 -0
  40. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ARCHITECTURE.md +67 -20
  41. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/CONTRACT.md +9 -0
  42. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PACKAGING.md +8 -7
  43. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PLATFORMS_AND_CONNECTION.md +39 -0
  44. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PYTHON_LAYER_CHANGES.md +8 -1
  45. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ROADMAP.md +2 -2
  46. {arrowsql-0.1.0 → arrowsql-0.3.0}/pyproject.toml +5 -4
  47. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/_rust_auth.py +23 -8
  48. arrowsql-0.3.0/python/arrowsql/_utf8_strings.py +28 -0
  49. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/aio.py +20 -7
  50. arrowsql-0.3.0/python/arrowsql/arrow_parallel.py +191 -0
  51. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/auth.py +37 -1
  52. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/bulk_parallel.py +41 -49
  53. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/connection.py +18 -13
  54. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/connection_string_parser.py +33 -5
  55. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/constants.py +2 -0
  56. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/cursor.py +44 -7
  57. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/ddbc_bindings.pyi +69 -0
  58. arrowsql-0.3.0/python/arrowsql/exceptions.py +214 -0
  59. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/helpers.py +13 -0
  60. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/logging.py +8 -8
  61. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/parameter_helper.py +4 -12
  62. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/row.py +23 -208
  63. {arrowsql-0.1.0 → arrowsql-0.3.0}/requirements-dev.txt +1 -0
  64. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/check_upstream_baseline.py +12 -2
  65. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/run_tests.py +18 -1
  66. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/agent/mod.rs +3 -2
  67. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/connection.rs +65 -22
  68. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/convert.rs +56 -68
  69. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/hub.rs +2 -23
  70. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/pool.rs +40 -4
  71. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/session.rs +232 -68
  72. arrowsql-0.3.0/src/arrow/export.rs +419 -0
  73. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/arrow/mod.rs +11 -46
  74. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/arrow_encode.rs +4 -2
  75. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/arrow_source.rs +74 -10
  76. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/mod.rs +3 -1
  77. arrowsql-0.3.0/src/bulk/parallel.rs +193 -0
  78. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/rows.rs +7 -17
  79. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/settings.rs +10 -0
  80. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/wire.rs +1 -15
  81. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/connection.rs +64 -201
  82. arrowsql-0.3.0/src/decode/describe.rs +67 -0
  83. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/mod.rs +2 -4
  84. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/python.rs +6 -72
  85. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/temporal.rs +27 -0
  86. arrowsql-0.3.0/src/dns_ttl_cache_tests.rs +501 -0
  87. arrowsql-0.3.0/src/errors.rs +324 -0
  88. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/getinfo.rs +7 -12
  89. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/lib.rs +90 -9
  90. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/logging.rs +60 -0
  91. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/params/mod.rs +4 -70
  92. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/params/py_types.rs +56 -135
  93. arrowsql-0.3.0/src/params/udt.rs +26 -0
  94. arrowsql-0.3.0/src/pooling.rs +23 -0
  95. arrowsql-0.3.0/src/read.rs +433 -0
  96. arrowsql-0.3.0/src/rowfactory.rs +368 -0
  97. arrowsql-0.3.0/src/runtime.rs +117 -0
  98. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/statement/batch_rpc.rs +1 -8
  99. arrowsql-0.3.0/src/statement/mod.rs +113 -0
  100. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/statement/odbc.rs +24 -5
  101. arrowsql-0.3.0/src/utf8_wrap.rs +41 -0
  102. arrowsql-0.1.0/python/arrowsql/arrow_parallel.py → arrowsql-0.3.0/tests/common_issues/arrow_parallel_reference.py +78 -6
  103. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/conftest.py +8 -1
  104. arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/MAPPING.md +87 -0
  105. arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/test_bulk_timeout_udt.py +67 -0
  106. arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/test_bulk_types_and_errors.py +233 -0
  107. arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/test_session_and_rpc.py +402 -0
  108. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_connection_strings.py +3 -1
  109. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_dead_connection.py +7 -2
  110. arrowsql-0.3.0/tests/common_issues/test_lob_arena_reservation.py +28 -0
  111. arrowsql-0.3.0/tests/common_issues/test_review_python_security.py +92 -0
  112. arrowsql-0.3.0/tests/common_issues/test_review_security_parser.py +27 -0
  113. arrowsql-0.3.0/tests/common_issues/test_review_security_scripts.py +94 -0
  114. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_row_access.py +29 -0
  115. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_aio.py +10 -1
  116. arrowsql-0.3.0/tests/common_issues/test_rs_aio_review.py +394 -0
  117. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_auth_keywords.py +74 -2
  118. arrowsql-0.3.0/tests/common_issues/test_rs_bulk_parallel_native.py +272 -0
  119. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_parallel_rows.py +9 -0
  120. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_core_regressions.py +2 -2
  121. arrowsql-0.3.0/tests/common_issues/test_rs_r5_aio_session.py +188 -0
  122. arrowsql-0.3.0/tests/common_issues/test_rs_read_arrow_parity.py +202 -0
  123. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_read_arrow_partitions.py +9 -23
  124. arrowsql-0.3.0/tests/common_issues/test_rs_review_rust.py +158 -0
  125. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_utf8_strings.py +5 -5
  126. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_timeouts_cancel.py +24 -0
  127. arrowsql-0.3.0/tests/mock/conftest.py +234 -0
  128. arrowsql-0.3.0/tests/mock/mockutil.py +6 -0
  129. arrowsql-0.3.0/tests/mock/test_aio_null_discovery.py +47 -0
  130. arrowsql-0.3.0/tests/mock/test_faults.py +285 -0
  131. arrowsql-0.3.0/tests/mock/test_login_tls.py +208 -0
  132. arrowsql-0.3.0/tests/mock/test_results.py +157 -0
  133. arrowsql-0.3.0/tests/port/test_dns_cache.py +250 -0
  134. arrowsql-0.3.0/tests/port/test_mirroring_partner.py +117 -0
  135. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/port/test_runtime_fork.py +38 -0
  136. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/VENDOR.md +41 -4
  137. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/client_context.rs +6 -0
  138. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/connect_stage.rs +3 -0
  139. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/dns_cache.rs +173 -5
  140. arrowsql-0.3.0/vendor/mssql-tds/src/connection/dns_ttl_cache.rs +484 -0
  141. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/execution_context.rs +7 -4
  142. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/tds_client.rs +20 -0
  143. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/network_transport.rs +58 -3
  144. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/parallel_connect.rs +56 -5
  145. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection.rs +37 -0
  146. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection_provider/tds_connection_provider.rs +21 -7
  147. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/ssrp.rs +6 -1
  148. arrowsql-0.1.0/CHANGELOG.md +0 -83
  149. arrowsql-0.1.0/python/arrowsql/_utf8_strings.py +0 -78
  150. arrowsql-0.1.0/python/arrowsql/exceptions.py +0 -378
  151. arrowsql-0.1.0/src/arrow/export.rs +0 -685
  152. arrowsql-0.1.0/src/rowfactory.rs +0 -70
  153. arrowsql-0.1.0/src/statement/mod.rs +0 -218
  154. {arrowsql-0.1.0 → arrowsql-0.3.0}/.cargo/config.toml +0 -0
  155. {arrowsql-0.1.0 → arrowsql-0.3.0}/.gitattributes +0 -0
  156. {arrowsql-0.1.0 → arrowsql-0.3.0}/.gitignore +0 -0
  157. {arrowsql-0.1.0 → arrowsql-0.3.0}/LICENSE +0 -0
  158. {arrowsql-0.1.0 → arrowsql-0.3.0}/LICENSE.upstream-mssql-python +0 -0
  159. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/arrow/plan.rs +0 -0
  160. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/consts.rs +0 -0
  161. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/decode/hidden.rs +0 -0
  162. {arrowsql-0.1.0/src/agent → arrowsql-0.3.0/crates/arrowsql-core/src}/fmt.rs +0 -0
  163. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/null_types.rs +0 -0
  164. {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/placeholders.rs +0 -0
  165. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ARROW_ODBC_RESEARCH.md +0 -0
  166. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ARROW_PLAN.md +0 -0
  167. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ASYNC.md +0 -0
  168. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/BENCHMARK_SUMMARY.md +0 -0
  169. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/EXPORT_RESEARCH.md +0 -0
  170. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/FEATURES.md +0 -0
  171. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/FREE_THREADED.md +0 -0
  172. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PERFORMANCE_RESEARCH.md +0 -0
  173. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/TEST_SCOPE.md +0 -0
  174. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/UPSTREAM_BUGS_FOUND.md +0 -0
  175. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/UPSTREAM_ISSUES.md +0 -0
  176. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/icon.svg +0 -0
  177. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo-dark-static.svg +0 -0
  178. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo-dark.svg +0 -0
  179. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo-static.svg +0 -0
  180. {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo.svg +0 -0
  181. {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/README.md +0 -0
  182. {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/_demo.py +0 -0
  183. {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/agent_mode.py +0 -0
  184. {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/arrow_duckdb.py +0 -0
  185. {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/odbc2deltalake_sync.py +0 -0
  186. {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/write_arrow.py +0 -0
  187. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/__init__.py +0 -0
  188. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/_server_sqlstate.py +0 -0
  189. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/agent.py +0 -0
  190. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/__init__.py +0 -0
  191. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/_connection_context.py +0 -0
  192. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/_native.py +0 -0
  193. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_connection.py +0 -0
  194. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_cursor.py +0 -0
  195. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_execute.py +0 -0
  196. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_fetch.py +0 -0
  197. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/exception_translator.py +0 -0
  198. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/connection_string_builder.py +0 -0
  199. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/db_connection.py +0 -0
  200. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/decimal_config.py +0 -0
  201. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/mssql_python.pyi +0 -0
  202. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/odbc_provider.py +0 -0
  203. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/perf_timer.py +0 -0
  204. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/pooling.py +0 -0
  205. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/py.typed +0 -0
  206. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/type.py +0 -0
  207. {arrowsql-0.1.0 → arrowsql-0.3.0}/python/mssql_python/__init__.py +0 -0
  208. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/bench_reproduce.sh +0 -0
  209. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/build.sh +0 -0
  210. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/ci/install-sqlserver-windows.ps1 +0 -0
  211. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/codex_review.sh +0 -0
  212. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/env.sh +0 -0
  213. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/load_taxi.py +0 -0
  214. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/overlay_upstream_binding.sh +0 -0
  215. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/release_rustflags.sh +0 -0
  216. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/setup_tls_cert.sh +0 -0
  217. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/test_overlay.sh +0 -0
  218. {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/wheel_size.sh +0 -0
  219. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/agent/render.rs +0 -0
  220. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/agent/sqltype.rs +0 -0
  221. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/mod.rs +0 -0
  222. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/arrow_wire.rs +0 -0
  223. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/catalog.rs +0 -0
  224. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/binary.rs +0 -0
  225. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/numeric.rs +0 -0
  226. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/text.rs +0 -0
  227. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/params/pyformat.rs +0 -0
  228. {arrowsql-0.1.0 → arrowsql-0.3.0}/src/types.rs +0 -0
  229. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_ctds.txt +0 -0
  230. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_dotnet_sqlclient.txt +0 -0
  231. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_go_mssqldb.txt +0 -0
  232. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_sqlalchemy.txt +0 -0
  233. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/README.md +0 -0
  234. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_ctds_cursor_fetch.py +0 -0
  235. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_ctds_executemany.py +0 -0
  236. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_ctds_transactions.py +0 -0
  237. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_fastmssql_async_threads.py +0 -0
  238. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_fastmssql_errors_values.py +0 -0
  239. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_fastmssql_lifecycle_pool.py +0 -0
  240. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_go_mssqldb_bulkcopy.py +0 -0
  241. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_go_mssqldb_xact_guid.py +0 -0
  242. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_jdbc_bigint_guid.py +0 -0
  243. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_jdbc_temporal_params.py +0 -0
  244. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_rs_arrow_bulkcopy.py +0 -0
  245. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_rs_bulkcopy.py +0 -0
  246. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pymssql_bulkcopy_paths.py +0 -0
  247. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pymssql_qmark_substitution.py +0 -0
  248. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pymssql_types_procs.py +0 -0
  249. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pyodbc_connection.py +0 -0
  250. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pyodbc_cursor_results.py +0 -0
  251. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pyodbc_types.py +0 -0
  252. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_rust_mssql_driver_bulkcopy.py +0 -0
  253. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_rust_mssql_driver_param_echo.py +0 -0
  254. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_catalog.py +0 -0
  255. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_identity_sequence.py +0 -0
  256. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_query.py +0 -0
  257. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_types.py +0 -0
  258. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlclient_bulkcopy.py +0 -0
  259. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlclient_scalar_commands.py +0 -0
  260. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tedious_protocol.py +0 -0
  261. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tedious_statements.py +0 -0
  262. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_bulk.py +0 -0
  263. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_login_password.py +0 -0
  264. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_query_types.py +0 -0
  265. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_results_transactions.py +0 -0
  266. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/rs_dtypes.py +0 -0
  267. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_binary_guid.py +0 -0
  268. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_decimal_numeric.py +0 -0
  269. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_executemany.py +0 -0
  270. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_g1_pyformat_scanner.py +0 -0
  271. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_integers_bool_float.py +0 -0
  272. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_issue_581_sqlstate.py +0 -0
  273. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_large_values.py +0 -0
  274. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_messages_errors.py +0 -0
  275. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_multiple_results.py +0 -0
  276. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_nulls_typing.py +0 -0
  277. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_agent_mode.py +0 -0
  278. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_aio_pool_semantics.py +0 -0
  279. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_aio.py +0 -0
  280. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_exotic.py +0 -0
  281. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_paths.py +0 -0
  282. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_special.py +0 -0
  283. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arith_errors.py +0 -0
  284. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arrow_native.py +0 -0
  285. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arrow_stream_close.py +0 -0
  286. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arrow_type_mapping.py +0 -0
  287. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_batch_parsing.py +0 -0
  288. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bigint_overflow_agg.py +0 -0
  289. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_decimal_width.py +0 -0
  290. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_native.py +0 -0
  291. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_native_rows.py +0 -0
  292. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_parallel.py +0 -0
  293. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_rows_pipeline.py +0 -0
  294. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_serializer_chunks.py +0 -0
  295. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_cancel.py +0 -0
  296. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_char_padding.py +0 -0
  297. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_client_cpu_paths.py +0 -0
  298. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_collation_case.py +0 -0
  299. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_cte_recursion.py +0 -0
  300. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_database_context.py +0 -0
  301. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_date_strings_dateformat.py +0 -0
  302. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_datetimeoffset_deep.py +0 -0
  303. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_decimal_param_inference.py +0 -0
  304. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_decode_fastpaths.py +0 -0
  305. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_defaults_computed.py +0 -0
  306. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_description_types.py +0 -0
  307. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_duckdb_integration.py +0 -0
  308. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_error_mid_resultset.py +0 -0
  309. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_executemany_types.py +0 -0
  310. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_fetch_sizes_arraysize.py +0 -0
  311. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_float_real_edges.py +0 -0
  312. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_for_json.py +0 -0
  313. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_g3_decode_encode.py +0 -0
  314. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_hidden_columns.py +0 -0
  315. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_hierarchyid.py +0 -0
  316. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_identifiers_quoting.py +0 -0
  317. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_identity_triggers.py +0 -0
  318. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_isolation_levels.py +0 -0
  319. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_leaks_lifecycle.py +0 -0
  320. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_legacy_datetime_rounding.py +0 -0
  321. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_legacy_lob_types.py +0 -0
  322. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_locking_blocking.py +0 -0
  323. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_merge_output.py +0 -0
  324. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_message_flood.py +0 -0
  325. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_metadata_reuse.py +0 -0
  326. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_money_arithmetic.py +0 -0
  327. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_null_semantics.py +0 -0
  328. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_output_clause.py +0 -0
  329. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_pandas_polars_io.py +0 -0
  330. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_binding_fastpaths.py +0 -0
  331. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_fast_cells.py +0 -0
  332. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_type_plancache.py +0 -0
  333. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_wire_paths.py +0 -0
  334. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_pyformat_named.py +0 -0
  335. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_read_arrow_stream.py +0 -0
  336. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_rowversion_concurrency.py +0 -0
  337. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_savepoints_nested.py +0 -0
  338. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_session_set_options.py +0 -0
  339. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_setinputsizes.py +0 -0
  340. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_sparse_columnsets.py +0 -0
  341. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_spatial_deep.py +0 -0
  342. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_sql_variant_deep.py +0 -0
  343. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_string_truncation.py +0 -0
  344. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_temporal_tables.py +0 -0
  345. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_time7_precision.py +0 -0
  346. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_time_scales.py +0 -0
  347. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_triggers_rowcount.py +0 -0
  348. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_tvp_support.py +0 -0
  349. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_uniqueidentifier_order.py +0 -0
  350. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_utf8_collations.py +0 -0
  351. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_varchar_codepages.py +0 -0
  352. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_xml_deep.py +0 -0
  353. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_scope_identity_temp.py +0 -0
  354. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_special_types.py +0 -0
  355. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_stored_procs.py +0 -0
  356. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_temporal.py +0 -0
  357. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_threading_gil.py +0 -0
  358. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_transactions.py +0 -0
  359. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_unicode.py +0 -0
  360. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_wide_and_many.py +0 -0
  361. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/port/test_free_threaded.py +0 -0
  362. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/port/test_tls.py +0 -0
  363. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/upstream_excluded.txt +0 -0
  364. {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/upstream_passing_baseline.txt +0 -0
  365. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/.env +0 -0
  366. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/Cargo.toml +0 -0
  367. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/LICENSE +0 -0
  368. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/README.md +0 -0
  369. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cli.rs +0 -0
  370. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/blocking.rs +0 -0
  371. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/bulk_copy.rs +0 -0
  372. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/bulk_copy_state.rs +0 -0
  373. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/connection_actions.rs +0 -0
  374. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/cursor_ops.rs +0 -0
  375. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/datasource_parser.rs +0 -0
  376. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/instance_cache.rs +0 -0
  377. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/metadata_retriever.rs +0 -0
  378. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/multi_subnet_failover.rs +0 -0
  379. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/session_recovery.rs +0 -0
  380. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/any_transport.rs +0 -0
  381. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/buffers.rs +0 -0
  382. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/busy_poll.rs +0 -0
  383. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/certificate_validator.rs +0 -0
  384. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/extractable_stream.rs +0 -0
  385. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/localdb.rs +0 -0
  386. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/named_pipes.rs +0 -0
  387. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/ssl_handler.rs +0 -0
  388. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tds_transport.rs +0 -0
  389. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tls/native_tls_engine.rs +0 -0
  390. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tls/rustls_engine.rs +0 -0
  391. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tls.rs +0 -0
  392. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/alpn.rs +0 -0
  393. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/bindings.rs +0 -0
  394. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/cred.rs +0 -0
  395. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/engine.rs +0 -0
  396. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/errors.rs +0 -0
  397. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/handshake.rs +0 -0
  398. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/mod.rs +0 -0
  399. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/record_layer.rs +0 -0
  400. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/sspi.rs +0 -0
  401. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/stream.rs +0 -0
  402. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/validate.rs +0 -0
  403. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport.rs +0 -0
  404. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection_provider.rs +0 -0
  405. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/core.rs +0 -0
  406. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cursor/cursor_response.rs +0 -0
  407. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cursor/cursor_types.rs +0 -0
  408. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cursor/mod.rs +0 -0
  409. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/bulk_copy_metadata.rs +0 -0
  410. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/bulk_copy_metadata_tests.rs +0 -0
  411. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/column_values.rs +0 -0
  412. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/decoder.rs +0 -0
  413. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/encoder.rs +0 -0
  414. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/lcid_encoding.rs +0 -0
  415. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/row_writer.rs +0 -0
  416. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_json.rs +0 -0
  417. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_string/encoding.rs +0 -0
  418. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_string.rs +0 -0
  419. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_tvp.rs +0 -0
  420. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_udt.rs +0 -0
  421. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_vector.rs +0 -0
  422. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sqldatatypes.rs +0 -0
  423. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sqltypes.rs +0 -0
  424. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sync_decoder.rs +0 -0
  425. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/tds_value_serializer.rs +0 -0
  426. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes.rs +0 -0
  427. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/error/bulk_copy_errors.rs +0 -0
  428. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/error/mod.rs +0 -0
  429. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/fuzz_support.rs +0 -0
  430. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/handler/handler_factory.rs +0 -0
  431. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/handler/sspi_handler.rs +0 -0
  432. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/handler.rs +0 -0
  433. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/packet_reader.rs +0 -0
  434. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/packet_writer.rs +0 -0
  435. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/reader_writer.rs +0 -0
  436. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/token_stream.rs +0 -0
  437. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io.rs +0 -0
  438. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/lib.rs +0 -0
  439. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/attention.rs +0 -0
  440. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/batch.rs +0 -0
  441. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/bulk_load.rs +0 -0
  442. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/bulk_load_tests.rs +0 -0
  443. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/always_encrypted.rs +0 -0
  444. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/data_classification.rs +0 -0
  445. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/dns_caching.rs +0 -0
  446. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/enhanced_routing.rs +0 -0
  447. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/fedauth.rs +0 -0
  448. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/jsonfeature.rs +0 -0
  449. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/session_recovery.rs +0 -0
  450. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/useragent.rs +0 -0
  451. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/utf8.rs +0 -0
  452. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/vectorfeature.rs +0 -0
  453. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features.rs +0 -0
  454. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/headers.rs +0 -0
  455. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/login.rs +0 -0
  456. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/login_options.rs +0 -0
  457. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/messages.rs +0 -0
  458. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/parameters/rpc_parameters.rs +0 -0
  459. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/parameters.rs +0 -0
  460. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/prelogin.rs +0 -0
  461. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/rpc.rs +0 -0
  462. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/transaction_management.rs +0 -0
  463. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message.rs +0 -0
  464. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/query/metadata.rs +0 -0
  465. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/query/result.rs +0 -0
  466. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/query.rs +0 -0
  467. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/cell_decryptor.rs +0 -0
  468. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/apple.rs +0 -0
  469. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/cng.rs +0 -0
  470. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/der.rs +0 -0
  471. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/mod.rs +0 -0
  472. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/openssl.rs +0 -0
  473. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/unsupported.rs +0 -0
  474. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/describe_parameter_encryption.rs +0 -0
  475. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/encryption/aead_aes_256_cbc_hmac_sha256.rs +0 -0
  476. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/encryption/cell.rs +0 -0
  477. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/encryption/mod.rs +0 -0
  478. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/error.rs +0 -0
  479. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/keystore/certificate.rs +0 -0
  480. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/keystore/mod.rs +0 -0
  481. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/mock.rs +0 -0
  482. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/mod.rs +0 -0
  483. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/query_metadata_cache.rs +0 -0
  484. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/security_context.rs +0 -0
  485. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/spn.rs +0 -0
  486. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/unix/gssapi_context.rs +0 -0
  487. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/unix/gssapi_ffi.rs +0 -0
  488. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/unix/mod.rs +0 -0
  489. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/windows/mod.rs +0 -0
  490. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/windows/sspi_context.rs +0 -0
  491. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/windows/sspi_ffi.rs +0 -0
  492. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/sql_identifier.rs +0 -0
  493. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/test_client_support.rs +0 -0
  494. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/test_packet_support.rs +0 -0
  495. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/data_classification.rs +0 -0
  496. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/fed_auth_info.rs +0 -0
  497. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/login_ack.rs +0 -0
  498. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/col_info_parser.rs +0 -0
  499. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/colmetadata_parser.rs +0 -0
  500. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/common.rs +0 -0
  501. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/data_classification_parser.rs +0 -0
  502. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/done_parser.rs +0 -0
  503. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/envchange_parser.rs +0 -0
  504. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/error_parser.rs +0 -0
  505. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/featureext_parser.rs +0 -0
  506. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/fedauth_parser.rs +0 -0
  507. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/info_parser.rs +0 -0
  508. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/loginack_parser.rs +0 -0
  509. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/mod.rs +0 -0
  510. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/nbcrow_parser.rs +0 -0
  511. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/order_parser.rs +0 -0
  512. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/returnstatus_parser.rs +0 -0
  513. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/returnvalue_parser.rs +0 -0
  514. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/row_parser.rs +0 -0
  515. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/session_state_parser.rs +0 -0
  516. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/sspi_parser.rs +0 -0
  517. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/tab_name_parser.rs +0 -0
  518. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/tokenitems.rs +0 -0
  519. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/tokens.rs +0 -0
  520. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token.rs +0 -0
  521. {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/trace_context.rs +0 -0
@@ -0,0 +1,27 @@
1
+ # Rules for agents working in this repository
2
+
3
+ 1. **Version trio.** Three different numbers: `pyproject.toml` `version` and `Cargo.toml`
4
+ `version` are the distribution release and must be bumped together (plus a CHANGELOG
5
+ entry). `arrowsql.__version__` (`python/arrowsql/__init__.py`) deliberately reports the
6
+ upstream `mssql-python` release the Python layer is vendored from (currently 1.16.0);
7
+ do not bump it for a release of this project. `ddbc_bindings.__version__` is the Rust
8
+ binding contract version (`docs/CONTRACT.md`).
9
+ 2. **Vendor patches.** Every change to vendored Python (upstream-derived files) is marked
10
+ `RUST-PORT` in the code and listed in `docs/PYTHON_LAYER_CHANGES.md`. Every change to
11
+ `vendor/mssql-tds` gets an entry in `vendor/mssql-tds/VENDOR.md`.
12
+ 3. **Upstream baseline gate.** `tests/upstream_passing_baseline.txt` lists upstream tests
13
+ that must keep passing. Run `scripts/check_upstream_baseline.py` (or the baseline
14
+ snippet from the PR template) before pushing; 0 baseline tests may be missing and
15
+ teardown ERRORs count as failures. Never edit the baseline or `upstream_excluded.txt`
16
+ to hide a regression.
17
+ 4. **Stay in Rust.** Put new behaviour in the Rust core (`src/`) and keep the Python layer
18
+ thin. Python is for the DB-API surface, argument validation and glue.
19
+ 5. **Tests.** Each fix gets a regression test in `tests/common_issues` (or `tests/port`,
20
+ `tests/mock`). Run tests with `python scripts/run_tests.py <id> <paths>`, which uses a
21
+ private database per id. Full suites run in CI.
22
+ 6. **Secrets.** Never print, cat or commit `.env.local` or the SA password; connection
23
+ strings in logs and error messages must not contain values. Check
24
+ `git log -p origin/main..HEAD` for the password before every push.
25
+ 7. **Git.** Never push to `main`; work on a branch and open a PR. Do not restart
26
+ containers or touch other sessions' processes. Use `nice -n 19` for builds and tests
27
+ while benchmarks run.
@@ -0,0 +1,184 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project. Format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
5
+ [SemVer](https://semver.org/) once 1.0 is reached (0.x may break).
6
+
7
+ Version numbers in this project are deliberately three different things:
8
+
9
+ | what | value | meaning |
10
+ |---|---|---|
11
+ | distribution `arrowsql` | 0.3.0 | this project's release number (`pyproject.toml`) |
12
+ | `arrowsql.__version__` | 1.16.0 | the upstream `mssql-python` release the Python layer is vendored from; kept so code that checks the upstream version keeps working |
13
+ | `arrowsql.ddbc_bindings.__version__` | 1.0.0 | version of the Rust binding contract (`docs/CONTRACT.md`) |
14
+
15
+ ## [Unreleased]
16
+
17
+ ## [0.3.0] - 2026-11-07
18
+
19
+ ### Added
20
+
21
+ - `crates/arrowsql-core`: the driver core as a Rust crate without pyo3
22
+ (connect, execute, fetch, Arrow decoding, pooling), with a public API for
23
+ other Rust crates: `Connection::connect` / `execute`, `Statement::next_batch`
24
+ / `into_reader`, and `read_arrow_stream(options, query, Partitioning,
25
+ ReadOptions)`, a cancellable, `Send` Arrow `RecordBatchReader` over a
26
+ partitioned parallel read. The Python extension is a pyo3 layer over it; no
27
+ behaviour change for Python.
28
+ - `arrowsql-core`: the partitions of a read as separate readers or Arrow C
29
+ streams. `plan_partitions` returns the planned `Slice`s, each opens on its
30
+ own connection (`Slice::open`, `Slice::open_ffi_stream`), so Spark tasks or
31
+ pyarrow in another shared library read them zero-copy;
32
+ `ParallelReader::into_ffi_stream` / `StatementReader::into_ffi_stream`
33
+ export the merged and single-statement readers the same way.
34
+ - `crates/arrowsql-rowcount`: a pure-Rust example and integration test of the
35
+ core API (single, merged parallel and per-partition Arrow C stream reads).
36
+ - Process-wide DNS cache for connects (`DnsCacheTTL=<seconds>` keyword, env
37
+ `ARROWSQL_DNS_CACHE_TTL`, default 300 s, 0 disables). A host that resolved
38
+ once is not resolved again for every connection (Spark tasks, parallel read
39
+ slices, pool members, reconnects), like the JDBC driver's long-lived cache.
40
+ An expired entry is served at once while one background thread refreshes it
41
+ (up to an hour past its TTL), so a slow or failing resolver ("Temporary
42
+ failure in name resolution") no longer costs each connection seconds or a
43
+ failed connect. Concurrent lookups of one host share a single resolver call;
44
+ each resolver call is bounded (`ARROWSQL_DNS_RESOLVE_TIMEOUT`, default 10 s)
45
+ and a temporary failure is retried once. Failures are never cached; if no
46
+ cached address accepts, the entry is dropped and the host is resolved once
47
+ more. IP literals and connection diagnostics bypass the cache.
48
+ `ddbc_bindings.dns_cache_stats()` reports its counters. Vendored mssql-tds
49
+ patch 15.
50
+
51
+ ### Changed
52
+
53
+ - `read_arrow` / `read_arrow_stream`: slice planning, the MIN/MAX and catalog
54
+ probes, the worker threads and the merge run in Rust (`arrowsql-core`);
55
+ `arrow_parallel.py` only checks arguments. Same plans, rows and exception
56
+ classes as before (parity tests against the previous implementation in
57
+ `tests/common_issues/test_rs_read_arrow_parity.py`); invalid
58
+ `partition_bounds` now fail before the first connection is opened. The
59
+ UTF-8 transfer rewrite (`utf8_strings`) moved to Rust as well.
60
+ - Rust dependents of `arrowsql-core`: the core declares no global allocator
61
+ (mimalloc is the `ddbc_bindings` default feature `mimalloc`), and both
62
+ crates depend on `vendor/mssql-tds` by path instead of a `[patch]`, so a git
63
+ dependency on the core builds the patched TDS crate without a patch section
64
+ of its own. Workspace-wide `cargo test` / `clippy` take `--exclude mssql-tds`.
65
+
66
+ ### Fixed
67
+
68
+ - `write_arrow(..., workers > 1)` accepts an iterable of record batches (list, generator, objects
69
+ with `__arrow_c_array__`) like `workers=1`, without pyarrow (r5 F9).
70
+ - `write_arrow(..., workers > 1)` reads a native `cursor.arrow_stream()` on demand instead of
71
+ draining it into memory before the workers start; the drain remains for single-connection
72
+ `bulkcopy_arrow`, where it avoids a deadlock (r5 F15).
73
+ - Async `executemany` with a leading NULL decimal no longer declares the whole
74
+ batch `decimal(18,10)` (later values lost digits).
75
+ - Async manual-commit `BEGIN` obeys cancellation.
76
+ - After a server-side rollback under XACT_ABORT, writes stay rejected (25000)
77
+ until `commit()`/`rollback()`: the guard sees through comments, CTEs and
78
+ `BEGIN TRY` blocks, is no longer consumed by the first rejection and also
79
+ covers the async API.
80
+
81
+ ## [0.2.0] - 2026-11-01
82
+
83
+ ### Added
84
+
85
+ - `write_arrow()` no longer needs pyarrow: any Arrow PyCapsule source (`__arrow_c_stream__` /
86
+ `__arrow_c_array__`: polars, DuckDB, nanoarrow, pyarrow) is loaded by the parallel bulk copy
87
+ in Rust (`DDBCBulkCopyArrowParallel`).
88
+ - DB-API exceptions are raised from Rust: the SQLSTATE-to-class table, the 1222 / 2628 / 8114
89
+ promotions and the `driver_error` / `ddbc_error` / `sqlstate` / `native_error` attributes are
90
+ built natively (`DDBCRaiseFor`). The native `Connection` and `getinfo` raise typed exceptions.
91
+ - `Row` is backed by a Rust core (`RowCore`): indexing, attribute access, copy and pickle run
92
+ natively.
93
+
94
+ ### Changed
95
+
96
+ - Faster LOB row fetch: large pure-ASCII values are narrowed when they are pushed, and the row
97
+ arena is sized once (fetchmany over LOB columns about 2.5x faster).
98
+
99
+ ### Fixed
100
+
101
+ - Arrow reads decoded OEM 437/850 `varchar` lossily; every fetch path now decodes it the same.
102
+ - A forked child closing an inherited connection no longer shuts down the parent's session.
103
+ - `round_to_scale` / money rounding: exponent text is rounded, ties round half away from zero on
104
+ every path, independent of the ambient decimal context.
105
+ - Row bulk copy without column mappings rejects extra source columns instead of dropping them;
106
+ ragged `executemany` rows raise a DB-API error instead of a panic.
107
+ - Closing a partly read result no longer blocks on a locked row.
108
+ - asyncio: `fetch_arrow` raises the drained error, cancellation and pool races, drain budget and
109
+ stale cursor state after errors.
110
+ - Request timeout accounting and cancel-handle publish order in the vendored `mssql-tds`.
111
+ - Security and CI hardening: release publishing only from `main`, actions pinned to SHAs.
112
+
113
+ ## [0.1.0] - 2026-11-01
114
+
115
+ ### Added
116
+
117
+ - UTF-8 transfer for Arrow reads: `read_arrow(..., utf8_strings=True)` and the new
118
+ `cursor.execute_arrow(sql, params=None, *, utf8_strings=True, batch_size=...)` describe the
119
+ result and cast nvarchar/nchar/ntext columns to a UTF-8 collated varchar on the server (query
120
+ wrapping is built in Rust: `ddbc_bindings.utf8_wrap_query`). About half the string bytes on
121
+ the wire; same Arrow result. Needs SQL Server 2019+/Azure SQL; falls back to the original
122
+ query on ORDER BY, parameters, duplicate/empty column names, describe failures, a small
123
+ string share of the row, or when the first 256 rows are not at least 10% smaller in UTF-8 (CJK
124
+ grows). `utf8_strings=False` opts out.
125
+ - Bulk copy writes each DECIMAL cell at the shortest legal magnitude width (4/8/12/16 bytes)
126
+ instead of the width implied by the column precision. SQL Server accepts this; 1M rows of nine
127
+ `decimal(38,2)` columns with small values upload 55 MB instead of 163 MB. `ARROWSQL_DECIMAL_FIXED=1`
128
+ restores precision-width cells.
129
+ - The project is called **arrowsql** (distribution and import name `arrowsql`,
130
+ repository github.com/bmsuisse/arrowsql). A `mssql_python` alias package keeps
131
+ `import mssql_python` working: its modules are the `arrowsql` modules.
132
+ - PyO3 extension `arrowsql.ddbc_bindings` over Microsoft's `mssql-tds`
133
+ (vendored, with local patches, in `vendor/mssql-tds`): no ODBC driver, same
134
+ Python API as upstream mssql-python 1.16.0.
135
+ - Native Arrow: `cursor.arrow()`, `arrow_batch()`, `arrow_reader()`,
136
+ `fetchall_arrow()`, `fetchmany_arrow()`, `arrow_stream()`, `read_arrow()`
137
+ (partitioned parallel reads).
138
+ - Agent mode (`arrowsql.agent`, `python -m arrowsql.agent`, console script
139
+ `arrowsql-agent`), ported from arrowbricks: `query()` / `query_cursor()` return
140
+ a compact typed TSV (or Markdown) preview with a strict byte ceiling, row and
141
+ cell limits, an optional head/tail sample, a footer that never claims an
142
+ unknown total, `-- rows_affected` / `-- message` lines and every result set;
143
+ failures are JSON with a category, the server's own message and a recovery
144
+ hint (SQL Server error number, then SQLSTATE). Rendering is Rust
145
+ (`ddbc_bindings.AgentRender`) over the Arrow sink; `sql_variant` is now
146
+ readable through it.
147
+ - `read_arrow_stream()`: partitioned parallel read as a bounded, unordered Arrow
148
+ stream (`__arrow_c_stream__`; native `ArrowMergeStream` fed by one connection
149
+ per worker) so DuckDB / deltalake overlap with the read and memory stays
150
+ bounded. `close()` or an early-stopping consumer cancels the statements and
151
+ closes the worker connections; the first worker error reaches the consumer.
152
+ `read_arrow()` is now built on it. `partition_bounds=` (and
153
+ `partition_nullable=`) take typed boundaries (int, date/datetime, Decimal,
154
+ str) as disjoint half-open slices plus a NULL slice, bound as parameters,
155
+ with no MIN/MAX or size probe.
156
+ - Native bulk copy (rows and Arrow), `write_arrow()` parallel loads.
157
+ - Native asyncio (`arrowsql.aio`) with a built-in pool (Unix only).
158
+ - `sqlstate` and `native_error` on every exception
159
+ ([upstream #581](https://github.com/microsoft/mssql-python/issues/581));
160
+ bulk copy on the cursor's own connection, so `#temp` tables work
161
+ ([#492](https://github.com/microsoft/mssql-python/issues/492)).
162
+ - Type stubs for the port-specific API (`ddbc_bindings.pyi`, RUST-PORT section of
163
+ `mssql_python.pyi`).
164
+ - CI (`.github/workflows/ci.yml`) and a wheel/sdist build workflow
165
+ (`wheels.yml`, artifacts only, no publishing).
166
+ - Project metadata: SPDX license, classifiers, URLs; CONTRIBUTING.
167
+
168
+ ### Changed
169
+
170
+ - `-z pack-relative-relocs` moved out of `.cargo/config.toml` into the local
171
+ release scripts, so CI manylinux_2_28 wheels do not require glibc 2.36.
172
+ - The `async-preview` extra pins `mssql-python-rs==0.4.0` (was 0.3.0).
173
+ - The sdist now carries `vendor/mssql-tds`.
174
+
175
+ ### Known gaps
176
+
177
+ - Pool checkout does not probe an idle connection with a timeout (upstream
178
+ GH #854), and `set_attr(SQL_ATTR_CONNECTION_TIMEOUT)` is not carried across
179
+ pool reuse. See `tests/upstream_excluded.txt`.
180
+ - Always Encrypted and NTLM are not supported.
181
+ - Linux x86_64 is the platform exercised daily against a database. CI also builds and runs
182
+ the DB-free tests on macOS, Windows (x64, arm64) and Linux arm64, and runs the DB suite
183
+ against SQL Server Express on `windows-latest` (the `windows-db` job; Windows is not a
184
+ required gate).
@@ -20,7 +20,8 @@ anyone else can just set `DB_CONNECTION_STRING`.
20
20
  ```bash
21
21
  python -m pytest -q --timeout 120 tests/common_issues tests/port
22
22
  python scripts/check_upstream_baseline.py # vendored upstream suite vs tests/upstream_passing_baseline.txt
23
- cargo test --lib
23
+ cargo test --workspace --exclude mssql-tds --lib
24
+ cargo test -p arrowsql-core --test live && cargo test -p arrowsql-rowcount # Rust API, needs DB_CONNECTION_STRING
24
25
  ```
25
26
 
26
27
  Scope and rules for the three suites: [docs/TEST_SCOPE.md](docs/TEST_SCOPE.md). A new
@@ -29,7 +30,7 @@ add it to `tests/upstream_excluded.txt` with a one-line reason.
29
30
 
30
31
  ## Code
31
32
 
32
- - `cargo clippy --all-targets` should not add warnings; run `cargo fmt` on files you touch.
33
+ - `cargo clippy --workspace --exclude mssql-tds --all-targets` should not add warnings; run `cargo fmt` on files you touch.
33
34
  - Edits to the vendored Python layer (`python/arrowsql`) and to `vendor/mssql-tds`
34
35
  are marked `RUST-PORT` and listed in `docs/PYTHON_LAYER_CHANGES.md` /
35
36
  `vendor/mssql-tds/VENDOR.md`. Keep upstream's lines unchanged where you can.
@@ -78,6 +78,30 @@ dependencies = [
78
78
  "bitflags",
79
79
  ]
80
80
 
81
+ [[package]]
82
+ name = "arrowsql-core"
83
+ version = "0.3.0"
84
+ dependencies = [
85
+ "arrow-array",
86
+ "arrow-buffer",
87
+ "arrow-schema",
88
+ "async-trait",
89
+ "encoding_rs",
90
+ "log",
91
+ "mssql-tds",
92
+ "parking_lot",
93
+ "tokio",
94
+ "uuid",
95
+ ]
96
+
97
+ [[package]]
98
+ name = "arrowsql-rowcount"
99
+ version = "0.3.0"
100
+ dependencies = [
101
+ "arrow-array",
102
+ "arrowsql-core",
103
+ ]
104
+
81
105
  [[package]]
82
106
  name = "asn1-rs"
83
107
  version = "0.7.2"
@@ -274,17 +298,20 @@ checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06"
274
298
 
275
299
  [[package]]
276
300
  name = "ddbc_bindings"
277
- version = "0.1.0"
301
+ version = "0.3.0"
278
302
  dependencies = [
279
303
  "arrow-array",
280
304
  "arrow-buffer",
281
305
  "arrow-schema",
306
+ "arrowsql-core",
282
307
  "async-trait",
283
308
  "encoding_rs",
309
+ "log",
284
310
  "mimalloc",
285
311
  "mssql-tds",
286
312
  "parking_lot",
287
313
  "pyo3",
314
+ "pyo3-build-config",
288
315
  "tokio",
289
316
  "uuid",
290
317
  ]
@@ -1,29 +1,45 @@
1
1
  [package]
2
2
  name = "ddbc_bindings"
3
- version = "0.1.0"
3
+ version = "0.3.0"
4
4
  edition = "2024"
5
5
  license = "MIT"
6
6
  description = "Rust (PyO3 + mssql-tds) replacement for mssql-python's ODBC-based ddbc_bindings"
7
7
  publish = false
8
8
  readme = "README.md"
9
9
 
10
+ [workspace]
11
+ members = ["crates/*"]
12
+ # vendor/mssql-tds is a member too (a path dependency under the root), but its
13
+ # tests need dev-dependencies the vendored copy leaves out: workspace-wide
14
+ # cargo test / clippy runs pass `--exclude mssql-tds`.
15
+ resolver = "3"
16
+
10
17
  [lib]
11
18
  name = "ddbc_bindings"
12
19
  crate-type = ["cdylib", "rlib"]
13
20
 
14
21
  [features]
22
+ default = ["mimalloc"]
23
+ # mimalloc as the process allocator of the extension module (the core
24
+ # declares none, so a Rust dependent keeps its own).
25
+ mimalloc = ["dep:mimalloc"]
15
26
  # Legacy TLS: native-tls (OpenSSL) + OpenSSL Always Encrypted crypto instead of rustls.
16
27
  # Adds ~8 MB (libssl, libcrypto, libzstd) to the wheel. Build: maturin build --features native-tls
17
- native-tls = ["mssql-tds/native-tls-backend"]
28
+ native-tls = ["mssql-tds/native-tls-backend", "arrowsql-core/native-tls"]
18
29
 
19
30
  [dependencies]
20
31
  pyo3 = { version = "0.29.0", features = ["extension-module"] }
21
- # Microsoft's native TDS implementation (MIT). Pinned: the API is pre-1.0.
22
- mssql-tds = { git = "https://github.com/microsoft/mssql-rs", rev = "6b6b48ecbbbdad297039d1641e2be4775eed998b", default-features = false, features = ["gssapi", "rustls-tls"] }
32
+ # Connect/execute/fetch, Arrow decoding and the parallel read, without pyo3.
33
+ arrowsql-core = { path = "crates/arrowsql-core" }
34
+ log = "0.4"
35
+ # Microsoft's native TDS implementation (MIT), vendored with local patches
36
+ # (vendor/mssql-tds/VENDOR.md). A path dependency, so crates that depend on
37
+ # arrowsql-core by git get the patched copy without a [patch] of their own.
38
+ mssql-tds = { path = "vendor/mssql-tds", default-features = false, features = ["gssapi", "rustls-tls"] }
23
39
  tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time", "sync", "macros"] }
24
40
  parking_lot = "0.12"
25
41
  uuid = "1"
26
- mimalloc = { version = "0.1", default-features = false }
42
+ mimalloc = { version = "0.1", default-features = false, optional = true }
27
43
  # Arrow arrays + the C Data / C Stream interfaces (src/arrow/). Columns are
28
44
  # built with our own buffers and only wrapped as arrow-rs arrays for export.
29
45
  arrow-array = { version = "60", default-features = false, features = ["ffi"] }
@@ -37,13 +53,16 @@ async-trait = "0.1"
37
53
  # Windows: in-tree Schannel TLS (msodbcsql's stack) instead of rustls, which fails the
38
54
  # handshake with SQL Server's self-generated certificate on Windows.
39
55
  [target.'cfg(windows)'.dependencies]
40
- mssql-tds = { git = "https://github.com/microsoft/mssql-rs", rev = "6b6b48ecbbbdad297039d1641e2be4775eed998b", default-features = false, features = ["gssapi", "rustls-tls", "tls-schannel-direct-on-windows"] }
56
+ mssql-tds = { path = "vendor/mssql-tds", default-features = false, features = ["gssapi", "rustls-tls", "tls-schannel-direct-on-windows"] }
41
57
 
42
58
  # musl cannot load a shared library that uses initial-exec TLS through dlopen
43
59
  # ("initial-exec TLS resolves to dynamic definition"): mimalloc's thread-local
44
60
  # heap pointer has to use the local-dynamic model there.
45
61
  [target.'cfg(target_env = "musl")'.dependencies]
46
- mimalloc = { version = "0.1", default-features = false, features = ["local_dynamic_tls"] }
62
+ mimalloc = { version = "0.1", default-features = false, features = ["local_dynamic_tls"], optional = true }
63
+
64
+ [build-dependencies]
65
+ pyo3-build-config = "0.29.0"
47
66
 
48
67
  [profile.dev]
49
68
  opt-level = 1
@@ -62,11 +81,6 @@ panic = "unwind"
62
81
  # Stripped symbols: smaller .so, no effect on speed (no runtime symbolication needed).
63
82
  strip = true
64
83
 
65
- # Microsoft's mssql-tds at the pinned rev, with one local patch (see
66
- # vendor/mssql-tds/VENDOR.md). Remove when the fix is upstream.
67
- [patch."https://github.com/microsoft/mssql-rs"]
68
- mssql-tds = { path = "vendor/mssql-tds" }
69
-
70
84
  # Hot crates at opt-level 3: the bindings with the inlined mssql-tds, pyo3 and
71
85
  # tokio, plus allocator, text decoding, buffers and record-layer crypto.
72
86
  [profile.release.package.mimalloc]
@@ -91,6 +105,8 @@ opt-level = 3
91
105
  opt-level = 3
92
106
  [profile.release.package.ddbc_bindings]
93
107
  opt-level = 3
108
+ [profile.release.package.arrowsql-core]
109
+ opt-level = 3
94
110
  [profile.release.package.mssql-tds]
95
111
  opt-level = 3
96
112
  [profile.release.package.pyo3]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arrowsql
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Operating System :: POSIX :: Linux
@@ -61,6 +61,8 @@ Project-URL: Upstream, https://github.com/microsoft/mssql-python
61
61
  - **2-7x faster than mssql-python**, up to 10x faster than pyodbc on large reads.
62
62
  - **Arrow out of the box:** results go straight to DuckDB, polars, pyarrow and Delta, no pyarrow required.
63
63
  - **Parallel reads and bulk loads** over several connections.
64
+ - **Rust core crate:** `crates/arrowsql-core` (no pyo3) exposes connect, execute and the parallel Arrow read to other Rust programs.
65
+ - **DNS cache:** resolved hosts are reused and served stale while refreshing (`DnsCacheTTL=<seconds>`, default 300, `0` disables).
64
66
  - **No ODBC driver:** native TDS in Rust, zero required dependencies, wheels for Linux, macOS and Windows.
65
67
  - **Drop-in:** same DB-API, same connection strings; `import mssql_python` keeps working.
66
68
 
@@ -20,6 +20,8 @@
20
20
  - **2-7x faster than mssql-python**, up to 10x faster than pyodbc on large reads.
21
21
  - **Arrow out of the box:** results go straight to DuckDB, polars, pyarrow and Delta, no pyarrow required.
22
22
  - **Parallel reads and bulk loads** over several connections.
23
+ - **Rust core crate:** `crates/arrowsql-core` (no pyo3) exposes connect, execute and the parallel Arrow read to other Rust programs.
24
+ - **DNS cache:** resolved hosts are reused and served stale while refreshing (`DnsCacheTTL=<seconds>`, default 300, `0` disables).
23
25
  - **No ODBC driver:** native TDS in Rust, zero required dependencies, wheels for Linux, macOS and Windows.
24
26
  - **Drop-in:** same DB-API, same connection strings; `import mssql_python` keeps working.
25
27
 
@@ -0,0 +1,3 @@
1
+ fn main() {
2
+ pyo3_build_config::use_pyo3_cfgs();
3
+ }
@@ -0,0 +1,31 @@
1
+ [package]
2
+ name = "arrowsql-core"
3
+ version = "0.3.0"
4
+ edition = "2024"
5
+ license = "MIT"
6
+ description = "SQL Server over TDS into Arrow record batches: the Python-free core of arrowsql"
7
+ publish = false
8
+
9
+ [features]
10
+ # Legacy TLS: native-tls (OpenSSL) + OpenSSL Always Encrypted crypto instead of rustls.
11
+ native-tls = ["mssql-tds/native-tls-backend"]
12
+
13
+ [dependencies]
14
+ # Microsoft's native TDS implementation (MIT), vendored with local patches
15
+ # (vendor/mssql-tds/VENDOR.md): a path dependency, so a git dependent of this
16
+ # crate builds the patched copy without a [patch] section.
17
+ mssql-tds = { path = "../../vendor/mssql-tds", default-features = false, features = ["gssapi", "rustls-tls"] }
18
+ tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time", "sync", "macros"] }
19
+ parking_lot = "0.12"
20
+ uuid = "1"
21
+ arrow-array = { version = "60", default-features = false, features = ["ffi"] }
22
+ arrow-buffer = "60"
23
+ arrow-schema = { version = "60", features = ["ffi"] }
24
+ encoding_rs = "0.8"
25
+ async-trait = "0.1"
26
+ log = "0.4"
27
+
28
+ # Windows: in-tree Schannel TLS (msodbcsql's stack) instead of rustls, which fails the
29
+ # handshake with SQL Server's self-generated certificate on Windows.
30
+ [target.'cfg(windows)'.dependencies]
31
+ mssql-tds = { path = "../../vendor/mssql-tds", default-features = false, features = ["gssapi", "rustls-tls", "tls-schannel-direct-on-windows"] }