Example #1
0
        private Predicate AddPredicate(Predicate where)
        {
            //if(_predicate == null || _predicate.GetType() == typeof(NullPredicate)) {
            if (_predicate == null)
            {
                // 空文字、又はnullであれば構文木に何もしない
                return(where);
            }

            if (where == null)
            {
                where = _predicate;
            }
            else
            {
                Predicate leftPredicate;
                //if(AddWherePredicateVisitor.IsAndOnlyPredicate(where)) {
                //  // AND連言の場合
                //  leftPredicate = where;
                //} else {
                //  // AND連言でない場合はWhere句の式を括弧で囲んでAND節をつなげる
                //  leftPredicate = new BracketedPredicate(where);
                //}
                if (where.GetType() == typeof(OrPredicate))
                {
                    // WHERE句が、A OR Bの場合(A OR B)のように括弧で囲む
                    leftPredicate = new BracketedPredicate(where);
                }
                else
                {
                    // WHERE句が、A AND Bの場合またはAのように2項演算でない場合、括弧で囲まない
                    leftPredicate = where;
                }

                // 追加するPredicateがAND連言でない場合は括弧で囲む
                Predicate rightPredicate;
                //if(AddWherePredicateVisitor.IsAndOnlyPredicate(_predicate)) {
                //  rightPredicate = _predicate;
                //} else {
                //  rightPredicate = new BracketedPredicate(_predicate);
                //}
                if (_predicate.GetType() == typeof(OrPredicate))
                {
                    // OR演算式の場合は式全体を括弧で囲んでAND節をつなげる
                    rightPredicate = new BracketedPredicate(_predicate);
                }
                else
                {
                    rightPredicate = _predicate;
                }

                where = new AndPredicate(leftPredicate, rightPredicate);
            }
            return(where);
        }
Example #2
0
 public override void VisitAfter(AndPredicate andPredicate)
 {
     if (IsPlaceHolderPredicate(andPredicate.Left))
     {
         andPredicate.Left = PlaceInAnd((PlaceHolderPredicate)andPredicate.Left);
     }
     if (IsPlaceHolderPredicate(andPredicate.Right))
     {
         andPredicate.Right = PlaceInAnd((PlaceHolderPredicate)andPredicate.Right);
     }
 }
Example #3
0
        private Predicate ConcatConditions(Stack <Predicate> conditionStack)
        {
            var e = conditionStack.GetEnumerator();

            if (!e.MoveNext())
            {
                return(null);
            }
            Predicate ret = e.Current;

            while (e.MoveNext())
            {
                ret = new AndPredicate(e.Current, ret);
            }
            return(ret);
        }
Example #4
0
 virtual public void Visit(AndPredicate andPredicate)
 {
 }
Example #5
0
 virtual public void VisitBefore(AndPredicate andPredicate)
 {
 }
 public override void VisitAfter(AndPredicate andPredicate)
 {
 }
Example #7
0
 public override void VisitAfter(AndPredicate andPredicate)
 {
     --_predicateLevel;
 }
Example #8
0
 public override void VisitBefore(AndPredicate andPredicate)
 {
     ++_predicateLevel;
 }
 public void Visit(AndPredicate andPredicate)
 {
     _visitor.Visit(andPredicate);
 }
 public void VisitAfter(AndPredicate andPredicate)
 {
     _visitor.VisitAfter(andPredicate);
 }
 public void VisitBefore(AndPredicate andPredicate)
 {
     _visitor.VisitBefore(andPredicate);
 }