Ejemplo n.º 1
0
        protected internal override Node VisitConstSqlExpression([NotNull] ConstSqlExpression node)
        {
            this.Data.SetType(node, new TypeDescriptor(node.Value?.GetType() ?? typeof(object)));
            this.Data.SetScope(node, this.Scope.IsGroupByExpression(node) ? NodeScope.Group : NodeScope.Constant);

            return(node);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Replaces strings and field references to enum values.
        /// </summary>
        /// <param name="node">
        /// The node to replace values with.
        /// </param>
        /// <returns>
        /// The node with replaced.
        /// </returns>
        private Node ReplaceEnumArguments([NotNull] FunctionCallSqlExpression node)
        {
            var arguments = node.Arguments;
            var function  = this.Data.GetFunction(node);

            for (var i = 0; i < function.Arguments.Count; i++)
            {
                var arg   = arguments[i];
                var param = function.Arguments[i].Type.SimplifiedType;

                if (!param.GetTypeInfo().IsEnum)
                {
                    continue;
                }

                var constExpr = arg as ConstSqlExpression;
                var fieldExpr = arg as FieldReferenceSqlExpression;

                ConstSqlExpression enumExpr;

                if (fieldExpr != null && fieldExpr.Source == null)
                {
                    enumExpr = new ConstSqlExpression(Enum.Parse(param, fieldExpr.Name, true));
                }
                else if (constExpr?.Value is int)
                {
                    enumExpr = new ConstSqlExpression(Enum.ToObject(param, constExpr.Value));
                }
                else if (constExpr?.Value is string)
                {
                    enumExpr = new ConstSqlExpression(Enum.Parse(param, (string)constExpr.Value, true));
                }
                else
                {
                    continue;
                }

                arguments = new ReadOnlyCollection <SqlExpressionBase>(
                    new List <SqlExpressionBase>(arguments)
                {
                    [i] = this.Data.CopyValues(arguments[i], enumExpr),
                });
            }

            return(arguments != node.Arguments ? this.Data.CopyValues(node, new FunctionCallSqlExpression(node.Name, arguments)) : node);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Visits a <see cref="ConstSqlExpression"/> expression.
 /// </summary>
 /// <param name="node">
 /// The node.
 /// </param>
 /// <returns>
 /// The node, or a new version of the node.
 /// </returns>
 protected internal virtual Node VisitConstSqlExpression([NotNull] ConstSqlExpression node)
 {
     return(node.VisitChildren(this));
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Visits a <see cref="ConstSqlExpression"/> expression.
 /// </summary>
 /// <param name="node">
 /// The node.
 /// </param>
 /// <returns>
 /// The node, or a new version of the node.
 /// </returns>
 protected internal override Node VisitConstSqlExpression(ConstSqlExpression node)
 {
     return(this.CheckForGroups(node, n => base.VisitConstSqlExpression(n)));
 }
Ejemplo n.º 5
0
            protected internal override Node VisitConstSqlExpression([NotNull] ConstSqlExpression node)
            {
                this.Builder.Append(node.Value == null ? "NULL" : node.Value is string?$"'{node.Value}'" : node.Value);

                return(node);
            }
Ejemplo n.º 6
0
 /// <summary>
 /// Visits a <see cref="ConstSqlExpression"/> expression.
 /// </summary>
 /// <param name="node">
 /// The node.
 /// </param>
 /// <returns>
 /// The node, or a new version of the node.
 /// </returns>
 protected internal override Node VisitConstSqlExpression(ConstSqlExpression node)
 {
     return(this.VisitImplementation(node) ?? base.VisitConstSqlExpression(node));
 }