Compare commits

...

1 Commits

Author SHA1 Message Date
HAL9000 2aac8c2e02 fix(database/migration_runner): add check_same_thread=False to get_current_revision() SQLite engine
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 45s
CI / helm (pull_request) Successful in 48s
CI / build (pull_request) Successful in 1m8s
CI / lint (pull_request) Successful in 1m14s
CI / quality (pull_request) Successful in 1m32s
CI / typecheck (pull_request) Successful in 1m50s
CI / security (pull_request) Successful in 1m55s
CI / benchmark-regression (pull_request) Failing after 1m13s
CI / integration_tests (pull_request) Successful in 3m34s
CI / e2e_tests (pull_request) Successful in 4m4s
CI / unit_tests (pull_request) Successful in 6m2s
CI / docker (pull_request) Successful in 1m26s
CI / coverage (pull_request) Successful in 11m30s
CI / status-check (pull_request) Successful in 3s
MigrationRunner.get_current_revision() was creating a SQLite engine without
connect_args={'check_same_thread': False}, causing ProgrammingError when called
from a different thread than the one that created the engine. This is now
consistent with init_or_upgrade() which correctly passes check_same_thread=False
for all SQLite engines.

Added a Behave scenario to verify that get_current_revision() passes
check_same_thread=False when creating a SQLite engine.

ISSUES CLOSED: #10952
2026-05-05 10:46:41 +00:00
3 changed files with 24 additions and 1 deletions
+6
View File
@@ -1714,6 +1714,12 @@ Feature: Consolidated Misc
And the temporary connection should be closed afterward
Scenario: get_current_revision uses check_same_thread=False for SQLite engines
Given a migration runner configured for "sqlite:///:memory:"
When I request the current revision from the database
Then the SQLite engine for get_current_revision should use check_same_thread=False
Scenario: File-based SQLite database directory is created if missing
Given a migration runner configured for "sqlite:///tmp/test-db/mydb.db"
When I initialize or upgrade a file-based SQLite database
+11
View File
@@ -316,6 +316,17 @@ def step_then_temp_connection_closed(context) -> None:
assert context.current_rev_fake_engine.connections[0].exit_called is True
@then("the SQLite engine for get_current_revision should use check_same_thread=False")
def step_then_get_current_revision_check_same_thread(context) -> None:
_url, kwargs = context.current_rev_create_call
assert "connect_args" in kwargs, (
"Expected connect_args to be passed to create_engine for SQLite"
)
assert kwargs["connect_args"].get("check_same_thread") is False, (
"Expected check_same_thread=False in connect_args for SQLite engine"
)
@when("I initialize or upgrade a file-based SQLite database")
def step_when_init_file_based_sqlite(context) -> None:
import shutil
@@ -154,7 +154,13 @@ class MigrationRunner:
Returns:
Current revision ID or None if no migrations have been applied
"""
engine = create_engine(self.database_url)
if self.database_url.startswith("sqlite"):
engine = create_engine(
self.database_url,
connect_args={"check_same_thread": False},
)
else:
engine = create_engine(self.database_url)
with engine.connect() as connection:
context = MigrationContext.configure(connection)
return context.get_current_revision()