Skip to content

Commit 64c7ced

Browse files
committed
Fix: parenthesize filters, always qualify step N with 's' alias
1 parent d7fccac commit 64c7ced

1 file changed

Lines changed: 6 additions & 7 deletions

File tree

sidemantic/sql/generator.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2852,11 +2852,9 @@ def _normalize_expr_for_subquery(sql_expr: str, table_alias: str, qualify_bare:
28522852
filter_clause = ""
28532853
filter_clause_s = ""
28542854
if normalized_filters:
2855-
filter_clause = " AND " + " AND ".join(normalized_filters)
2856-
qualified = [
2857-
_normalize_expr_for_subquery(f, "s" if model.sql else "", qualify_bare=True) for f in normalized_filters
2858-
]
2859-
filter_clause_s = " AND " + " AND ".join(qualified)
2855+
filter_clause = " AND " + " AND ".join(f"({f})" for f in normalized_filters)
2856+
qualified = [_normalize_expr_for_subquery(f, "s", qualify_bare=True) for f in normalized_filters]
2857+
filter_clause_s = " AND " + " AND ".join(f"({q})" for q in qualified)
28602858

28612859
# Resolve dimension columns for GROUP BY support
28622860
dim_entries: list[tuple[str, str]] = []
@@ -2920,8 +2918,9 @@ def _normalize_expr_for_subquery(sql_expr: str, table_alias: str, qualify_bare:
29202918
)
29212919
else:
29222920
# Normalize step predicate: rewrite {model} / model-name prefixes
2923-
# for step N scope (SQL models alias as "s", table models strip prefix)
2924-
norm_step = _normalize_expr_for_subquery(step_expr, "s" if model.sql else "", qualify_bare=True)
2921+
# for step N scope. Source is always aliased as "s" (both SQL and
2922+
# table-backed models), so qualify_bare with "s" unconditionally.
2923+
norm_step = _normalize_expr_for_subquery(step_expr, "s", qualify_bare=True)
29252924

29262925
# Step N: join source to step N-1, only consider events at or after prior step
29272926
prev = f"step_{i - 1}"

0 commit comments

Comments
 (0)