Represents an aggregate subquery before the aggregate has been rewritten.
When a LINQ query projects a column using an aggregate, the subquery holds a select expression that represents that single aggregate call. The subquery consists of the part inside the outer parenthesis: SELECT (SELECT MAX(id) FROM product) AS max FROM product;
Inheritance: SqlBaseExpression
 public SqlAggregateSubqueryExpression(string groupByAlias, Expression aggregateInGroupSelect, SqlSubqueryExpression aggregateAsSubquery)
     : base(aggregateAsSubquery.Type)
 {
     this.AggregateInGroupSelect = aggregateInGroupSelect;
     this.GroupByAlias = groupByAlias;
     this.AggregateAsSubquery = aggregateAsSubquery;
 }
Beispiel #2
0
 public SqlAggregateSubqueryExpression(string groupByAlias, Expression aggregateInGroupSelect, SqlSubqueryExpression aggregateAsSubquery)
     : base(aggregateAsSubquery.Type)
 {
     this.AggregateInGroupSelect = aggregateInGroupSelect;
     this.GroupByAlias           = groupByAlias;
     this.AggregateAsSubquery    = aggregateAsSubquery;
 }
		protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
		{
			if (subquery.Select != null)
			{
				Debug.Assert(subquery.Select.Columns.Count == 1);

				this.MarkColumnAsUsed(subquery.Select.Alias, subquery.Select.Columns[0].Name);
			}

			return base.VisitSubquery(subquery);
		}
        protected virtual Expression VisitSubquery(SqlSubqueryExpression subquery)
        {
            var select = (SqlSelectExpression)this.Visit(subquery.Select);

            if (select != subquery.Select)
            {
                return(new SqlSubqueryExpression(subquery.Type, select));
            }

            return(subquery);
        }
Beispiel #5
0
        protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
        {
            SqlSubqueryExpression current;

            if (!TryGetCurrent(subquery, out current))
            {
                return(subquery);
            }

            currentObject = current.Select;
            VisitSelect(subquery.Select);
            currentObject = current;

            return(subquery);
        }
        protected override Expression VisitSubquery(SqlSubqueryExpression expression)
        {
            SqlSubqueryExpression current;
            if (!TryGetCurrent(expression, out current))
            {
                return expression;
            }

            if (!(this.result &= current.NodeType == expression.NodeType))
            {
                return expression;
            }

            if (!(this.result &= current.Type == expression.Type))
            {
                return expression;
            }

            this.currentObject = current.Select;
            this.VisitSelect(expression.Select);
            if (!this.result)
            {
                return expression;
            }

            this.currentObject = current;
            return expression;
        }
Beispiel #7
0
        protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
        {
            this.Write("(");

            using (this.AcquireIndentationContext())
            {
                this.Visit(subquery.Select);
                this.WriteLine();
            }

            this.Write(")");

            return subquery;
        }
		protected virtual Expression VisitSubquery(SqlSubqueryExpression subquery)
		{
			var select = (SqlSelectExpression)this.Visit(subquery.Select);

			if (select != subquery.Select)
			{
				return new SqlSubqueryExpression(subquery.Type, select);
			}

			return subquery;
		}
		protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
		{
			return subquery;
		}
        protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
        {
            // Don't gather inside scalar & exists

            return subquery;
        }
Beispiel #11
0
 protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
 {
     return(base.VisitSubquery(subquery));
 }
Beispiel #12
0
        protected override Expression VisitSubquery(SqlSubqueryExpression subquery)
        {
            // Ignore aggregates in sub queries

            if (this.hasAggregate || ignoreInSubqueries)
            {
                return subquery;
            }

            return Visit(subquery);
        }