// <summary> // Determines whether the var or a property of the var (if the var is defined as a NewRecord) // is defined exclusively over a single group aggregate. If so, it registers it as such with the // group aggregate var info manager. // </summary> public override void Visit(VarDefOp op, Node n) { VisitDefault(n); var definingNode = n.Child0; var definingNodeOp = definingNode.Op; GroupAggregateVarInfo referencedVarInfo; Node templateNode; bool isUnnested; if (GroupAggregateVarComputationTranslator.TryTranslateOverGroupAggregateVar( definingNode, true, _command, _groupAggregateVarInfoManager, out referencedVarInfo, out templateNode, out isUnnested)) { _groupAggregateVarInfoManager.Add(op.Var, referencedVarInfo, templateNode, isUnnested); } else if (definingNodeOp.OpType == OpType.NewRecord) { var newRecordOp = (NewRecordOp)definingNodeOp; for (var i = 0; i < definingNode.Children.Count; i++) { var argumentNode = definingNode.Children[i]; if (GroupAggregateVarComputationTranslator.TryTranslateOverGroupAggregateVar( argumentNode, true, _command, _groupAggregateVarInfoManager, out referencedVarInfo, out templateNode, out isUnnested)) { _groupAggregateVarInfoManager.Add(op.Var, referencedVarInfo, templateNode, isUnnested, newRecordOp.Properties[i]); } } } }