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); }
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); } }
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); }
virtual public void Visit(AndPredicate andPredicate) { }
virtual public void VisitBefore(AndPredicate andPredicate) { }
public override void VisitAfter(AndPredicate andPredicate) { }
public override void VisitAfter(AndPredicate andPredicate) { --_predicateLevel; }
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); }