Beispiel #1
0
 public AddWherePredicateVisitor(string predicateStr
                                 , DBMSType dbmsType   = DBMSType.Unknown
                                 , bool forSqlAccessor = false)
 {
     if (string.IsNullOrEmpty(predicateStr))
     {
         _predicate = null;
     }
     else
     {
         _predicate = MiniSqlParserAST.CreatePredicate(predicateStr, dbmsType, forSqlAccessor);
     }
 }
Beispiel #2
0
        /// <summary>
        /// プレースホルダに値を適用する
        /// </summary>
        /// <param name="placeHolders"></param>
        /// <remarks></remarks>
        public void Place(Dictionary <string, string> placeHolders)
        {
            if (_placedHolders == null)
            {
                _placedHolders = new Dictionary <string, INode>();
            }

            // プレースホルダノード単体の場合はReplacePlaceHoldersで置き換えられない
            if (this.IsPlaceHolderOnly)
            {
                var placeHolderName = ((PlaceHolderPredicate)_predicate).LabelName;
                if (placeHolders.ContainsKey(placeHolderName))
                {
                    try {
                        _predicate = MiniSqlParserAST.CreatePredicate(placeHolders[placeHolderName]);
                        // 適用したプレースホルダを記録する
                        if (!_placedHolders.ContainsKey(placeHolderName))
                        {
                            _placedHolders.Add(placeHolderName, _predicate);
                        }
                        return;
                    } catch (SqlSyntaxErrorsException ex) {;
                                                           throw new CannotBuildASTException("Type of placeholder value is mismatched", ex); }
                }
            }

            // プレースホルダに値を適用する
            var visitor = new ReplacePlaceHolders(placeHolders);

            _predicate.Accept(visitor);

            // 適用したプレースホルダを記録する
            foreach (var placedHolder in visitor.PlacedHolders)
            {
                if (!_placedHolders.ContainsKey(placedHolder.Key))
                {
                    _placedHolders.Add(placedHolder.Key, placedHolder.Value);
                }
            }
        }
Beispiel #3
0
 public SqlPredicate(string predicate)
 {
     _predicate = MiniSqlParserAST.CreatePredicate(predicate);
 }