Skip to content

Conversation

@jahnvi480
Copy link
Contributor

@jahnvi480 jahnvi480 commented Aug 22, 2025

Work Item / Issue Reference

AB#34933


Summary

This pull request adds support for retrieving metadata about stored procedures in SQL Server via the Python driver, including both temporary and permanent procedures. It introduces a new procedures() method on the cursor object, updates the C++ pybind layer to expose the ODBC SQLProcedures API, and includes a comprehensive suite of tests to ensure correct behavior across various scenarios.

New feature: Procedures metadata retrieval

  • Added procedures() method to the cursor class in mssql_python/cursor.py to fetch information about stored procedures, handling both temporary (using direct queries) and permanent procedures (using the ODBC API). The method supports filtering by procedure name, catalog, and schema, and returns detailed metadata for each procedure.

ODBC bindings and pybind integration

  • Introduced new function pointer type SQLProceduresFunc and related extern variable to the ODBC bindings header and implementation files (mssql_python/pybind/ddbc_bindings.h, mssql_python/pybind/ddbc_bindings.cpp).
  • Loaded the SQLProceduresW function pointer during driver initialization and included it in the required function check.
  • Implemented a wrapper function SQLProcedures_wrap and exposed it to Python as DDBCSQLProcedures for cross-platform use.
    Testing and validation
  • Added a comprehensive set of tests to tests/test_004_cursor.py to verify the new procedures() functionality, including filtering by name, schema, and catalog, handling of input/output parameters, result set reporting, and correct behavior with non-existent procedures.

@github-actions github-actions bot added the pr-size: medium Moderate update size label Aug 22, 2025
@github-actions github-actions bot added pr-size: medium Moderate update size and removed pr-size: medium Moderate update size labels 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.

Added few comments

@github-actions github-actions bot added pr-size: medium Moderate update size and removed pr-size: medium Moderate update size labels Sep 12, 2025
### 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#34932](https://sqlclientdrivers.visualstudio.com/c6d89619-62de-46a0-8b46-70b92a84d85e/_workitems/edit/34932)

-------------------------------------------------------------------
### Summary   
This pull request adds support for retrieving foreign key metadata from
SQL Server via ODBC by implementing the `foreignKeys` method in the
`Cursor` class and wiring up the necessary C++ bindings for the ODBC
`SQLForeignKeys` API. The changes ensure that Python users can now fetch
foreign key relationships in a way similar to other database drivers.

**Python interface enhancements:**

* Added a new `foreignKeys` method to the `Cursor` class in `cursor.py`,
allowing users to retrieve foreign key metadata for a specified table or
referenced table. The method performs input validation, calls the new
C++ binding, and returns results as `Row` objects with appropriate
metadata.
* Updated imports in `cursor.py` to include the `ProgrammingError`
exception, used for input validation in the new method.

**C++ DDBC bindings:**

* Added a new function pointer type (`SQLForeignKeysFunc`) and
corresponding global pointer (`SQLForeignKeys_ptr`) for the ODBC
`SQLForeignKeys` API in `ddbc_bindings.h` and initialized it in
`ddbc_bindings.cpp`.
* Implemented the `SQLForeignKeys_wrap` function in `ddbc_bindings.cpp`
to wrap the ODBC call, handling both Windows and Unix platforms, and
exposed it to Python as `DDBCSQLForeignKeys`.
* Updated the driver loading logic to require `SQLForeignKeys` and fail
if it is not present, ensuring the new functionality is always
available.

---------

Co-authored-by: Jahnvi Thakkar <[email protected]>
@github-actions github-actions bot added pr-size: large Substantial code update and removed pr-size: medium Moderate update size labels Sep 15, 2025
@jahnvi480 jahnvi480 merged commit 52996ac into jahnvi/cursor_gettypeinfo 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