protected void VisitWhere(QueryItem query, IEnumerable <IExpression> extraCriteria = null) { var prevState = WriteState; try { WriteState = SqlRenderOption.WhereClause; var criteria = new List <IExpression>(); var clause = GetWhereClause(query); if (clause != null) { criteria.Add(clause); } if (extraCriteria != null) { criteria.AddRange(extraCriteria); } AddJoinsToCriteria(query, criteria); VisitWhere(criteria); } finally { WriteState = prevState; } }
protected virtual void VisitOrderBy(QueryItem query) { var prevState = WriteState; try { WriteState = SqlRenderOption.OrderByClause; var orderBy = GetOrderBy(query); if (orderBy.Any()) { Writer.Write(" order by "); var first = true; foreach (var prop in orderBy) { if (!first) { Writer.Write(", "); } first = false; Visit(prop); } } } finally { WriteState = prevState; } }
protected virtual void VisitFrom(QueryItem item) { var prevState = WriteState; try { WriteState = SqlRenderOption.FromClause; if (_hasFromOrSelect) { Writer.Write(" "); } _hasFromOrSelect = true; Writer.Write("from "); WriteTableDefinition(item); foreach (var join in item.Joins.Where(j => j.GetCardinality() == Cardinality.OneToOne)) { VisitJoin(join); } } finally { WriteState = prevState; } }
protected virtual void VisitSelect(QueryItem query) { var prevState = WriteState; try { WriteState = SqlRenderOption.SelectClause; _hasFromOrSelect = true; Writer.Write("select "); VisitTopRecords(query); if (query.Select.Count == 0) { WriteAlias(query); Writer.Write("*"); } else { var first = true; foreach (var prop in query.Select) { if (!first) { Writer.Write(", "); } first = false; prop.Expression.Visit(this); if (!string.IsNullOrEmpty(prop.Alias)) { Writer.Write(" as "); WriteIdentifier(prop.Alias); } } } } finally { WriteState = prevState; } }
protected virtual void VisitOffsetClause(QueryItem query) { var prevState = WriteState; try { WriteState = SqlRenderOption.OffsetClause; if (query.Fetch > 0 && query.Offset > 0) { Writer.Write(" offset "); Writer.Write(query.Offset); Writer.Write(" rows fetch next "); Writer.Write(query.Fetch); Writer.Write(" rows only"); } } finally { WriteState = prevState; } }