private void AppendPartitioningConditions(QuerySpecification qs, SimpleTableSource ts)
        {
            if (!double.IsInfinity(PartitioningKeyFrom) || !double.IsInfinity(PartitioningKeyTo))
            {
                var cg = new SqlServerCodeGenerator();

                string format;
                if (double.IsInfinity(PartitioningKeyFrom) && double.IsInfinity(PartitioningKeyTo))
                {
                    format = "{1} <= {0} AND {0} < {2}";
                }
                else if (double.IsInfinity(PartitioningKeyFrom))
                {
                    format = "{0} < {2}";
                }
                else
                {
                    format = "{1} <= {0}";
                }

                string sql = String.Format(format,
                                           cg.GetResolvedColumnName(ts.PartitioningColumnReference),
                                           PartitioningKeyFrom.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                           PartitioningKeyTo.ToString(System.Globalization.CultureInfo.InvariantCulture));

                var parser = new Jhu.Graywulf.SqlParser.SqlParser();
                var sc     = (SearchCondition)parser.Execute(new SearchCondition(), sql);

                var where = qs.FindDescendant <WhereClause>();
                if (where == null)
                {
                    where = WhereClause.Create(sc);
                    var ws = Whitespace.Create();

                    var wsn = qs.Stack.AddAfter(qs.Stack.Find(qs.FindDescendant <FromClause>()), ws);
                    qs.Stack.AddAfter(wsn, where);
                }
                else
                {
                    where.AppendCondition(sc, "AND");
                }
            }

            // --- remove partition clause
            ts.Stack.Remove(ts.FindDescendant <TablePartitionClause>());
        }
 public IAnd And(string name, object value, string comparation = "=")
 {
     Clauses.Add(WhereClause.Create(new { Name = name, Value = value, Comparation = comparation, TypeLogical = "AND" }));
     return(this);
 }
 public IOr OrWhereIn(string name, params object[] values)
 {
     Clauses.Add(WhereClause.Create(new { Name = name, Values = values, Comparation = "IN", TypeLogical = "AND" }));
     return(this);
 }
 public IOr OrWhereBetween <TTo, TFrom>(string name, TTo initial, TFrom end)
 {
     Clauses.Add(WhereClause.Create(new { Name = name, Initial = initial, End = end, Comparation = "BETWEEN", TypeLogical = "OR" }));
     return(this);
 }
 public IAnd WhereNull(string name)
 {
     Clauses.Add(WhereClause.Create(new { Name = name, Comparation = "ISNULL", TypeLogical = "AND" }));
     return(this);
 }