diff --git a/core/engine/src/nodes/expression/mod.rs b/core/engine/src/nodes/expression/mod.rs index c47cc680..40fd46ed 100644 --- a/core/engine/src/nodes/expression/mod.rs +++ b/core/engine/src/nodes/expression/mod.rs @@ -39,6 +39,10 @@ impl NodeHandler for ExpressionNodeHandler { .with_node_context(&ctx, |_| { format!(r#"Failed to evaluate expression: "{}""#, &expression.value) })?; + let value = match expression.value.contains('$') { + true => value.deep_clone(), + false => value, + }; ctx.trace(|trace| { trace.insert( Rc::from(&*expression.key), diff --git a/core/engine/src/workspace/graph/analysis.rs b/core/engine/src/workspace/graph/analysis.rs index f019e9c3..eb5c7ef8 100644 --- a/core/engine/src/workspace/graph/analysis.rs +++ b/core/engine/src/workspace/graph/analysis.rs @@ -795,7 +795,7 @@ impl<'a> GraphAnalyzer<'a> { let row_scope = Self::scope_with( scope, &[ - ("$", dollar.shallow_clone()), + ("$", dollar.depth_clone(usize::MAX)), (NODES_KEY, self.nodes_scope.shallow_clone()), ], ); @@ -807,6 +807,7 @@ impl<'a> GraphAnalyzer<'a> { ExpressionKind::Standard, &row_scope, ); + let resolved = resolved.depth_clone(usize::MAX); output.insert_at_path(&row.key, &resolved, true); dollar.insert_at_path(&row.key, &resolved, true); row_types.insert(row.id.clone(), resolved);