コード例 #1
0
ファイル: SqlQueryParser.cs プロジェクト: radtek/aarbac
        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);
                    }
                }
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
ファイル: InPredicateVisitor.cs プロジェクト: radtek/aarbac
        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);
            }
        }