protected override ISqlNode OnChildNode(ISqlNode node) { if (node.NodeName == "sql_query_expression") { QueryExpression = node as SqlQueryExpressionNode; } else if (node.NodeName == "order_opt") { GetOrderBy(node); } return base.OnChildNode(node); }
/// <inheritdoc/> protected override ISqlNode OnChildNode(ISqlNode node) { if (node is SqlQueryExpressionNode) { Query = (SqlQueryExpressionNode)node; } else if (node.NodeName == "select_as_opt") { Alias = (IdentifierNode)node.ChildNodes.FirstOrDefault(); } return base.OnChildNode(node); }
public virtual void VisitQueryExpression(SqlQueryExpressionNode node) { }
private IEnumerable<SelectColumn> GetSelectColumns(SqlQueryExpressionNode node) { if (node.IsAll) { return new[] {new SelectColumn(SqlExpression.Reference(new ObjectName("*")))}; } var items = new List<SelectColumn>(); foreach (var item in node.SelectItems) { SqlExpression exp; if (item.Name != null) { exp = SqlExpression.Reference(ObjectName.Parse(item.Name.Name)); } else if (item.Expression != null) { exp = Build(item.Expression); } else { throw new InvalidOperationException(); } string alias = null; if (item.Alias != null) alias = item.Alias.Text; items.Add(new SelectColumn(exp, alias)); } return items.ToArray(); }
public override void VisitQueryExpression(SqlQueryExpressionNode node) { var selectColumns = GetSelectColumns(node); var exp = new SqlQueryExpression(selectColumns); if (node.FromClause != null) { SetFromClause(exp.FromClause, node.FromClause); } if (node.WhereExpression != null) { exp.WhereExpression = Build(node.WhereExpression); } if (node.GroupBy != null) { var groupBy = new List<SqlExpression>(); if (node.GroupBy.GroupExpressions != null) groupBy.AddRange(node.GroupBy.GroupExpressions.Select(Build)); exp.GroupBy = groupBy.ToList(); var having = node.GroupBy.HavingExpression; if (having != null) exp.HavingExpression = Build(having); } if (node.Composite != null) { var compositeExp = Build(node.Composite.QueryExpression); exp.NextComposite = compositeExp as SqlQueryExpression; exp.IsCompositeAll = node.Composite.IsAll; exp.CompositeFunction = GetCompositeFunction(node.Composite.CompositeFunction); } outputExpression = exp; }