Skip to content

Conversation

@jahnvi480
Copy link
Contributor

@jahnvi480 jahnvi480 commented Aug 22, 2025

Work Item / Issue Reference

AB#34927


Summary

This pull request adds support for retrieving column metadata from SQL Server using the ODBC SQLColumns API, and exposes this functionality to Python through the columns() method on the cursor class. The implementation includes both backend C++ bindings and a high-level Python interface, as well as careful handling of cursor state and result set mapping.

The most important changes are:

Python interface:

  • Added a new columns() method to the cursor class in mssql_python/cursor.py to retrieve detailed column metadata for tables using the ODBC SQLColumns function. This method includes extensive documentation, result mapping, and warnings about potentially expensive queries. It also wraps and overrides the fetch methods to provide specialized column mappings for the result set.

  • Updated the execute() method in cursor.py to restore the original fetch methods if they were previously overridden, ensuring correct behavior after using columns().

C++ bindings and backend:

  • Added the SQLColumnsFunc typedef, function pointer, and symbol loading for the SQLColumnsW ODBC API in ddbc_bindings.h and ddbc_bindings.cpp. This ensures the backend can call the ODBC function for column metadata.

  • Implemented the SQLColumns_wrap C++ function in ddbc_bindings.cpp to call the ODBC SQLColumns API, handling both Windows and Unix platforms, and converting Python objects to wide strings as needed.

  • Exposed a new DDBCSQLColumns method in the Python extension module, allowing Python code to call the new backend functionality.

@github-actions github-actions bot added the pr-size: large Substantial code update label Aug 22, 2025
Copy link
Contributor

@sumitmsft sumitmsft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a few comments

@github-actions github-actions bot added pr-size: large Substantial code update and removed pr-size: large Substantial code update labels Sep 12, 2025
@github-actions github-actions bot added pr-size: large Substantial code update and removed pr-size: large Substantial code update labels Sep 12, 2025
@jahnvi480 jahnvi480 requested a review from sumitmsft September 12, 2025 06:35
@github-actions github-actions bot added pr-size: large Substantial code update and removed pr-size: large Substantial code update labels Sep 12, 2025
@github-actions github-actions bot added pr-size: large Substantial code update and removed pr-size: large Substantial code update labels Sep 15, 2025
@jahnvi480 jahnvi480 merged commit 6966ff9 into jahnvi/cursor_statistics Sep 15, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-size: large Substantial code update

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants