public List<TSqlFragment> GetFragmentChildren(TSqlFragment parentFragment) { oVisitorAll visitor = new oVisitorAll(); parentFragment.AcceptChildren(visitor); return visitor.Fragments; }
public IEnumerable <TableReference> GetTableReferences(TSqlFragment tsqlFragment) { var tableReferenceVisitor = new TableReferenceVisitor(); tsqlFragment.AcceptChildren(tableReferenceVisitor); foreach (var tableReference in tableReferenceVisitor.TableReferences) { yield return(tableReference); } }
public IEnumerable <Literal> GetLiteral(TSqlFragment tsqlFragment) { var literalVisitor = new LiteralVisitor(); tsqlFragment.AcceptChildren(literalVisitor); foreach (var literal in literalVisitor.Literals) { yield return(literal); } }
public IEnumerable <FromClause> GetFromClauses(TSqlFragment tsqlFragment) { var fromClauseVisitor = new FromClauseVisitor(); tsqlFragment.AcceptChildren(fromClauseVisitor); foreach (var fromClause in fromClauseVisitor.FromClauses) { yield return(fromClause); } }
public IEnumerable <ColumnReferenceExpression> GetColumnReferenceExpressions(TSqlFragment tsqlFragment) { var columnReferenceExpressionVisitor = new ColumnReferenceExpressionVisitor(); tsqlFragment.AcceptChildren(columnReferenceExpressionVisitor); foreach (var columnReferenceExpression in columnReferenceExpressionVisitor.ColumnReferenceExpressions) { yield return(columnReferenceExpression); } }
private void FindColumnReferences(TSqlFragment node) { var columnReferenceVisitor = new ColumnReferenceVisitor(); node.AcceptChildren(columnReferenceVisitor); if (columnReferenceVisitor.ColumnReferenceFound) { childCallback(node); } }
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)); }
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; }
/// <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(); }
/// <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); }