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.
- arrowsql-0.3.0/AGENTS.md +27 -0
- arrowsql-0.3.0/CHANGELOG.md +184 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/CONTRIBUTING.md +3 -2
- {arrowsql-0.1.0 → arrowsql-0.3.0}/Cargo.lock +28 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0}/Cargo.toml +28 -12
- {arrowsql-0.1.0 → arrowsql-0.3.0}/PKG-INFO +3 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0}/README.md +2 -0
- arrowsql-0.3.0/build.rs +3 -0
- arrowsql-0.3.0/crates/arrowsql-core/Cargo.toml +31 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/api.rs +558 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/arrow/mod.rs +79 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/arrow/sink.rs +14 -16
- arrowsql-0.3.0/crates/arrowsql-core/src/arrow/stream.rs +465 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/connection.rs +246 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/connstr.rs +19 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/decode/ascii.rs +90 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/decode/buffer.rs +83 -2
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/decode/describe.rs +0 -60
- arrowsql-0.3.0/crates/arrowsql-core/src/decode/mod.rs +12 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/diag.rs +0 -9
- arrowsql-0.3.0/crates/arrowsql-core/src/error.rs +126 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/lib.rs +85 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/numeric.rs +40 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/batch.rs +57 -9
- arrowsql-0.3.0/crates/arrowsql-core/src/params/mod.rs +125 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/udt.rs +3 -22
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/pooling.rs +10 -11
- arrowsql-0.3.0/crates/arrowsql-core/src/read.rs +1028 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/runtime.rs +125 -88
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/cancel.rs +3 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/cursor.rs +29 -26
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/exec.rs +17 -28
- arrowsql-0.3.0/crates/arrowsql-core/src/statement/mod.rs +122 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/statement/wire.rs +27 -6
- arrowsql-0.3.0/crates/arrowsql-core/src/txn_abort.rs +145 -0
- arrowsql-0.3.0/crates/arrowsql-core/src/utf8.rs +156 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/utf8_wrap.rs +0 -36
- arrowsql-0.3.0/crates/arrowsql-core/tests/live.rs +368 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/AGENT_MODE.md +14 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ARCHITECTURE.md +67 -20
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/CONTRACT.md +9 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PACKAGING.md +8 -7
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PLATFORMS_AND_CONNECTION.md +39 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PYTHON_LAYER_CHANGES.md +8 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ROADMAP.md +2 -2
- {arrowsql-0.1.0 → arrowsql-0.3.0}/pyproject.toml +5 -4
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/_rust_auth.py +23 -8
- arrowsql-0.3.0/python/arrowsql/_utf8_strings.py +28 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/aio.py +20 -7
- arrowsql-0.3.0/python/arrowsql/arrow_parallel.py +191 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/auth.py +37 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/bulk_parallel.py +41 -49
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/connection.py +18 -13
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/connection_string_parser.py +33 -5
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/constants.py +2 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/cursor.py +44 -7
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/ddbc_bindings.pyi +69 -0
- arrowsql-0.3.0/python/arrowsql/exceptions.py +214 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/helpers.py +13 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/logging.py +8 -8
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/parameter_helper.py +4 -12
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/row.py +23 -208
- {arrowsql-0.1.0 → arrowsql-0.3.0}/requirements-dev.txt +1 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/check_upstream_baseline.py +12 -2
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/run_tests.py +18 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/agent/mod.rs +3 -2
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/connection.rs +65 -22
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/convert.rs +56 -68
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/hub.rs +2 -23
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/pool.rs +40 -4
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/session.rs +232 -68
- arrowsql-0.3.0/src/arrow/export.rs +419 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/arrow/mod.rs +11 -46
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/arrow_encode.rs +4 -2
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/arrow_source.rs +74 -10
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/mod.rs +3 -1
- arrowsql-0.3.0/src/bulk/parallel.rs +193 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/rows.rs +7 -17
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/settings.rs +10 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/wire.rs +1 -15
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/connection.rs +64 -201
- arrowsql-0.3.0/src/decode/describe.rs +67 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/mod.rs +2 -4
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/python.rs +6 -72
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/temporal.rs +27 -0
- arrowsql-0.3.0/src/dns_ttl_cache_tests.rs +501 -0
- arrowsql-0.3.0/src/errors.rs +324 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/getinfo.rs +7 -12
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/lib.rs +90 -9
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/logging.rs +60 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/params/mod.rs +4 -70
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/params/py_types.rs +56 -135
- arrowsql-0.3.0/src/params/udt.rs +26 -0
- arrowsql-0.3.0/src/pooling.rs +23 -0
- arrowsql-0.3.0/src/read.rs +433 -0
- arrowsql-0.3.0/src/rowfactory.rs +368 -0
- arrowsql-0.3.0/src/runtime.rs +117 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/statement/batch_rpc.rs +1 -8
- arrowsql-0.3.0/src/statement/mod.rs +113 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/statement/odbc.rs +24 -5
- arrowsql-0.3.0/src/utf8_wrap.rs +41 -0
- arrowsql-0.1.0/python/arrowsql/arrow_parallel.py → arrowsql-0.3.0/tests/common_issues/arrow_parallel_reference.py +78 -6
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/conftest.py +8 -1
- arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/MAPPING.md +87 -0
- arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/test_bulk_timeout_udt.py +67 -0
- arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/test_bulk_types_and_errors.py +233 -0
- arrowsql-0.3.0/tests/common_issues/ported_mssql_rs/test_session_and_rpc.py +402 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_connection_strings.py +3 -1
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_dead_connection.py +7 -2
- arrowsql-0.3.0/tests/common_issues/test_lob_arena_reservation.py +28 -0
- arrowsql-0.3.0/tests/common_issues/test_review_python_security.py +92 -0
- arrowsql-0.3.0/tests/common_issues/test_review_security_parser.py +27 -0
- arrowsql-0.3.0/tests/common_issues/test_review_security_scripts.py +94 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_row_access.py +29 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_aio.py +10 -1
- arrowsql-0.3.0/tests/common_issues/test_rs_aio_review.py +394 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_auth_keywords.py +74 -2
- arrowsql-0.3.0/tests/common_issues/test_rs_bulk_parallel_native.py +272 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_parallel_rows.py +9 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_core_regressions.py +2 -2
- arrowsql-0.3.0/tests/common_issues/test_rs_r5_aio_session.py +188 -0
- arrowsql-0.3.0/tests/common_issues/test_rs_read_arrow_parity.py +202 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_read_arrow_partitions.py +9 -23
- arrowsql-0.3.0/tests/common_issues/test_rs_review_rust.py +158 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_utf8_strings.py +5 -5
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_timeouts_cancel.py +24 -0
- arrowsql-0.3.0/tests/mock/conftest.py +234 -0
- arrowsql-0.3.0/tests/mock/mockutil.py +6 -0
- arrowsql-0.3.0/tests/mock/test_aio_null_discovery.py +47 -0
- arrowsql-0.3.0/tests/mock/test_faults.py +285 -0
- arrowsql-0.3.0/tests/mock/test_login_tls.py +208 -0
- arrowsql-0.3.0/tests/mock/test_results.py +157 -0
- arrowsql-0.3.0/tests/port/test_dns_cache.py +250 -0
- arrowsql-0.3.0/tests/port/test_mirroring_partner.py +117 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/port/test_runtime_fork.py +38 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/VENDOR.md +41 -4
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/client_context.rs +6 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/connect_stage.rs +3 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/dns_cache.rs +173 -5
- arrowsql-0.3.0/vendor/mssql-tds/src/connection/dns_ttl_cache.rs +484 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/execution_context.rs +7 -4
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/tds_client.rs +20 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/network_transport.rs +58 -3
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/parallel_connect.rs +56 -5
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection.rs +37 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection_provider/tds_connection_provider.rs +21 -7
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/ssrp.rs +6 -1
- arrowsql-0.1.0/CHANGELOG.md +0 -83
- arrowsql-0.1.0/python/arrowsql/_utf8_strings.py +0 -78
- arrowsql-0.1.0/python/arrowsql/exceptions.py +0 -378
- arrowsql-0.1.0/src/arrow/export.rs +0 -685
- arrowsql-0.1.0/src/rowfactory.rs +0 -70
- arrowsql-0.1.0/src/statement/mod.rs +0 -218
- {arrowsql-0.1.0 → arrowsql-0.3.0}/.cargo/config.toml +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/.gitattributes +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/.gitignore +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/LICENSE +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/LICENSE.upstream-mssql-python +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/arrow/plan.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/consts.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/decode/hidden.rs +0 -0
- {arrowsql-0.1.0/src/agent → arrowsql-0.3.0/crates/arrowsql-core/src}/fmt.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/null_types.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0/crates/arrowsql-core}/src/params/placeholders.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ARROW_ODBC_RESEARCH.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ARROW_PLAN.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/ASYNC.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/BENCHMARK_SUMMARY.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/EXPORT_RESEARCH.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/FEATURES.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/FREE_THREADED.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/PERFORMANCE_RESEARCH.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/TEST_SCOPE.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/UPSTREAM_BUGS_FOUND.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/UPSTREAM_ISSUES.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/icon.svg +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo-dark-static.svg +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo-dark.svg +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo-static.svg +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/docs/assets/logo.svg +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/README.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/_demo.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/agent_mode.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/arrow_duckdb.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/odbc2deltalake_sync.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/examples/write_arrow.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/__init__.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/_server_sqlstate.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/agent.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/__init__.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/_connection_context.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/_native.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_connection.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_cursor.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_execute.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/async_fetch.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/async_query/exception_translator.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/connection_string_builder.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/db_connection.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/decimal_config.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/mssql_python.pyi +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/odbc_provider.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/perf_timer.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/pooling.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/py.typed +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/arrowsql/type.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/python/mssql_python/__init__.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/bench_reproduce.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/build.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/ci/install-sqlserver-windows.ps1 +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/codex_review.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/env.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/load_taxi.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/overlay_upstream_binding.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/release_rustflags.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/setup_tls_cert.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/test_overlay.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/scripts/wheel_size.sh +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/agent/render.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/agent/sqltype.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/aio/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/bulk/arrow_wire.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/catalog.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/binary.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/numeric.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/decode/text.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/params/pyformat.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/src/types.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_ctds.txt +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_dotnet_sqlclient.txt +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_go_mssqldb.txt +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/LICENSE_sqlalchemy.txt +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/README.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_ctds_cursor_fetch.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_ctds_executemany.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_ctds_transactions.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_fastmssql_async_threads.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_fastmssql_errors_values.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_fastmssql_lifecycle_pool.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_go_mssqldb_bulkcopy.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_go_mssqldb_xact_guid.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_jdbc_bigint_guid.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_jdbc_temporal_params.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_rs_arrow_bulkcopy.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_mssql_rs_bulkcopy.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pymssql_bulkcopy_paths.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pymssql_qmark_substitution.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pymssql_types_procs.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pyodbc_connection.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pyodbc_cursor_results.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_pyodbc_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_rust_mssql_driver_bulkcopy.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_rust_mssql_driver_param_echo.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_catalog.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_identity_sequence.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_query.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlalchemy_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlclient_bulkcopy.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_sqlclient_scalar_commands.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tedious_protocol.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tedious_statements.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_bulk.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_login_password.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_query_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/ported/test_port_tiberius_results_transactions.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/rs_dtypes.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_binary_guid.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_decimal_numeric.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_executemany.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_g1_pyformat_scanner.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_integers_bool_float.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_issue_581_sqlstate.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_large_values.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_messages_errors.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_multiple_results.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_nulls_typing.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_agent_mode.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_aio_pool_semantics.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_aio.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_exotic.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_paths.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_all_data_types_special.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arith_errors.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arrow_native.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arrow_stream_close.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_arrow_type_mapping.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_batch_parsing.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bigint_overflow_agg.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_decimal_width.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_native.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_native_rows.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_parallel.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_rows_pipeline.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_bulk_serializer_chunks.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_cancel.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_char_padding.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_client_cpu_paths.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_collation_case.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_cte_recursion.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_database_context.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_date_strings_dateformat.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_datetimeoffset_deep.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_decimal_param_inference.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_decode_fastpaths.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_defaults_computed.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_description_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_duckdb_integration.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_error_mid_resultset.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_executemany_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_fetch_sizes_arraysize.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_float_real_edges.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_for_json.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_g3_decode_encode.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_hidden_columns.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_hierarchyid.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_identifiers_quoting.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_identity_triggers.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_isolation_levels.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_leaks_lifecycle.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_legacy_datetime_rounding.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_legacy_lob_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_locking_blocking.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_merge_output.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_message_flood.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_metadata_reuse.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_money_arithmetic.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_null_semantics.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_output_clause.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_pandas_polars_io.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_binding_fastpaths.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_fast_cells.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_type_plancache.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_param_wire_paths.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_pyformat_named.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_read_arrow_stream.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_rowversion_concurrency.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_savepoints_nested.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_session_set_options.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_setinputsizes.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_sparse_columnsets.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_spatial_deep.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_sql_variant_deep.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_string_truncation.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_temporal_tables.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_time7_precision.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_time_scales.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_triggers_rowcount.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_tvp_support.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_uniqueidentifier_order.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_utf8_collations.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_varchar_codepages.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_rs_xml_deep.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_scope_identity_temp.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_special_types.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_stored_procs.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_temporal.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_threading_gil.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_transactions.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_unicode.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/common_issues/test_wide_and_many.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/port/test_free_threaded.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/port/test_tls.py +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/upstream_excluded.txt +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/tests/upstream_passing_baseline.txt +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/.env +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/Cargo.toml +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/LICENSE +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/README.md +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cli.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/blocking.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/bulk_copy.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/bulk_copy_state.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/connection_actions.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/cursor_ops.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/datasource_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/instance_cache.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/metadata_retriever.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/multi_subnet_failover.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/session_recovery.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/any_transport.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/buffers.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/busy_poll.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/certificate_validator.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/extractable_stream.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/localdb.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/named_pipes.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/ssl_handler.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tds_transport.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tls/native_tls_engine.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tls/rustls_engine.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/tls.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/alpn.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/bindings.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/cred.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/engine.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/errors.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/handshake.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/record_layer.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/sspi.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/stream.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport/win_tls/validate.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection/transport.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/connection_provider.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/core.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cursor/cursor_response.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cursor/cursor_types.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/cursor/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/bulk_copy_metadata.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/bulk_copy_metadata_tests.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/column_values.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/decoder.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/encoder.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/lcid_encoding.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/row_writer.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_json.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_string/encoding.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_string.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_tvp.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_udt.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sql_vector.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sqldatatypes.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sqltypes.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/sync_decoder.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes/tds_value_serializer.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/datatypes.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/error/bulk_copy_errors.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/error/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/fuzz_support.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/handler/handler_factory.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/handler/sspi_handler.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/handler.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/packet_reader.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/packet_writer.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/reader_writer.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io/token_stream.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/io.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/lib.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/attention.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/batch.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/bulk_load.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/bulk_load_tests.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/always_encrypted.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/data_classification.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/dns_caching.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/enhanced_routing.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/fedauth.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/jsonfeature.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/session_recovery.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/useragent.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/utf8.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features/vectorfeature.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/features.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/headers.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/login.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/login_options.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/messages.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/parameters/rpc_parameters.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/parameters.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/prelogin.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/rpc.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message/transaction_management.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/message.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/query/metadata.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/query/result.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/query.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/cell_decryptor.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/apple.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/cng.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/der.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/openssl.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/crypto/unsupported.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/describe_parameter_encryption.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/encryption/aead_aes_256_cbc_hmac_sha256.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/encryption/cell.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/encryption/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/error.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/keystore/certificate.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/keystore/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/mock.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/query_metadata_cache.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/security_context.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/spn.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/unix/gssapi_context.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/unix/gssapi_ffi.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/unix/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/windows/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/windows/sspi_context.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/security/windows/sspi_ffi.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/sql_identifier.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/test_client_support.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/test_packet_support.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/data_classification.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/fed_auth_info.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/login_ack.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/col_info_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/colmetadata_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/common.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/data_classification_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/done_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/envchange_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/error_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/featureext_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/fedauth_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/info_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/loginack_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/mod.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/nbcrow_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/order_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/returnstatus_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/returnvalue_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/row_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/session_state_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/sspi_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/parsers/tab_name_parser.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/tokenitems.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token/tokens.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/token.rs +0 -0
- {arrowsql-0.1.0 → arrowsql-0.3.0}/vendor/mssql-tds/src/trace_context.rs +0 -0
arrowsql-0.3.0/AGENTS.md
ADDED
|
@@ -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.
|
|
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.
|
|
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
|
-
#
|
|
22
|
-
|
|
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 = {
|
|
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.
|
|
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
|
|
arrowsql-0.3.0/build.rs
ADDED
|
@@ -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"] }
|