Skip to content

FIX: forward connection timeout to bulkcopy pycore connection#650

Draft
bewithgaurav wants to merge 1 commit into
mainfrom
bewithgaurav/fix-626-bulkcopy-connect-timeout
Draft

FIX: forward connection timeout to bulkcopy pycore connection#650
bewithgaurav wants to merge 1 commit into
mainfrom
bewithgaurav/fix-626-bulkcopy-connect-timeout

Conversation

@bewithgaurav

Copy link
Copy Markdown
Collaborator

Work Item / Issue Reference

GitHub Issue: #626


Summary

cursor.bulkcopy() opens a separate connection through mssql-py-core, which defaulted to a hardcoded 15s connect timeout with no way to override it from Python. I forward the cursor's query timeout (set via connect(timeout=X)) into pycore's connect_timeout when it's set, so the bulk copy connection honors the same limit. timeout=0 stays a no-override, leaving pycore on its 15s default. added tests covering the positive forward, the zero case, and that the cursor snapshot (not a later live connection change) is what's used.

cursor.bulkcopy() opens a separate connection through mssql-py-core, which defaulted to a hardcoded 15s connect timeout with no way to override it. forward the cursor's query timeout (connect(timeout=X)) into pycore's connect_timeout when set, so the same limit applies to the bulk copy connection. 0 stays a no-override, leaving pycore on its default.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added the pr-size: small Minimal code update label Jun 29, 2026
def test_positive_timeout_forwarded(self, mock_logger):
"""cursor._timeout > 0 ⇒ connect_timeout reaches pycore, overriding 15s."""
mock_logger.is_debug_enabled = False
cursor = _make_cursor("Server=localhost;Database=testdb;UID=sa;PWD=pwd", None)
def test_zero_timeout_not_forwarded(self, mock_logger):
"""cursor._timeout == 0 ⇒ no override, pycore keeps its default."""
mock_logger.is_debug_enabled = False
cursor = _make_cursor("Server=localhost;Database=testdb;UID=sa;PWD=pwd", None)
def test_uses_cursor_snapshot_not_live_connection(self, mock_logger):
"""timeout is the cursor snapshot; later connection changes don't apply."""
mock_logger.is_debug_enabled = False
cursor = _make_cursor("Server=localhost;Database=testdb;UID=sa;PWD=pwd", None)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-size: small Minimal code update

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants