From 6b27193486347b2d2a26535cafb31759b3c33cfd Mon Sep 17 00:00:00 2001 From: Sanjay Santhanam <51058514+Sanjays2402@users.noreply.github.com> Date: Sat, 25 Jul 2026 19:35:30 -0700 Subject: [PATCH] fix(engine_adapter): preserve pre_ping in with_settings EngineAdapter.with_settings() did not forward the current _pre_ping value to the cloned adapter, and the constructor defaults pre_ping to False. Context.snapshot_evaluator clones the adapter this way, so pre_ping: true silently did not apply to model evaluation or the before_all/after_all environment statements, and a stale connection after a long run failed instead of being re-established. pre_ping is now carried over like the other settings, and remains overridable via an explicit keyword argument. Adds a regression test asserting the cloned adapter keeps pre_ping. Signed-off-by: Sanjay Santhanam <51058514+Sanjays2402@users.noreply.github.com> --- sqlmesh/core/engine_adapter/base.py | 1 + tests/core/engine_adapter/test_base.py | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/sqlmesh/core/engine_adapter/base.py b/sqlmesh/core/engine_adapter/base.py index 54a27c0920..bd435db76f 100644 --- a/sqlmesh/core/engine_adapter/base.py +++ b/sqlmesh/core/engine_adapter/base.py @@ -178,6 +178,7 @@ def with_settings(self, **kwargs: t.Any) -> EngineAdapter: "query_execution_tracker": kwargs.pop( "query_execution_tracker", self._query_execution_tracker ), + "pre_ping": kwargs.pop("pre_ping", self._pre_ping), **self._extra_config, **kwargs, } diff --git a/tests/core/engine_adapter/test_base.py b/tests/core/engine_adapter/test_base.py index 2b9bcc665f..1971ba3bbc 100644 --- a/tests/core/engine_adapter/test_base.py +++ b/tests/core/engine_adapter/test_base.py @@ -3522,6 +3522,15 @@ def test_pre_ping(mocker: MockerFixture, make_mocked_engine_adapter: t.Callable) adapter._connection_pool.get().close.assert_called_once() +def test_with_settings_preserves_pre_ping(make_mocked_engine_adapter: t.Callable): + adapter = make_mocked_engine_adapter(EngineAdapter, pre_ping=True) + assert adapter.with_settings()._pre_ping is True + assert adapter.with_settings(pre_ping=False)._pre_ping is False + + adapter = make_mocked_engine_adapter(EngineAdapter) + assert adapter.with_settings()._pre_ping is False + + @pytest.mark.parametrize( "partitioned_by", [