// <summary> // Produces a list of all GroupAggregateVarInfos, each of which represents a single group aggregate // and it candidate function aggregates. It also produces a delegate that given a child node returns the parent node // </summary> internal static IEnumerable<GroupAggregateVarInfo> Process(Command itree, out TryGetValue tryGetParent) { var groupRefComputingVisitor = new GroupAggregateRefComputingVisitor(itree); groupRefComputingVisitor.VisitNode(itree.Root); tryGetParent = groupRefComputingVisitor._childToParent.TryGetValue; return groupRefComputingVisitor._groupAggregateVarInfoManager.GroupAggregateVarInfos; }
// <summary> // Produces a list of all GroupAggregateVarInfos, each of which represents a single group aggregate // and it candidate function aggregates. It also produces a delegate that given a child node returns the parent node // </summary> internal static IEnumerable <GroupAggregateVarInfo> Process(Command itree, out TryGetValue tryGetParent) { var groupRefComputingVisitor = new GroupAggregateRefComputingVisitor(itree); groupRefComputingVisitor.VisitNode(itree.Root); tryGetParent = groupRefComputingVisitor._childToParent.TryGetValue; return(groupRefComputingVisitor._groupAggregateVarInfoManager.GroupAggregateVarInfos); }
private void Process() { foreach (GroupAggregateVarInfo groupAggregateVarInfo in GroupAggregateRefComputingVisitor.Process(this.m_command, out this.m_tryGetParent)) { if (groupAggregateVarInfo.HasCandidateAggregateNodes) { foreach (KeyValuePair <System.Data.Entity.Core.Query.InternalTrees.Node, System.Data.Entity.Core.Query.InternalTrees.Node> candidateAggregateNode in groupAggregateVarInfo.CandidateAggregateNodes) { this.TryProcessCandidate(candidateAggregateNode, groupAggregateVarInfo); } } } }
/// <summary> /// The main driver /// </summary> private void Process() { var groupAggregateVarInfos = GroupAggregateRefComputingVisitor.Process(m_command, out m_tryGetParent); foreach (var groupAggregateVarInfo in groupAggregateVarInfos) { if (groupAggregateVarInfo.HasCandidateAggregateNodes) { foreach (var candidate in groupAggregateVarInfo.CandidateAggregateNodes) { TryProcessCandidate(candidate, groupAggregateVarInfo); } } } }