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);
        }