Beispiel #1
0
 public SqlExpr(string value)
 {
     if (value.Trim().ToUpper() == "DEFAULT")
     {
         _value = new Default();
     }
     else
     {
         _value = MiniSqlParserAST.CreateExpr(value);
     }
 }
Beispiel #2
0
        public InsertResultVisitor(int index
                                   , string exprStr
                                   , Identifier aliasName
                                   , DBMSType dbmsType   = DBMSType.Unknown
                                   , bool forSqlAccessor = false)
        {
            _index = index;
            var expr = MiniSqlParserAST.CreateExpr(exprStr, dbmsType, forSqlAccessor);

            _result = new ResultExpr(expr, true, aliasName);
        }
Beispiel #3
0
 public AddOrderByVisitor(IEnumerable <Tuple <string, bool> > orderByItems
                          , DBMSType dbmsType   = DBMSType.Unknown
                          , bool forSqlAccessor = false)
 {
     // KeyValuePair(Of String, Boolean) = (OrderBy項目文字列, ASC)
     _orderBy = new OrderBy();
     foreach (var orderByItem in orderByItems)
     {
         var expr = MiniSqlParserAST.CreateExpr(orderByItem.Item1, dbmsType, forSqlAccessor);
         _orderBy.Add(new OrderingTerm(expr, null
                                       , orderByItem.Item2 ? OrderSpec.Desc : OrderSpec.None
                                       , NullOrder.None));
     }
     _dmbsType = dbmsType;
 }
Beispiel #4
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 = ((PlaceHolderExpr)_value).LabelName;
                if (placeHolders.ContainsKey(placeHolderName))
                {
                    try {
                        _value = MiniSqlParserAST.CreateExpr(placeHolders[placeHolderName]);
                        // 適用したプレースホルダを記録する
                        if (!_placedHolders.ContainsKey(placeHolderName))
                        {
                            _placedHolders.Add(placeHolderName, _value);
                        }
                        return;
                    } catch (SqlSyntaxErrorsException ex) {;
                                                           throw new CannotBuildASTException("Type of placeholder value is mismatched", ex); }
                }
            }

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

            _value.Accept(visitor);

            // 適用したプレースホルダを記録する
            foreach (var placedHolder in visitor.PlacedHolders)
            {
                if (!_placedHolders.ContainsKey(placedHolder.Key))
                {
                    _placedHolders.Add(placedHolder.Key, placedHolder.Value);
                }
            }
        }