@@ -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