From 6b6d6772d580ff56cb36e724cb189349b39d6874 Mon Sep 17 00:00:00 2001 From: George Sittas Date: Mon, 23 Jun 2025 19:40:17 +0300 Subject: [PATCH] Fix: simplify complex expressions when validating boolean pydantic fields --- sqlmesh/core/model/common.py | 12 ++++++++++-- tests/core/test_model.py | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/sqlmesh/core/model/common.py b/sqlmesh/core/model/common.py index 8f2d9e8ff8..1d8ae14442 100644 --- a/sqlmesh/core/model/common.py +++ b/sqlmesh/core/model/common.py @@ -336,10 +336,18 @@ def parse_expression( def parse_bool(v: t.Any) -> bool: - if isinstance(v, exp.Boolean): - return v.this if isinstance(v, exp.Expression): + if not isinstance(v, exp.Boolean): + from sqlglot.optimizer.simplify import simplify + + # Try to reduce expressions like (1 = 1) (see: T-SQL boolean generation) + v = simplify(v) + + if isinstance(v, exp.Boolean): + return v.this + return str_to_bool(v.name) + return str_to_bool(str(v or "")) diff --git a/tests/core/test_model.py b/tests/core/test_model.py index 01b6606074..7c65f25889 100644 --- a/tests/core/test_model.py +++ b/tests/core/test_model.py @@ -10445,7 +10445,7 @@ def test_invalid_sql_model_query() -> None: load_sql_based_model(expressions) -def test_query_label_and_authorization_macro(): +def test_query_label_and_authorization_macro() -> None: @macro() def test_query_label_macro(evaluator): return "[('key', 'value')]" @@ -10478,3 +10478,19 @@ def test_authorization_macro(evaluator): "query_label": d.parse_one("[('key', 'value')]"), "authorization": d.parse_one("'test_authorization'"), } + + +def test_boolean_property_validation() -> None: + expressions = d.parse( + """ + MODEL ( + name db.table, + enabled @IF(TRUE, TRUE, FALSE), + dialect tsql + ); + + SELECT 1 AS c; + """ + ) + model = load_sql_based_model(expressions, dialect="tsql") + assert model.enabled