private void IfSameColumnConditionExistsRemoveCondition(string tableOrAliasName, RbacCondition condition) { bool somethingReplaced = false; foreach (string column in condition.Columns) { RbacWhereClause aWhereClause = WhereClauses.Find(tableOrAliasName, column); if (aWhereClause != null) { //this column is referred as condition in original query ParsedQuery = ParsedQuery.Replace(aWhereClause.WhereClauseString, string.Empty); somethingReplaced = true; } } if (somethingReplaced) { ParsedQuery = ParsedQuery.TrimEnd(); string[] words = new string[] { "and", "where" }; foreach (string word in words) { if ((ParsedQuery.Length > word.Length) && (ParsedQuery.Substring(ParsedQuery.Length - word.Length, word.Length).Equals(word, StringComparison.OrdinalIgnoreCase))) { ParsedQuery = ParsedQuery.Remove(ParsedQuery.Length - word.Length, word.Length); } } } }
public override void Visit(BooleanComparisonExpression exp) { if (exp.FirstExpression is ColumnReferenceExpression) { RbacWhereClause aWhereClause = new RbacWhereClause(); aWhereClause.Literal = RbacWhereClauseLiterals.BooleanExpression; aWhereClause.OnTableAlias = ((ColumnReferenceExpression)exp.FirstExpression).MultiPartIdentifier.Identifiers.First().Value; aWhereClause.OnColumn = ((ColumnReferenceExpression)exp.FirstExpression).MultiPartIdentifier.Identifiers.Last().Value; aWhereClause.ConditionValues.Add(((Literal)exp.SecondExpression).Value); aWhereClause.WhereClauseString = Query.Substring(exp.StartOffset, exp.FragmentLength); WhereClauses.Add(aWhereClause); } }
public override void Visit(InPredicate exp) { if (exp.Expression is ColumnReferenceExpression) { RbacWhereClause aWhereClause = new RbacWhereClause(); aWhereClause.Literal = RbacWhereClauseLiterals.InExpression; aWhereClause.OnTableAlias = ((ColumnReferenceExpression)exp.Expression).MultiPartIdentifier.Identifiers.First().Value; aWhereClause.OnColumn = ((ColumnReferenceExpression)exp.Expression).MultiPartIdentifier.Identifiers.Last().Value; aWhereClause.WhereClauseString = Query.Substring(exp.StartOffset, exp.FragmentLength); foreach (var value in exp.Values) { aWhereClause.ConditionValues.Add(((Literal)value).Value); } WhereClauses.Add(aWhereClause); } }