diff --git a/OneBranchPipelines/build-release-package-pipeline.yml b/OneBranchPipelines/build-release-package-pipeline.yml index 970928e6..550d317d 100644 --- a/OneBranchPipelines/build-release-package-pipeline.yml +++ b/OneBranchPipelines/build-release-package-pipeline.yml @@ -95,8 +95,8 @@ parameters: arch: 'x64' - pyVer: '313' arch: 'x64' - # - pyVer: '314' # Life of π: Unfolding in v1.0.0 - # arch: 'x64' + - pyVer: '314' + arch: 'x64' # ARM64 builds (4 versions: 3.11-3.14) # 3.10 excluded due to limited ARM64 support - pyVer: '311' @@ -105,8 +105,8 @@ parameters: arch: 'arm64' - pyVer: '313' arch: 'arm64' - # - pyVer: '314' # Life of π: Unfolding in v1.0.0 - # arch: 'arm64' + - pyVer: '314' + arch: 'arm64' # macOS Configuration Matrix # Each entry creates separate stage: MacOS_py @@ -120,7 +120,7 @@ parameters: - pyVer: '311' - pyVer: '312' - pyVer: '313' - # - pyVer: '314' # Life of π: Unfolding in v1.0.0 + - pyVer: '314' # Linux Configuration Matrix # Each entry creates ONE stage that builds ALL Python versions (3.10-3.14) @@ -440,17 +440,17 @@ extends: - Win_py311_x64 - Win_py312_x64 - Win_py313_x64 - # - Win_py314_x64 # Life of π: Unfolding in v1.0.0 + - Win_py314_x64 - Win_py311_arm64 - Win_py312_arm64 - Win_py313_arm64 - # - Win_py314_arm64 # Life of π: Unfolding in v1.0.0 + - Win_py314_arm64 # macOS dependencies (5 stages) - MacOS_py310 - MacOS_py311 - MacOS_py312 - MacOS_py313 - # - MacOS_py314 # Life of π: Unfolding in v1.0.0 + - MacOS_py314 # Linux dependencies (4 stages) - Linux_manylinux_x86_64 - Linux_manylinux_aarch64 diff --git a/OneBranchPipelines/stages/build-linux-single-stage.yml b/OneBranchPipelines/stages/build-linux-single-stage.yml index bd81ed58..6b68a737 100644 --- a/OneBranchPipelines/stages/build-linux-single-stage.yml +++ b/OneBranchPipelines/stages/build-linux-single-stage.yml @@ -182,7 +182,7 @@ stages: docker exec build-$(LINUX_TAG)-$(ARCH) $SHELL_EXE -lc 'mkdir -p /workspace/dist' # Loop through all Python versions: build wheel -> test wheel -> repeat - for PYBIN in cp310 cp311 cp312 cp313; do # cp314: Life of π: Unfolding in v1.0.0 + for PYBIN in cp310 cp311 cp312 cp313 cp314; do echo "" echo "=====================================================" echo "Building and testing $PYBIN on $(LINUX_TAG)/$(ARCH)" diff --git a/PyPI_Description.md b/PyPI_Description.md index bd1c3bf9..afe8cd8f 100644 --- a/PyPI_Description.md +++ b/PyPI_Description.md @@ -1,65 +1,51 @@ -# mssql-python - -mssql-python is a new first-party SQL Server driver for Python that has all of the benefits of a fresh start while preserving a familiar experience for developers. - +# General Availability Release + +mssql‑python is now Generally Available (GA) as Microsoft’s official Python driver for SQL Server, Azure SQL, and SQL databases in Fabric. This release delivers a production‑ready, high‑performance, and developer‑friendly experience. + ## What makes mssql-python different? - + ### Powered by DDBC – Direct Database Connectivity - + Most Python SQL Server drivers, including pyodbc, route calls through the Driver Manager, which has slightly different implementations across Windows, macOS, and Linux. This results in inconsistent behavior and capabilities across platforms. Additionally, the Driver Manager must be installed separately, creating friction for both new developers and when deploying applications to servers. - -At the heart of the driver is DDBC (Direct Database Connectivity) — a lightweight, high-performance C++ layer that replaces the platform’s Driver Manager. - + +At the heart of the mssql-python driver is DDBC (Direct Database Connectivity) — a lightweight, high-performance C++ layer that replaces the platform’s Driver Manager. + Key Advantages: - + - Provides a consistent, cross-platform backend that handles connections, statements, and memory directly. - Interfaces directly with the native SQL Server drivers. - Integrates with the same TDS core library that powers the ODBC driver. - + ### Why is this architecture important? - + By simplifying the architecture, DDBC delivers: - + - Consistency across platforms - Lower function call overhead - Zero external dependencies on Windows (`pip install mssql-python` is all you need) - Full control over connections, memory, and statement handling - + ### Built with PyBind11 + Modern C++ for Performance and Safety - -To expose the DDBC engine to Python, mssql-python uses PyBind11 – a modern C++ binding library, instead of ctypes. With ctypes, every call between Python and the ODBC driver involved costly type conversions, manual pointer management, resulting in slow and potentially unsafe code. + +To expose the DDBC engine to Python, mssql-python uses PyBind11 – a modern C++ binding library. PyBind11 provides: - + - Native-speed execution with automatic type conversions - Memory-safe bindings - Clean and Pythonic API, while performance-critical logic remains in robust, maintainable C++. - -## Public Preview Release - -We are currently in **Public Preview**. - -## What's new in v0.14.0 - + +## What's new in v1.0.0 + ### New Features -- **50-60% Faster Fetching:** Major optimizations including direct UTF-16 decoding, Python C API usage, and cached converters deliver dramatic performance gains for large result sets (100K+ rows), with **1.4-1.7× improvement** for very large datasets. -- **Connection String Validation:** Intelligent parser with allowlist validation, synonym normalization, and clear error messages for malformed strings. **Breaking change:** Unknown parameters now raise errors instead of being silently ignored. -- **Enhanced DECIMAL Precision:** Increased precision support from 15 to 38 digits (SQL Server maximum) with proper binary representation for high-precision calculations. -- **Comprehensive Logging:** Unified Python-C++ logging framework with `setup_logging()` API for detailed diagnostics with zero overhead when disabled. -- **Connection Attribute Control:** New `Connection.set_attr()` method for fine-grained control over ODBC connection attributes, isolation levels, and timeouts (pyodbc-compatible API). -- **XML Data Type:** Comprehensive support for SQL Server `XML` type, including efficient streaming for large documents. -- **DECIMAL Scientific Notation:** Improved handling of decimal values in scientific notation to prevent SQL Server conversion errors. - -### Bug Fixes -- **Access Token Management:** Fixed Microsoft Entra ID authentication token handling to eliminate corruption in concurrent scenarios. -- **Decimal executemany Fix:** Resolved type inference issues when batch inserting Decimal values. - -⚠️ **Breaking Change:** Connection string validation now raises `ConnectionStringParseError` for unknown/misspelled parameters. Review connection strings before upgrading. - + +- *Python 3.14 support* - ensuring compatibility with the latest Python ecosystem. +- *GA stability* - hardened release engineering, expanded test coverage, and compliance checks for enterprise readiness. + For more information, please visit the project link on Github: https://github.com/microsoft/mssql-python - + If you have any feedback, questions or need support please mail us at mssql-python@microsoft.com. - + ## What's Next - -As we continue to develop and refine the driver, you can expect regular updates that will introduce new features, optimizations, and bug fixes. We encourage you to contribute, provide feedback and report any issues you encounter, as this will help us improve the driver ahead of General Availability. + +As we continue to refine the driver and add new features, you can expect regular updates, optimizations, and bug fixes. We encourage you to contribute, provide feedback and report any issues you encounter, as this will help us improve the driver. diff --git a/mssql_python/__init__.py b/mssql_python/__init__.py index 0c10b87c..c509cf26 100644 --- a/mssql_python/__init__.py +++ b/mssql_python/__init__.py @@ -10,6 +10,9 @@ # Import settings from helpers to avoid circular imports from .helpers import Settings, get_settings, _settings, _settings_lock +# Driver version +__version__ = "1.0.0" + # Exceptions # https://www.python.org/dev/peps/pep-0249/#exceptions diff --git a/setup.py b/setup.py index c997617b..a2d2c340 100644 --- a/setup.py +++ b/setup.py @@ -83,7 +83,7 @@ def finalize_options(self): setup( name='mssql-python', - version='0.14.0', + version='1.0.0', description='A Python library for interacting with Microsoft SQL Server', long_description=open('PyPI_Description.md', encoding='utf-8').read(), long_description_content_type='text/markdown',