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(ProgrammingAndViewSchemaTypes); var whereClauseVisitor = new WhereClauseVisitor(); fragment.Accept(whereClauseVisitor); foreach (var whereClause in whereClauseVisitor.Statements) { var booleanComparisonVisitor = new BooleanComparisonVisitor(); whereClause.Accept(booleanComparisonVisitor); var offenders = booleanComparisonVisitor.NotIgnoredStatements(RuleId) .Where(c => c.ComparisonType == BooleanComparisonType.NotEqualToBrackets || c.ComparisonType == BooleanComparisonType.NotEqualToExclamation); var sqlObjName = ruleExecutionContext.GetObjectName(sqlObj); problems.AddRange(offenders.Select(t => new SqlRuleProblem(Message, sqlObj, t))); } return(problems); }
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(ProgrammingAndViewSchemaTypes); var selectStatementVisitor = new SelectStatementVisitor(); fragment.Accept(selectStatementVisitor); foreach (var select in selectStatementVisitor.Statements) { var booleanCompareVisitor = new BooleanComparisonVisitor(); select.Accept(booleanCompareVisitor); var offenders = from cmp in booleanCompareVisitor.NotIgnoredStatements(RuleId) where TestCompare(cmp) select cmp; problems.AddRange(offenders.Select(t => new SqlRuleProblem(Message, sqlObj, t))); } var actionStatementVisitor = new ActionStatementVisitor(); fragment.Accept(actionStatementVisitor); foreach (var action in actionStatementVisitor.Statements) { var booleanCompareVisitor = new BooleanComparisonVisitor(); action.Accept(booleanCompareVisitor); var offenders = from cmp in booleanCompareVisitor.NotIgnoredStatements(RuleId) where TestCompare(cmp) select cmp; problems.AddRange(offenders.Select(t => new SqlRuleProblem(Message, sqlObj, t))); } return(problems); }