Beispiel #1
0
 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();
     }
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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();
     }
 }
Beispiel #4
0
        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));
        }
Beispiel #5
0
 public static CompositeSqlFragment Parenthesize(SqlFragment fragment)
 {
     return(new CompositeSqlFragment(SqlTerms.LeftParenthesis, fragment, SqlTerms.RightParenthesis));
 }