private void VisitProjection(Projection projection) { var statement = ProjectionWriter <TEntity> .CreateStatement(projection, _mapping); _sql.Write(statement.Text); _parameters.AddRange(statement.Parameters); }
private static string BuildWhereClause(Select select, IEntityMapping mapping, IDictionary <string, object> parameters) { if (!select.HasWhere && !select.HasSetOperations) { return(null); } var writer = new SqlWriter(); if (select.HasWhere) { writer.Write(BuildOperators(select.Where, mapping, parameters)); } if (select.HasSetOperations) { foreach (var setOperation in select.SetOperatons) { var statement = CreateStatement(setOperation.Select, mapping); parameters.AddRange(statement.Parameters); if (!writer.Empty) { writer.And.Flush(); } if (setOperation.Type == SetOperation.OperationType.Compliment) { writer.Not.Flush(); } writer.Exists.OpenBlock.Trim().Write(statement.Text).Trim().CloseBlock.Flush(); } } return(writer.ToString()); }
public static Statement CreateStatement(Insert insert, IEntityMapping mapping) { var writer = new SqlWriter(); IDictionary <string, object> parameters = null; writer.InsertInto.QuotedName(insert.Into.Name); var resultType = Statement.ResultType.None; switch (insert.Type) { case Insert.SetType.Values: writer.OpenBlock.Trim().FieldList(x => x.Comma.Flush(), insert.Values.Keys).Trim().CloseBlock.Flush(); parameters = new Dictionary <string, object>(); writer.Values.OpenBlock.Trim().ParameterList(x => x.Comma.Flush(), insert.Values.Values.Select(x => parameters.AddWithUniquelyNamedKey(x))). Trim().CloseBlock.Flush(); if (insert.HasIdentityKey) { writer.Trim().QuerySeperator.Select.ScopeIdentity(typeof(int)); resultType = Statement.ResultType.Scalar; } break; case Insert.SetType.Query: var select = SelectWriter <TEntity> .CreateStatement(insert.Query, mapping); parameters = select.Parameters; writer.OpenBlock.Trim().FieldList(x => x.Comma.Flush(), SelectWriter <TEntity> .BuildProjection(insert.Query, mapping, parameters)).Trim().CloseBlock.Flush(); writer.Write(select.Text); break; } return(new Statement(writer.ToString(), Statement.StatementType.Text, resultType, parameters)); }
private static string BuildOperators(Operator @operator, IEntityMapping mapping, IDictionary <string, object> parameters) { var writer = new SqlWriter(); var statement = WhereWriter <TEntity> .CreateStatement(@operator, mapping); parameters.AddRange(statement.Parameters); writer.Write(statement.Text); return(writer.ToString()); }
private static string BuildOrderBy(IEnumerable <OrderBy> orderBy, IEntityMapping mapping, IDictionary <string, object> parameters) { if (orderBy == null || !orderBy.Any()) { return(""); } var writer = new SqlWriter(); orderBy.Select((x, i) => new { Last = i == orderBy.Count() - 1, OrderBy = x }).ToList().ForEach(x => { if (x.OrderBy.Type == OrderBy.SourceType.Operator) { writer.Case.When.Write(BuildOperators(x.OrderBy.Operator, mapping, parameters)).Then .Value(1, SqlDbType.Int).Else.Value(0, SqlDbType.Int).End.Flush(); } else { writer.Write(BuildProjection(x.OrderBy.Projection, mapping, parameters)); } writer.Do(x.OrderBy.Order == Order.Descending, y => y.Descending.Flush(), y => y.Ascending.Flush()).Do(!x.Last, y => y.Trim().Comma.Flush()); }); return(writer.ToString()); }