Exemple #1
0
        /// <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));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 /// <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));
 }
Exemple #4
0
        public void AddAndPredicate(SqlPredicate predicate)
        {
            var visitor = new AddWherePredicateVisitor(predicate.Predicate);

            this.GetStmt().Accept(visitor);
        }