private BoundRelation BindNamedTableReference(NamedTableReferenceSyntax node) { var symbols = LookupTable(node.TableName).ToImmutableArray(); if (symbols.Length == 0) { Diagnostics.ReportUndeclaredTable(node); var errorTable = new ErrorTableSymbol(node.TableName.ValueText); var errorAlias = node.Alias == null ? errorTable.Name : node.Alias.Identifier.ValueText; var errorInstance = new TableInstanceSymbol(errorAlias, errorTable, ValueSlotFactory); return(new BoundTableRelation(errorInstance)); } if (symbols.Length > 1) { Diagnostics.ReportAmbiguousTable(node.TableName, symbols); } var table = symbols[0]; var aliasIdentifier = node.Alias != null ? node.Alias.Identifier : node.TableName; var alias = aliasIdentifier.ValueText; var tableInstance = new TableInstanceSymbol(alias, table, ValueSlotFactory); QueryState.IntroducedTables.Add(tableInstance, aliasIdentifier); return(new BoundTableRelation(tableInstance)); }
public TableInstanceSymbol GetDeclaredSymbol(NamedTableReferenceSyntax tableReference) { if (tableReference == null) { throw new ArgumentNullException(nameof(tableReference)); } var result = _bindingResult.GetBoundNode(tableReference) as BoundTableRelation; return(result?.TableInstance); }
private static bool IsRecursiveUsage(SemanticModel semanticModel, NamedTableReferenceSyntax tableReference) { var symbol = semanticModel.GetDeclaredSymbol(tableReference); if (symbol == null) { return(false); } var table = symbol.Table; return(tableReference.Ancestors().OfType <CommonTableExpressionSyntax>().Any(c => semanticModel.GetDeclaredSymbol(c) == table)); }
private void ClassifyNamedTableReference(NamedTableReferenceSyntax node) { var tableInstanceSymbol = _semanticModel.GetDeclaredSymbol(node); if (tableInstanceSymbol == null) { return; } AddClassification(node.TableName, tableInstanceSymbol.Table); if (node.Alias != null) { AddClassification(node.Alias.Identifier, tableInstanceSymbol); } }
public virtual void VisitNamedTableReference(NamedTableReferenceSyntax node) { DefaultVisit(node); }
public static void ReportUndeclaredTable(this ICollection <Diagnostic> diagnostics, NamedTableReferenceSyntax namedTableReference) { var tableName = namedTableReference.TableName; diagnostics.Report(tableName.Span, DiagnosticId.UndeclaredTable, tableName.ValueText); }
public virtual TResult VisitNamedTableReference(NamedTableReferenceSyntax node) { return(DefaultVisit(node)); }