private BoundRelation BindDerivedTableReference(DerivedTableReferenceSyntax node) { // TODO: Ensure query has no ORDER BY unless TOP is also specified var query = BindQuery(node.Query); var namedQueryColumns = query.OutputColumns.Where(c => !string.IsNullOrEmpty(c.Name)); var columns = new List <ColumnSymbol>(); var valueSlotFromColumn = new Dictionary <ColumnSymbol, ValueSlot>(); foreach (var queryColumn in namedQueryColumns) { var columnSymbol = new ColumnSymbol(queryColumn.Name, queryColumn.Type); columns.Add(columnSymbol); valueSlotFromColumn.Add(columnSymbol, queryColumn.ValueSlot); } var derivedTable = new DerivedTableSymbol(columns); var valueSlotFactory = new Func <TableInstanceSymbol, ColumnSymbol, ValueSlot>((ti, c) => valueSlotFromColumn[c]); var derivedTableInstance = new TableInstanceSymbol(node.Name.ValueText, derivedTable, valueSlotFactory); var boundTableReference = new BoundDerivedTableRelation(derivedTableInstance, query.Relation); QueryState.IntroducedTables.Add(derivedTableInstance, node.Name); return(boundTableReference); }
public TableInstanceSymbol GetDeclaredSymbol(DerivedTableReferenceSyntax tableReference) { if (tableReference == null) { throw new ArgumentNullException(nameof(tableReference)); } var result = _bindingResult.GetBoundNode(tableReference) as BoundDerivedTableRelation; return(result?.TableInstance); }
private void ClassifyDerivedTableReference(DerivedTableReferenceSyntax node) { ClassifyNode(node.Query); var tableInstanceSymbol = _semanticModel.GetDeclaredSymbol(node); if (tableInstanceSymbol != null) { AddClassification(node.Name, tableInstanceSymbol); } }
public AddAsToDerivedTableCodeAction(DerivedTableReferenceSyntax node) : base(node.SyntaxTree) { _node = node; }
public virtual void VisitDerivedTableReference(DerivedTableReferenceSyntax node) { DefaultVisit(node); }
public virtual TResult VisitDerivedTableReference(DerivedTableReferenceSyntax node) { return(DefaultVisit(node)); }