public override string ToString() { var stringifier = new CompactStringifier(144, false); _predicate.Accept(stringifier); return(stringifier.ToString()); }
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()); }
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); }
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()); }
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()); }
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()); }
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)); } }
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()); }
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()); }
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()); }
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); }
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)); }