FIX: Invalid data type for None by subrata-ms ยท Pull Request #332 ยท microsoft/mssql-python

@subrata-ms

AB#39794

GitHub Issue: #273


Summary

This pull request adds support for binding arrays of NULL parameters in SQL statements and introduces a corresponding test to ensure correct behavior when executing multiple inserts with only NULL values. The main focus is on handling the SQL_C_DEFAULT type for parameter arrays, ensuring all values are NULL, and verifying this functionality through unit testing.

Parameter binding improvements:

  • Added logic to BindParameterArray in ddbc_bindings.cpp to handle the SQL_C_DEFAULT type, ensuring that arrays of NULL values are properly bound and validated. If any non-NULL value is detected, an exception is thrown.

Testing enhancements:

  • Added a new test test_executemany_NONE_parameter_list in test_004_cursor.py to verify that executemany correctly inserts rows with all NULL values and that the count matches the expected number of inserts.

@subrata-ms

Copilot AI review requested due to automatic review settings

November 17, 2025 14:44

Choose a reason for hiding this comment

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

Pull Request Overview

This pull request fixes an issue with the data type mapping for NULL parameters in the _map_sql_type function. The change updates the C type for NULL parameters from SQL_C_DEFAULT (99) to SQL_C_CHAR (-8), which aligns with the SQL type SQL_VARCHAR that's also returned for NULL parameters.

Key changes:

  • Updated the C type for NULL parameters in _map_sql_type from SQL_C_DEFAULT to SQL_C_CHAR to match the SQL_VARCHAR SQL type being used

๐Ÿ’ก Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@subrata-ms

@subrata-ms

@github-actions

๐Ÿ“Š Code Coverage Report

๐Ÿ”ฅ Diff Coverage

93%


๐ŸŽฏ Overall Coverage

76%


๐Ÿ“ˆ Total Lines Covered: 5379 out of 7037
๐Ÿ“ Project: mssql-python


Diff Coverage

Diff: main...HEAD, staged and unstaged changes

  • mssql_python/pybind/ddbc_bindings.cpp (93.3%): Missing lines 2465

Summary

  • Total: 15 lines
  • Missing: 1 line
  • Coverage: 93%

mssql_python/pybind/ddbc_bindings.cpp

Lines 2461-2469

  2461                     dataPtr = nullBuffer;
  2462                     bufferLength = 1;
  2463                     LOG("BindParameterArray: SQL_C_DEFAULT bound - param_index=%d", paramIndex);
  2464                     break;
! 2465                 }
  2466                 default: {
  2467                     LOG("BindParameterArray: Unsupported C type - "
  2468                         "param_index=%d, C_type=%d",
  2469                         paramIndex, info.paramCType);


๐Ÿ“‹ Files Needing Attention

๐Ÿ“‰ Files with overall lowest coverage (click to expand)
mssql_python.pybind.logger_bridge.hpp: 58.8%
mssql_python.pybind.logger_bridge.cpp: 59.2%
mssql_python.row.py: 66.2%
mssql_python.helpers.py: 67.5%
mssql_python.pybind.ddbc_bindings.cpp: 69.3%
mssql_python.pybind.connection.connection.cpp: 73.6%
mssql_python.ddbc_bindings.py: 79.6%
mssql_python.connection.py: 83.9%
mssql_python.cursor.py: 84.4%
mssql_python.__init__.py: 84.9%

๐Ÿ”— Quick Links

@subrata-ms

@subrata-ms

@subrata-ms

gargsaumya

sumitmsft

sumitmsft

sumitmsft

sumitmsft

sumitmsft

Choose a reason for hiding this comment

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

Left a few comments to address

gargsaumya

sumitmsft

sumitmsft

gargsaumya

Choose a reason for hiding this comment

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

Approved, with a comment added that needs to be addressed.

gargsaumya