Skip to content

Commit 6b6d677

Browse files
committed
Fix: simplify complex expressions when validating boolean pydantic fields
1 parent c6a0be9 commit 6b6d677

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

sqlmesh/core/model/common.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,18 @@ def parse_expression(
336336

337337

338338
def parse_bool(v: t.Any) -> bool:
339-
if isinstance(v, exp.Boolean):
340-
return v.this
341339
if isinstance(v, exp.Expression):
340+
if not isinstance(v, exp.Boolean):
341+
from sqlglot.optimizer.simplify import simplify
342+
343+
# Try to reduce expressions like (1 = 1) (see: T-SQL boolean generation)
344+
v = simplify(v)
345+
346+
if isinstance(v, exp.Boolean):
347+
return v.this
348+
342349
return str_to_bool(v.name)
350+
343351
return str_to_bool(str(v or ""))
344352

345353

tests/core/test_model.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10445,7 +10445,7 @@ def test_invalid_sql_model_query() -> None:
1044510445
load_sql_based_model(expressions)
1044610446

1044710447

10448-
def test_query_label_and_authorization_macro():
10448+
def test_query_label_and_authorization_macro() -> None:
1044910449
@macro()
1045010450
def test_query_label_macro(evaluator):
1045110451
return "[('key', 'value')]"
@@ -10478,3 +10478,19 @@ def test_authorization_macro(evaluator):
1047810478
"query_label": d.parse_one("[('key', 'value')]"),
1047910479
"authorization": d.parse_one("'test_authorization'"),
1048010480
}
10481+
10482+
10483+
def test_boolean_property_validation() -> None:
10484+
expressions = d.parse(
10485+
"""
10486+
MODEL (
10487+
name db.table,
10488+
enabled @IF(TRUE, TRUE, FALSE),
10489+
dialect tsql
10490+
);
10491+
10492+
SELECT 1 AS c;
10493+
"""
10494+
)
10495+
model = load_sql_based_model(expressions, dialect="tsql")
10496+
assert model.enabled

0 commit comments

Comments
 (0)