Enhancements
• Faster setinputsizes() Execution (#736)
What changed: Routed setinputsizes() parameter handling through the native C++ execution pipeline.
Who benefits: Applications with wide, batched, or frequently executed parameterized statements.
Impact: These workloads spend less time in Python-side parameter processing.
PR #736
• memoryview Support in Binary() (#741)
What changed: Extended Binary() to accept memoryview objects as binary inputs.
Who benefits: Applications working with zero-copy views and other buffer-protocol data sources.
Impact: Binary values can be passed without first converting a memoryview to bytes.
PR #741
• Module-Level SQL Server Type Constants (#764)
What changed: Exposed SQL Server-specific type constants directly from the mssql_python module.
Who benefits: Developers using SQL Server type metadata and parameter declarations.
Impact: Type constants are easier to discover and access through the public package API.
PR #764
Bug Fixes
• Concurrent Logging No Longer Deadlocks (#678)
What changed: Corrected GIL and mutex lock ordering in native logging paths used concurrently by multiple threads.
Who benefits: Multithreaded applications with driver logging enabled.
Impact: Concurrent logging no longer risks hanging the process.
PR #678
• Correct Rust Core in Windows ARM64 Wheels (#737)
What changed: Windows ARM64 wheels now vendor the matching ARM64 mssql_py_core binary.
Who benefits: Windows ARM64 users, especially applications using bulk copy.
Impact: Installed wheels contain architecture-compatible native components and can use bulk copy correctly.
PR #737
• Reliable Package-Local DLL Loading on Windows (#735)
What changed: Bundled Windows driver and authentication DLLs are loaded from package-local directories.
Who benefits: Windows applications deployed in environments with varying DLL search paths.
Impact: Native dependencies resolve reliably without relying on process-wide search-path configuration.
PR #735
• Consistent Decimal Parameter Binding (#742)
What changed: Decimal parameters are now bound as SQL_NUMERIC regardless of their runtime value.
Who benefits: Applications that send decimal values through parameterized queries or batches.
Impact: Decimal parameter typing remains stable across values and execution paths.
PR #742
• ODBC 3.x Parameter Types (#758)
What changed: Replaced obsolete ODBC 2.x parameter type identifiers with their ODBC 3.x equivalents.
Who benefits: Applications using typed parameters across current SQL Server driver configurations.
Impact: Parameter binding follows the current ODBC standard and avoids legacy type mismatches.
PR #758 - Thanks @Theekshna for the contribution!
• Database Name Metadata Is Decoded (#771)
What changed: Added decoding for the value returned by Connection.getinfo(SQL_DATABASE_NAME).
Who benefits: Applications that inspect the active database through connection metadata.
Impact: Database names are returned as correct Python text values.
PR #771
• Mixed Cursor Cleanup No Longer Crashes at Shutdown (#772)
What changed: Corrected native cleanup ordering for connections containing cursors in mixed lifecycle states.
Who benefits: Applications that create multiple cursors and allow some cursor cleanup to occur during shutdown.
Impact: Process shutdown completes without a native crash from mixed cursor cleanup.
PR #772