/// <summary> /// Performs analysis and returns a list of problems detected /// </summary> /// <param name="ruleExecutionContext">Contains the schema model and model element to analyze</param> /// <returns> /// The problems detected by the rule in the given element /// </returns> public override IList <SqlRuleProblem> Analyze(SqlRuleExecutionContext ruleExecutionContext) { var problems = new List <SqlRuleProblem>(); var sqlObj = ruleExecutionContext.ModelElement; if (sqlObj == null || sqlObj.IsWhiteListed()) { return(problems); } var fragment = ruleExecutionContext.ScriptFragment.GetFragment( typeof(CreateProcedureStatement), typeof(CreateTriggerStatement)); var visitor = new PredicateVisitor(); fragment.Accept(visitor); var predicates = from o in visitor.Statements where o.Options == SetOptions.NoCount && o.IsOn select o; var createToken = fragment.ScriptTokenStream.FirstOrDefault(t => t.TokenType == TSqlTokenType.Create); if (!predicates.Any() && Ignorables.ShouldNotIgnoreRule(fragment.ScriptTokenStream, RuleId, createToken.Line)) { problems.Add(new SqlRuleProblem(Message, sqlObj)); } return(problems); }
/// <summary> /// Translates the specified expression. /// </summary> /// <param name="expression">The expression.</param> /// <param name="queryId">The query id.</param> /// <returns></returns> public static string Translate(Expression expression, out int?queryId) { var visitor = new PredicateVisitor(); visitor.Visit(expression); queryId = visitor.QueryId; return(visitor.FilterExpression); }
public override void Visit(WhereClause node) { var predicateExpressionVisitor = new PredicateVisitor(); node.Accept(predicateExpressionVisitor); multiClauseQuery = predicateExpressionVisitor.PredicatesFound; var childVisitor = new FunctionVisitor(VisitorCallback, multiClauseQuery); node.Accept(childVisitor); }
public override void Visit(JoinTableReference node) { var predicateExpressionVisitor = new PredicateVisitor(); node.AcceptChildren(predicateExpressionVisitor); var multiClauseQuery = predicateExpressionVisitor.PredicatesFound; var joinVisitor = new JoinQueryVisitor(VisitorCallback, multiClauseQuery); node.AcceptChildren(joinVisitor); }
/// <summary> /// Aligns the specified expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns></returns> public static Expression Align(Expression expression) { var binaryExpressionVisitor = new PredicateVisitor(); return(binaryExpressionVisitor.Visit(expression)); }