/// <summary> /// Run a sql string through the parser and return a visitor that has traversed and /// extracted information from the AST /// </summary> /// <param name="sql"></param> /// <returns></returns> private static StatsVisitor ProcessSql(string sql) { var parsed = ParseSql(sql); if (parsed.errors.Any()) { parsed.errors.ToList().ForEach(e => Console.WriteLine(e.Message)); return(null); } var visitor = new StatsVisitor(); parsed.sqlTree.Accept(visitor); return(visitor); }
public void AppendResults(string db, string proc, StatsVisitor visitor) { if (visitor == null) { return; } if (visitor.Tables != null) { // write body foreach (var action in visitor.Tables.Keys) { var tables = visitor.Tables[action]; foreach (var table in tables) { var qualifiedTableName = table; if (table.Split('.').Length == 1) { qualifiedTableName = $"{db}.{table}"; } _sbResults.AppendLine($"{visitor.HasDynamicSql},{db},{proc},{action},{qualifiedTableName}"); } } } // write exec records foreach (var procName in visitor.ProcNames) { var qualifiedProcName = procName; if (proc.Split('.').Length == 1) { qualifiedProcName = $"{db}.{procName}"; } _sbResults.AppendLine($"{visitor.HasDynamicSql},{db},{proc},EXECUTE,{qualifiedProcName}"); } }