feat(dataflow): model production SQL flow patterns

This commit is contained in:
2026-07-30 18:19:18 +02:00
parent 0664570607
commit e091042948
26 changed files with 2169 additions and 36 deletions
+30 -13
View File
@@ -279,26 +279,43 @@ def _node_expressions(
node: GraphNode,
output_state: SchemaState,
) -> tuple[IrExpression, ...]:
if node.type == "calculate":
sources = [
str(item.get("expression") or "")
for item in node.config.get("calculations", [])
if isinstance(item, dict) and item.get("expression")
]
return tuple(
item
for source in sources
if (item := _ir_expression(source, output_state)) is not None
)
source = node.config.get("expression")
if node.type not in {"expression", "filter.expression"} or not source:
return ()
expression = _ir_expression(str(source), output_state)
return (expression,) if expression is not None else ()
def _ir_expression(
source: str,
output_state: SchemaState,
) -> IrExpression | None:
try:
parsed = parse_expression(str(source))
except ExpressionError:
return ()
return None
inferred = infer_expression_type(parsed, output_state.types)
return (
IrExpression(
source=parsed.source,
columns=parsed.columns,
result_type=_data_type(inferred),
semantic_hash=_hash_payload(
{
"dialect": "duckdb",
"source": parsed.sql(),
"result_type": inferred,
}
),
return IrExpression(
source=parsed.source,
columns=parsed.columns,
result_type=_data_type(inferred),
semantic_hash=_hash_payload(
{
"dialect": "duckdb",
"source": parsed.sql(),
"result_type": inferred,
}
),
)