public static Variable SetVariable(this IContext context, string variableName, SqlExpression value) { var currentContext = context; while (currentContext != null) { if (currentContext is IVariableScope) { var scope = (IVariableScope)currentContext; if (scope.HasVariable(variableName)) { // TODO: support also in-context evaluation var constantValue = value.EvaluateToConstant(null, context.VariableResolver()); return(scope.SetVariable(variableName, constantValue)); } } currentContext = currentContext.Parent; } currentContext = context; while (currentContext != null) { if (currentContext is IVariableScope) { var scope = (IVariableScope)currentContext; // TODO: support also in-context evaluation var constantValue = value.EvaluateToConstant(null, context.VariableResolver()); return(scope.SetVariable(variableName, constantValue)); } currentContext = currentContext.Parent; } // not found in the hierarchy return(null); }