File: SqlClient\Query\SqlGatherConsumedAliases.cs
Project: ndp\fx\src\DLinq\Dlinq\System.Data.Linq.csproj (System.Data.Linq)
using System;
using System.Collections.Generic;
using System.Text;
 
namespace System.Data.Linq.SqlClient {
    /// <summary>
    /// Walk a tree and return the set of unique aliases it consumes.
    /// </summary>
    class SqlGatherConsumedAliases {
        internal static HashSet<SqlAlias> Gather(SqlNode node) {
            Gatherer g = new Gatherer();
            g.Visit(node);
            return g.Consumed;
        }
 
        private class Gatherer : SqlVisitor {
            internal HashSet<SqlAlias> Consumed = new HashSet<SqlAlias>();
 
            internal void VisitAliasConsumed(SqlAlias a) {
                Consumed.Add(a);
            }
            internal override SqlExpression VisitColumn(SqlColumn col) {
                VisitAliasConsumed(col.Alias);
                VisitExpression(col.Expression);
                return col;
            }
            internal override SqlExpression VisitColumnRef(SqlColumnRef cref) {
                VisitAliasConsumed(cref.Column.Alias);
                return cref;
            }
        }
    }
}