コード例 #1
0
ファイル: SqlPredicate.cs プロジェクト: radtek/SqlAccessor
        public override string ToString()
        {
            var stringifier = new CompactStringifier(144, false);

            _predicate.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #2
0
ファイル: SqlBuilder.cs プロジェクト: radtek/SqlAccessor
        public string ToString(IndentType indentType)
        {
            var      stmt = this.GetStmt();
            IVisitor stringifier;

            if (indentType == IndentType.Compact)
            {
                stringifier = new CompactStringifier(144);
            }
            else if (indentType == IndentType.Beautiful)
            {
                stringifier = new BeautifulStringifier(
                    144
                    , 4
                    , BeautifulStringifier.KeywordCase.Upper
                    , BeautifulStringifier.JoinIndentType.A, true);
            }
            else
            {
                throw new InvalidEnumArgumentException("Undefined IndentType is used"
                                                       , (int)indentType
                                                       , typeof(IndentType));
            }

            stmt.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #3
0
ファイル: SqlPredicate.cs プロジェクト: radtek/SqlAccessor
        public Dictionary <string, string> GetAllPlaceHolders()
        {
            var ret = new Dictionary <string, string>();
            var getPlaceHoldersVisitor = new GetPlaceHoldersVisitor();

            _predicate.Accept(getPlaceHoldersVisitor);
            // 未適用プレースホルダと適用済みプレースホルダをマージする
            foreach (var unplacedHolder in getPlaceHoldersVisitor.GetUnPlacedHolders)
            {
                ret.Add(unplacedHolder, "");
            }
            if (_placedHolders == null)
            {
                return(ret);
            }
            foreach (var placedHolder in _placedHolders)
            {
                if (!ret.ContainsKey(placedHolder.Key))
                {
                    var stringifier = new CompactStringifier(144);
                    placedHolder.Value.Accept(stringifier);
                    ret.Add(placedHolder.Key, stringifier.ToString());
                }
            }
            return(ret);
        }
コード例 #4
0
        private string NormalizeOrderBy(string sql, DBMSType dbmsType = DBMSType.Unknown, bool ignoreCase = true)
        {
            var ast     = MiniSqlParserAST.CreateStmts(sql, dbmsType);
            var visitor = new NormalizeOrderByVisitor(_tableColumns, ignoreCase);

            ast.Accept(visitor);
            var stringifier = new CompactStringifier(4098, true);

            ast.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #5
0
ファイル: Tester.cs プロジェクト: radtek/SqlAccessor
        public static string Compact(string inputText
                                     , DBMSType dbmsType
                                     , Dictionary <string, string> placeHolders = null)
        {
            var ast = MiniSqlParserAST.CreateStmts(inputText, dbmsType);
            var placeHolderNodes = SetPlaceHoldersVisitor.ConvertPlaceHolders(placeHolders);
            var stringifier      = new CompactStringifier(64, true, placeHolderNodes);

            ast.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #6
0
        private string AddPredicate(string sql, string predicateStr)
        {
            var ast = MiniSqlParserAST.CreateStmts(sql);

            var visitor = new AddWherePredicateVisitor(predicateStr);

            ast.Accept(visitor);
            var stringifier = new CompactStringifier(4098, true);

            ast.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #7
0
 private void GetOrderBy(OrderBy orderBy)
 {
     foreach (var orderingTerm in orderBy)
     {
         // Order By句の各項目は、文字列にしてから返す
         var stringifier = new CompactStringifier(128);
         orderingTerm.Term.Accept(stringifier);
         var orderingTermStr = stringifier.ToString();
         var asc             = orderingTerm.OrderSpec == OrderSpec.Asc;
         _orderingTerms.Add(new Tuple <string, bool>(orderingTermStr, asc));
     }
 }
コード例 #8
0
        public string Rename(string sql, DBMSType dbmsType = DBMSType.Unknown, bool ignoreCase = true)
        {
            var ast = MiniSqlParserAST.CreateStmts(sql, dbmsType);

            var visitor = new RenameTableAliasVisitor("T", "Table");

            ast.Accept(visitor);

            var stringifier = new CompactStringifier(4098, true);

            ast.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #9
0
        public string ReplaceToNull(string sql, DBMSType dbmsType = DBMSType.Unknown)
        {
            var ast = MiniSqlParserAST.CreateStmts(sql, dbmsType);

            var visitor = new ReplaceAllPlaceholdersToNull();

            ast.Accept(visitor);

            var stringifier = new CompactStringifier(4098, true);

            ast.Accept(stringifier);
            return(stringifier.ToString());
        }
コード例 #10
0
        private string Convert(string sql)
        {
            var ast = MiniSqlParserAST.CreateStmts(sql);

            var visitor = new ConvertToSelectConstant();

            ast.Accept(visitor);

            var stringifier = new CompactStringifier(4098, true);

            ast.Accept(stringifier);

            return(stringifier.ToString());
        }
コード例 #11
0
 private bool FindInGroupByItems(GroupBy groupBy, ResultInfo resultInfo, int resultInfoIndex)
 {
     foreach (var groupByExpr in groupBy)
     {
         if (groupByExpr.GetType() == typeof(Column))
         {
             var groupByColumn = (Column)groupByExpr;
             // SELECT句がGroupByキーか判定するため、SELECT句がColumn型であり、かつそのColumnの
             // テーブル別名と列名がGROUPBYキーと一致するかを調べる
             if (resultInfo.SourceInfo != null)
             {
                 if (resultInfo.SourceInfo.IsDirectSource(groupByColumn, _ignoreCase))
                 {
                     return(true);
                 }
             }
         }
         else if (groupByExpr.GetType() == typeof(UNumericLiteral) &&
                  ((UNumericLiteral)groupByExpr).TryParseToLong() > 0)
         {
             if (((UNumericLiteral)groupByExpr).TryParseToLong() == resultInfoIndex + 1)
             {
                 return(true);
             }
         }
         else
         {
             // GroupBy句がExpressionの場合、SELECTに同等な論理式が存在すればTrueを返す
             // 暫定的に同じ文字列か否かで判定する
             var stringifier1 = new CompactStringifier(1024);
             var stringifier2 = new CompactStringifier(1024);
             groupByExpr.Accept(stringifier1);
             if (resultInfo.Node != null)
             {
                 resultInfo.Node.Accept(stringifier2);
             }
             var groupByExprStr = stringifier1.ToString();
             var selectItemStr  = stringifier2.ToString();
             if (string.Compare(groupByExprStr, selectItemStr, _ignoreCase) == 0)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #12
0
        private Result GetResult(string sql)
        {
            var ast     = MiniSqlParserAST.CreateStmts(sql);
            var visitor = new GetIfConditionsVisitor();

            ast.Accept(visitor);

            var conditions = new List <string>();
            var stmtList   = new List <string>();

            for (int i = 0; i < visitor.Count; ++i)
            {
                // 条件式の取得
                var stringifier = new CompactStringifier(144);
                visitor.Conditions[i].Accept(stringifier);
                conditions.Add(stringifier.ToString());
                // 文の取得(ただし1番目の文のみ)
                stringifier = new CompactStringifier(144);
                visitor.StmtsList[i][0].Accept(stringifier);
                stmtList.Add(stringifier.ToString());
            }
            return(new Result(conditions, stmtList));
        }