From 2ab22d995bd263dc7384b0f7d9a4a5b58dc964a5 Mon Sep 17 00:00:00 2001 From: Iaroslav Zeigerman Date: Wed, 30 Jul 2025 14:24:00 -0700 Subject: [PATCH] Fix: Resolve physical tables correctly when the query optimization is disabled for a model --- sqlmesh/core/renderer.py | 4 +--- tests/core/test_model.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/sqlmesh/core/renderer.py b/sqlmesh/core/renderer.py index dc89e15af6..8b733d4c55 100644 --- a/sqlmesh/core/renderer.py +++ b/sqlmesh/core/renderer.py @@ -523,8 +523,6 @@ def render( runtime_stage, start, end, execution_time, *kwargs.values() ) - needs_optimization = needs_optimization and self._optimize_query_flag - if should_cache and self._optimized_cache: query = self._optimized_cache else: @@ -560,7 +558,7 @@ def render( ) raise - if needs_optimization: + if needs_optimization and self._optimize_query_flag: deps = d.find_tables( query, default_catalog=self._default_catalog, dialect=self._dialect ) diff --git a/tests/core/test_model.py b/tests/core/test_model.py index b7c74f90a2..4c2f30e2f7 100644 --- a/tests/core/test_model.py +++ b/tests/core/test_model.py @@ -11061,3 +11061,38 @@ def entrypoint(context, **kwargs): assert model_daily is not None assert model_daily.cron == "@daily" + + +def test_render_query_optimize_query_false(assert_exp_eq, sushi_context): + snapshots = sushi_context.snapshots + + model = sushi_context.get_model("sushi.top_waiters") + model = model.copy(update={"optimize_query": False}) + + upstream_model_version = sushi_context.get_snapshot("sushi.waiter_revenue_by_day").version + + assert_exp_eq( + model.render_query(snapshots=snapshots).sql(), + f""" + WITH "test_macros" AS ( + SELECT + 2 AS "lit_two", + "revenue" * 2.0 AS "sql_exp", + CAST("revenue" AS TEXT) AS "sql_lit" + FROM "memory"."sqlmesh__sushi"."sushi__waiter_revenue_by_day__{upstream_model_version}" AS "waiter_revenue_by_day" /* memory.sushi.waiter_revenue_by_day */ + ) + SELECT + CAST("waiter_id" AS INT) AS "waiter_id", + CAST("revenue" AS DOUBLE) AS "revenue" + FROM "memory"."sqlmesh__sushi"."sushi__waiter_revenue_by_day__{upstream_model_version}" AS "waiter_revenue_by_day" /* memory.sushi.waiter_revenue_by_day */ + WHERE + "event_date" = ( + SELECT + MAX("event_date") + FROM "memory"."sqlmesh__sushi"."sushi__waiter_revenue_by_day__{upstream_model_version}" AS "waiter_revenue_by_day" /* memory.sushi.waiter_revenue_by_day */ + ) + ORDER BY + "revenue" DESC + LIMIT 10 + """, + )