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