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