Пример #1
0
            public static string ResolveAlias(TSqlFragment fragment, string alias)
            {
                var visitor = new AliasVisitor();

                fragment.Accept(visitor);

                return(visitor.Aliases.ContainsKey(alias)
                    ? visitor.Aliases[alias]
                    : alias);
            }
Пример #2
0
        /// <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));
        }
Пример #3
0
        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;
            }