Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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}");
            }
        }