public List<TSqlFragment> GetFragmentChildren(TSqlFragment parentFragment)
        {
            oVisitorAll visitor = new oVisitorAll();

            parentFragment.AcceptChildren(visitor);

            return visitor.Fragments;
        }
Exemple #2
0
        public IEnumerable <TableReference> GetTableReferences(TSqlFragment tsqlFragment)
        {
            var tableReferenceVisitor = new TableReferenceVisitor();

            tsqlFragment.AcceptChildren(tableReferenceVisitor);

            foreach (var tableReference in tableReferenceVisitor.TableReferences)
            {
                yield return(tableReference);
            }
        }
Exemple #3
0
        public IEnumerable <Literal> GetLiteral(TSqlFragment tsqlFragment)
        {
            var literalVisitor = new LiteralVisitor();

            tsqlFragment.AcceptChildren(literalVisitor);

            foreach (var literal in literalVisitor.Literals)
            {
                yield return(literal);
            }
        }
Exemple #4
0
        public IEnumerable <FromClause> GetFromClauses(TSqlFragment tsqlFragment)
        {
            var fromClauseVisitor = new FromClauseVisitor();

            tsqlFragment.AcceptChildren(fromClauseVisitor);

            foreach (var fromClause in fromClauseVisitor.FromClauses)
            {
                yield return(fromClause);
            }
        }
Exemple #5
0
        public IEnumerable <ColumnReferenceExpression> GetColumnReferenceExpressions(TSqlFragment tsqlFragment)
        {
            var columnReferenceExpressionVisitor = new ColumnReferenceExpressionVisitor();

            tsqlFragment.AcceptChildren(columnReferenceExpressionVisitor);

            foreach (var columnReferenceExpression in columnReferenceExpressionVisitor.ColumnReferenceExpressions)
            {
                yield return(columnReferenceExpression);
            }
        }
Exemple #6
0
            private void FindColumnReferences(TSqlFragment node)
            {
                var columnReferenceVisitor = new ColumnReferenceVisitor();

                node.AcceptChildren(columnReferenceVisitor);

                if (columnReferenceVisitor.ColumnReferenceFound)
                {
                    childCallback(node);
                }
            }
Exemple #7
0
        private void Foo(TSqlFragment node)
        {
            var childBeginEndVisitor = new ChildBeginEndVisitor();

            node.AcceptChildren(childBeginEndVisitor);

            if (childBeginEndVisitor.BeginEndBlockFound)
            {
                return;
            }

            errorCallback(RULE_NAME, RULE_TEXT, node.StartLine, GetColumnNumber(node));
        }
Exemple #8
0
        public IEnumerable <BooleanComparisonExpression> GetBooleanComparisonExpressions(TSqlFragment tsqlFragment)
        {
            var booleanComparisonExpressionVisitor = new BooleanComparisonExpressionVisitor();

            tsqlFragment.AcceptChildren(booleanComparisonExpressionVisitor);

            foreach (var booleanComparisonExpression in booleanComparisonExpressionVisitor.BooleanComparisonExpressions)
            {
                var columnReferenceExpressionVisitor = new ColumnReferenceExpressionVisitor();

                booleanComparisonExpression.AcceptChildren(columnReferenceExpressionVisitor);

                yield return(booleanComparisonExpression);
            }
        }
        public List<TSqlFragment> GetFragmentChildren(TSqlFragment parentFragment, oVisitorBase visitor, bool recurseChildren = false)
        {
            parentFragment.AcceptChildren(visitor);

            List<TSqlFragment> children = visitor.Fragments;
            List<TSqlFragment> grandChildren;

            if (recurseChildren)
            {
                foreach (TSqlFragment f in children)
                {
                    grandChildren = GetFragmentChildren(f, visitor, recurseChildren);

                    if ((grandChildren != null) && (grandChildren.Count > 0))
                        children.AddRange(grandChildren);
                }
            }

            return children;
        }
Exemple #10
0
        /// <summary>
        /// This method will parameterize the given SqlCommand.
        /// Any single literal on the RHS of a declare statement will be parameterized
        /// Any other literals will be ignored
        /// </summary>
        /// <param name="commandToParameterize">Command that will need to be parameterized</param>
        public static void Parameterize(this DbCommand commandToParameterize)
        {
            TSqlFragment     rootFragment = GetAbstractSyntaxTree(commandToParameterize);
            TsqlMultiVisitor multiVisitor = new TsqlMultiVisitor(isCodeSenseRequest: false); // Use the vistor pattern to examine the parse tree

            rootFragment.AcceptChildren(multiVisitor);                                       // Now walk the tree

            //reformat and validate the transformed command
            SqlScriptGenerator scriptGenerator = GetScriptGenerator();

            scriptGenerator.GenerateScript(rootFragment, out string formattedSQL);

            if (!string.IsNullOrEmpty(formattedSQL))
            {
                commandToParameterize.CommandText = formattedSQL;
            }

            commandToParameterize.Parameters.AddRange(multiVisitor.Parameters.ToArray());

            multiVisitor.Reset();
        }
Exemple #11
0
        /// <summary>
        /// Parses the given script to provide message, warning, error.
        /// </summary>
        /// <param name="scriptToParse">Script that will be parsed</param>
        /// <param name="telemetryManager">Used to emit telemetry events</param>
        /// <returns></returns>
        public static IList <ScriptFileMarker> CodeSense(string scriptToParse)
        {
            if (scriptToParse == null)
            {
                return(EmptyCodeSenseItemList);
            }

            int CurrentScriptlength = scriptToParse.Length;

            if (CurrentScriptlength > maxStringLength)
            {
                ScriptFileMarker maxStringLengthCodeSenseItem = new ScriptFileMarker
                {
                    Level        = ScriptFileMarkerLevel.Error,
                    Message      = SR.ScriptTooLarge(maxStringLength, CurrentScriptlength),
                    ScriptRegion = new ScriptRegion
                    {
                        // underline first row in the text
                        StartLineNumber   = 1,
                        StartColumnNumber = 1,
                        EndLineNumber     = 2,
                        EndColumnNumber   = 1
                    }
                };

                return(new ScriptFileMarker[] { maxStringLengthCodeSenseItem });
            }

            TSqlFragment     rootFragment = GetAbstractSyntaxTree(scriptToParse);
            TsqlMultiVisitor multiVisitor = new TsqlMultiVisitor(isCodeSenseRequest: true); // Use the vistor pattern to examine the parse tree

            rootFragment.AcceptChildren(multiVisitor);                                      // Now walk the tree

            if (multiVisitor.CodeSenseErrors != null && multiVisitor.CodeSenseErrors.Count != 0)
            {
                multiVisitor.CodeSenseMessages.AddRange(multiVisitor.CodeSenseErrors);
            }

            return(multiVisitor.CodeSenseMessages);
        }