e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq.Expressions;
|
|
using System.Data.Linq;
|
|
|
|
namespace System.Data.Linq.SqlClient {
|
|
|
|
internal class SqlAggregateChecker {
|
|
Visitor visitor;
|
|
|
|
internal SqlAggregateChecker() {
|
|
this.visitor = new Visitor();
|
|
}
|
|
|
|
internal bool HasAggregates(SqlNode node) {
|
|
visitor.hasAggregates = false;
|
|
visitor.Visit(node);
|
|
return visitor.hasAggregates;
|
|
}
|
|
|
|
class Visitor : SqlVisitor {
|
|
internal bool hasAggregates;
|
|
|
|
internal Visitor() {
|
|
}
|
|
|
|
internal override SqlExpression VisitSubSelect(SqlSubSelect ss) {
|
|
return ss;
|
|
}
|
|
internal override SqlSource VisitSource(SqlSource source) {
|
|
return source;
|
|
}
|
|
internal override SqlExpression VisitUnaryOperator(SqlUnary uo) {
|
|
switch (uo.NodeType) {
|
|
case SqlNodeType.Min:
|
|
case SqlNodeType.Max:
|
|
case SqlNodeType.Avg:
|
|
case SqlNodeType.Sum:
|
|
case SqlNodeType.Count:
|
|
case SqlNodeType.LongCount:
|
|
this.hasAggregates = true;
|
|
return uo;
|
|
default:
|
|
return base.VisitUnaryOperator(uo);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|