Example #1
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);
                    }
                }
            }
        }