/// <summary> /// 論理式条件を追加する /// </summary> /// <param name="sqlExp"></param> /// <remarks> /// AddAndExpVisitorは走査対象にPredicate単体を指定された場合、 /// そのPredicateを置き換えることはできないので利用できなかった. /// </remarks> public SqlPredicate And(SqlPredicate predicate) { //predicateがNullの場合、処理を終了する if (predicate == null || predicate.IsEmpty) { return(this); } else if (_predicate.GetType() == typeof(NullPredicate)) { return(new SqlPredicate(predicate._predicate)); } Predicate leftPredicate; if (_predicate.GetType() == typeof(OrPredicate)) { leftPredicate = new BracketedPredicate(_predicate); } else { leftPredicate = _predicate; } Predicate rightPredicate; if (predicate._predicate.GetType() == typeof(OrPredicate)) { rightPredicate = new BracketedPredicate(predicate._predicate); } else { rightPredicate = predicate._predicate; } // PlacedHoldersをマージする Dictionary <string, INode> newPlacedHolders = null; if (_placedHolders == null) { newPlacedHolders = predicate._placedHolders; } else if (predicate._placedHolders == null) { newPlacedHolders = _placedHolders; } else { foreach (var placedHolder in predicate._placedHolders) { if (!_placedHolders.ContainsKey(placedHolder.Key)) { _placedHolders.Add(placedHolder.Key, placedHolder.Value); } } } return(new SqlPredicate(new AndPredicate(leftPredicate, rightPredicate), newPlacedHolders)); }
public List <Tuple <SqlPredicate, SqlBuilders> > GetIfBranches() { var ret = new List <Tuple <SqlPredicate, SqlBuilders> >(); var stmt = this.GetStmt(); var visitor = new GetIfConditionsVisitor(); stmt.Accept(visitor); for (int i = 0; i < visitor.Count; ++i) { var sqlPredicate = new SqlPredicate(visitor.Conditions[i]); var sqlBuilders = new SqlBuilders(visitor.StmtsList[i]); ret.Add(Tuple.Create(sqlPredicate, sqlBuilders)); } return(ret); }
/// <summary> /// Column列とSqlExprとの一致条件を作成する /// </summary> /// <param name="columnName"></param> /// <param name="sqlExpr"></param> /// <returns></returns> public static SqlPredicate CreateEqualExpr(string columnName, SqlExpr sqlExpr) { return(SqlPredicate.CreateEqualExpr(new Column(columnName), sqlExpr)); }
public void AddAndPredicate(SqlPredicate predicate) { var visitor = new AddWherePredicateVisitor(predicate.Predicate); this.GetStmt().Accept(visitor); }