public static string ResolveAlias(TSqlFragment fragment, string alias) { var visitor = new AliasVisitor(); fragment.Accept(visitor); return(visitor.Aliases.ContainsKey(alias) ? visitor.Aliases[alias] : alias); }
/// <inheritdoc /> public override Result Process(bool resolveOccurances, ConstructIndicator category, SyntaxParser parser) { Debug.Assert(category == ConstructIndicator.References, "Metric of class must be same as passed metric"); Debug.Assert(parser.IsParsed, "Source code must be parsed"); Debug.Assert(!parser.Errors.AnyError, "Source code must not have any syntax error"); var visitor = new AliasVisitor(); parser.Ast.VisitMe(visitor); var occurrences = visitor.GetOccurrences(); var hasOccurrence = occurrences.GetEnumerator().MoveNext(); return(new Result(hasOccurrence, occurrences)); }
protected override void ProcessRecord() { using (var reader = new StringReader(Script)) { var parser = new TSql90Parser(false); IList <ParseError> errors; var result = parser.Parse(reader, out errors); if (errors.Count == 0) { var visitor = new TableUsageVisitor(); result.Accept(visitor); visitor.InsertStatements .Where(s => s.InsertSpecification.Target is NamedTableReference).ToList() .ForEach(s => { var target = ((NamedTableReference)s.InsertSpecification.Target); var name = AliasVisitor.ResolveAlias(s, target.SchemaObject.BaseIdentifier.Value); WriteObject(new { Table = name, Action = "Insert" }); } ); visitor.UpdateStatements .Where(s => s.UpdateSpecification.Target is NamedTableReference).ToList() .ForEach(s => { var columns = s.UpdateSpecification.SetClauses .OfType <AssignmentSetClause>() .Where(setClause => setClause.Column != null) .Select(setClause => setClause.Column.MultiPartIdentifier.Identifiers.Last().Value); var target = ((NamedTableReference)s.UpdateSpecification.Target); var name = AliasVisitor.ResolveAlias(s, target.SchemaObject.BaseIdentifier.Value); WriteObject(new { Table = name, Action = "Update", Columns = columns }); } ); visitor.DeleteStatements .Where(s => s.DeleteSpecification.Target is NamedTableReference).ToList() .ForEach(s => { var target = ((NamedTableReference)s.DeleteSpecification.Target); var name = AliasVisitor.ResolveAlias(s, target.SchemaObject.BaseIdentifier.Value); WriteObject(new { Table = name, Action = "Delete" }); } ); } else { foreach (var error in errors) { var errorRecord = new ErrorRecord( new FormatException($"{error.Message} Line:{error.Line}:{error.Column}"), null, ErrorCategory.InvalidArgument, Script ); WriteError(errorRecord); } } } }
public static string ResolveAlias(TSqlFragment fragment, string alias) { var visitor = new AliasVisitor(); fragment.Accept(visitor); return visitor.Aliases.ContainsKey(alias) ? visitor.Aliases[alias] : alias; }