in EntityFramework/src/Statements/SelectStatement.cs [198:261]
List<ColumnFragment> GetDefaultColumnsForFragment(InputFragment input)
{
List<ColumnFragment> columns = new List<ColumnFragment>();
if (input is TableFragment)
{
return GetDefaultColumnsForTable(input as TableFragment);
}
else if (input is JoinFragment || input is UnionFragment)
{
Debug.Assert(input.Left != null);
if (input is UnionFragment)
{
generator.Ops.Push(OpType.Union);
}
columns = GetDefaultColumnsForFragment(input.Left);
if (input is JoinFragment && input.Right != null)
{
List<ColumnFragment> right = GetDefaultColumnsForFragment(input.Right);
columns.AddRange(right);
}
if (input is UnionFragment)
{
generator.Ops.Pop();
}
}
else if (input is SelectStatement)
{
SelectStatement select = input as SelectStatement;
foreach (ColumnFragment cf in select.Columns)
{
ColumnFragment newColumn = new ColumnFragment(cf.TableName,
string.IsNullOrEmpty(cf.ColumnAlias) ? cf.ActualColumnName : cf.ColumnAlias
);
if (generator.GetTopOp() == OpType.Join)
{
newColumn.ColumnAlias = cf.ColumnAlias;
newColumn.PushInput(cf.ActualColumnName);
if (cf.TableName != null)
newColumn.PushInput(cf.TableName);
}
else
{
newColumn.PushInput(cf.ActualColumnName);
if (cf.TableName != null && cf.ColumnAlias == null)
newColumn.PushInput(cf.TableName);
}
if (select.Name != null)
{
newColumn.PushInput(select.Name); // add the scope
}
columns.Add(newColumn);
}
return columns;
}
else
throw new NotImplementedException();
if (!String.IsNullOrEmpty(input.Name) && input.Name != From.Name)
foreach (ColumnFragment c in columns)
{
c.PushInput(input.Name);
}
return columns;
}