You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
### Work Item / Issue Reference
<!--
IMPORTANT: Please follow the PR template guidelines below.
For mssql-python maintainers: Insert your ADO Work Item ID below (e.g.
AB#37452)
For external contributors: Insert Github Issue number below (e.g. #149)
Only one reference is required - either GitHub issue OR ADO Work Item.
-->
<!-- mssql-python maintainers: ADO Work Item -->
>
[AB#34893](https://sqlclientdrivers.visualstudio.com/c6d89619-62de-46a0-8b46-70b92a84d85e/_workitems/edit/34893)
-------------------------------------------------------------------
### Summary
This pull request adds comprehensive support for capturing and managing
diagnostic messages (such as SQL Server PRINT statements and warnings)
in the `mssql_python` driver's `Cursor` class, following the DBAPI
specification. It introduces a new `messages` attribute on the cursor,
ensures messages are cleared or preserved at the correct times, and
provides robust testing for these behaviors. Additionally, it implements
the underlying C++ binding for retrieving all diagnostic records from
the ODBC driver.
**Diagnostic message handling improvements:**
* Added a `messages` attribute to the `Cursor` class to store diagnostic
messages, and ensured it is cleared before each non-fetch operation
(e.g., `execute`, `executemany`, `close`, `commit`, `rollback`,
`scroll`, and `nextset`) to comply with DBAPI expectations.
(`mssql_python/cursor.py`)
* After each statement execution and fetch operation, diagnostic
messages (including informational and warning messages) are collected
and appended to the `messages` list, using a new C++ binding.
(`mssql_python/cursor.py`, `mssql_python/pybind/ddbc_bindings.cpp`)
**Native driver and binding enhancements:**
* Implemented the `SQLGetAllDiagRecords` function in the C++ pybind
layer to retrieve all diagnostic records from an ODBC statement handle,
handling both Windows and Unix platforms, and exposed it as
`DDBCSQLGetAllDiagRecords` to Python.
(`mssql_python/pybind/ddbc_bindings.cpp`)
**Testing and specification compliance:**
* Added a comprehensive test suite to verify message capturing,
clearing, preservation across fetches, handling of multiple messages,
message formatting, warning capture, manual clearing, and error
scenarios, ensuring compliance with DBAPI and robust behavior.
(`tests/test_004_cursor.py`)
**Other cursor improvements:**
* Refactored the `skip` method to validate arguments more strictly,
clear messages before skipping, and improve error handling and
documentation. (`mssql_python/cursor.py`)
These changes significantly improve the usability and correctness of
message handling in the driver, making it easier for users to access and
manage SQL Server informational and warning messages in Python
applications.
---------
Co-authored-by: Jahnvi Thakkar <jathakkar@microsoft.com>
0 commit comments