Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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;
            }
        }
Exemple #4
0
        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;
            }
        }
Exemple #5
0
        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;
            }
        }