Deveel.Data.Sql.Expressions.SqlExpressionVisitor.VisitQuery C# (CSharp) Method

VisitQuery() public method

public VisitQuery ( SqlQueryExpression query ) : SqlExpression
query SqlQueryExpression
return SqlExpression
        public virtual SqlExpression VisitQuery(SqlQueryExpression query)
        {
            var selectColumns = new List<SelectColumn>();
            foreach (var column in query.SelectColumns) {
                var newColumn = new SelectColumn(Visit(column.Expression), column.Alias);
                newColumn.InternalName = column.InternalName;
                newColumn.ResolvedName = column.ResolvedName;
                selectColumns.Add(newColumn);
            }

            var newQuery = new SqlQueryExpression(selectColumns);

            if (query.FromClause != null)
                newQuery.FromClause = VisitFromClause(query.FromClause);

            if (query.WhereExpression != null)
                newQuery.WhereExpression = Visit(query.WhereExpression);
            if (query.HavingExpression != null)
                newQuery.HavingExpression = Visit(query.HavingExpression);

            if (query.GroupBy != null)
                newQuery.GroupBy = VisitExpressionList(newQuery.GroupBy.ToArray());

            newQuery.GroupMax = query.GroupMax;
            newQuery.Distinct = query.Distinct;

            if (query.NextComposite != null) {
                var visitedComposite = Visit(query.NextComposite);
                if (visitedComposite.ExpressionType == SqlExpressionType.Query)
                    newQuery.NextComposite = (SqlQueryExpression) visitedComposite;

                newQuery.CompositeFunction = query.CompositeFunction;
                newQuery.IsCompositeAll = query.IsCompositeAll;
            }

            return query;
        }

Usage Example

 public override SqlExpression Accept(SqlExpressionVisitor visitor)
 {
     return(visitor.VisitQuery(this));
 }