Beispiel #1
0
            public static HashSet <string> Gather(Expression source)
            {
                var aliasesProduced = new SqlAliasesProduced();

                aliasesProduced.Visit(source);

                return(aliasesProduced.aliases);
            }
Beispiel #2
0
        protected override Expression VisitSelect(SqlSelectExpression select)
        {
            var saveIsOuterMostSelect = this.isOuterMostSelect;

            try
            {
                this.isOuterMostSelect = false;

                select = (SqlSelectExpression)base.VisitSelect(select);

                var canHaveOrderBy      = saveIsOuterMostSelect || select.Take != null || select.Skip != null;
                var hasGroupBy          = select.GroupBy?.Count > 0;
                var canReceiveOrderings = canHaveOrderBy && !hasGroupBy && !select.Distinct && !SqlAggregateChecker.HasAggregates(select);

                var hasOrderBy = select.OrderBy?.Count > 0;

                if (hasOrderBy)
                {
                    PrependOrderings(select.OrderBy);
                }

                var columns            = select.Columns;
                var orderings          = canReceiveOrderings ? this.gatheredOrderings : (canHaveOrderBy ? select.OrderBy : null);
                var canPassOnOrderings = !saveIsOuterMostSelect && !hasGroupBy && !select.Distinct && (select.Take == null && select.Skip == null);

                if (this.gatheredOrderings != null)
                {
                    if (canPassOnOrderings)
                    {
                        var producedAliases = SqlAliasesProduced.Gather(select.From);
                        var project         = RebindOrderings(this.gatheredOrderings, select.Alias, producedAliases, select.Columns);

                        this.gatheredOrderings = null;
                        PrependOrderings(project.Orderings);

                        columns = project.Columns;
                    }
                    else
                    {
                        this.gatheredOrderings = null;
                    }
                }

                if (orderings != select.OrderBy || columns != select.Columns)
                {
                    select = new SqlSelectExpression(select.Type, select.Alias, columns, select.From, select.Where, orderings, select.GroupBy, select.Distinct, select.Skip, select.Take, select.ForUpdate);
                }

                return(select);
            }
            finally
            {
                this.isOuterMostSelect = saveIsOuterMostSelect;
            }
        }
			public static HashSet<string> Gather(Expression source)
			{
				var aliasesProduced = new SqlAliasesProduced();

				aliasesProduced.Visit(source);

				return aliasesProduced.aliases;
			}