public void Append(SqlFragment sql, SqlPlaceHolderList placeHolders = null, SqlPrecedenceHandler precedenceHandler = null) { Fragments.Add(SqlTerms.NewLine); sql.Flatten(Fragments, precedenceHandler); if (placeHolders != null && placeHolders.Count > 0) { PlaceHolders.AddRange(placeHolders); ReIndexPlaceHolders(); } }
public virtual bool NeedsParenthesis(SqlFragment parent, SqlFragment child, bool isFirst) { if (parent.Precedence == SqlPrecedence.NoPrecedence || child.Precedence == SqlPrecedence.NoPrecedence) { return(false); } // we assume normal associativity (left to right) var result = isFirst ? child.Precedence < parent.Precedence : child.Precedence <= parent.Precedence; return(result); }
public SqlStatement(SqlKind kind, SqlFragment sql, SqlPlaceHolderList placeHolders, DbExecutionType executionType, SqlPrecedenceHandler precedenceHandler = null, QueryOptions options = QueryOptions.None) { Kind = kind; ExecutionType = executionType; Options = options; Append(sql, placeHolders, precedenceHandler); if (placeHolders == null) { DiscoverPlaceholders(); } }
public SqlFragment Format(params SqlFragment[] args) { Util.Check(args.Length == PlaceHolders.Count, "Invalid SQL template formatting call, args count mismatch ({0}), expected: {1}, template: {2}.", args.Length, PlaceHolders.Count, this); // doing for-loop (instead of foreach/Linq) for efficiency var parts = new SqlFragment[Fragments.Count]; for (int i = 0; i < Fragments.Count; i++) { var ph = Fragments[i] as SqlPlaceHolder; if (ph == null) { parts[i] = Fragments[i]; } else { parts[i] = args[ph.Index]; } } return(new CompositeSqlFragment(this.Precedence, parts)); }
public static CompositeSqlFragment Parenthesize(SqlFragment fragment) { return(new CompositeSqlFragment(SqlTerms.LeftParenthesis, fragment, SqlTerms.RightParenthesis)); }