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
{{ message }}
Repository navigation
Commit 331984b
Browse filesBrowse the repository at this point in the historyBrowse files
authored
PERF: route setinputsizes through the native C++ execute pipeline (#736)
### Work Item / Issue Reference
> GitHub Issue: #500
-------------------------------------------------------------------
### Summary
move `setinputsizes` overrides into the native detect, bind, and execute
path and remove `DDBCSQLExecuteLegacy`.
-------------------------------------------------------------------
### Performance Results
#### macOS arm64, Python 3.13, SQL Server 2022, release build
| Path | Median | Improvement |
|------|--------|-------------|
| `main` legacy path | 2.205s | |
| this PR native path | 1.686s | **24% faster** |
the issue #500 workload runs 100 executions with 2,000 declared
parameters each (1,000 `INT`/`VARCHAR` rows), calling `setinputsizes()`
before every execute. results are the median of three runs and were
confirmed with the base/PR execution order reversed.
#### Cross-platform CI
| Platform | `main` | This PR | Raw improvement |
|----------|--------|---------|-----------------|
| Windows SQL2022 | 4.0770s | 2.8424s | **30.3% faster** |
| Windows SQL2025 | 3.8320s | 3.1110s | **18.8% faster** |
| macOS SQL2022 | 18.0371s | 9.0534s | **49.8% faster** |
| macOS SQL2025 | 9.6811s | 7.1356s | **26.3% faster** |
| Linux SQL2022 | 2.7965s | 2.3523s | **15.9% faster** |
`main` results are from [build
171915](https://dev.azure.com/sqlclientdrivers/public/_build/results?buildId=171915).
PR results are from [build
172065](https://dev.azure.com/sqlclientdrivers/public/_build/results?buildId=172065),
except macOS SQL2022, which is from the last completed run in [build
171939](https://dev.azure.com/sqlclientdrivers/public/_build/results?buildId=171939);
the rerun reached the 20-minute benchmark timeout before that scenario
completed.
these are raw medians. the existing pyodbc-normalized score is not used
here because the Windows pyodbc main baseline did not reproduce across
hosted runners.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Jahnvi Thakkar <61936179+jahnvi480@users.noreply.github.com>
0 commit comments