private DryadQueryNode VisitAggregate(QueryNodeInfo source, Expression seed, LambdaExpression funcLambda, LambdaExpression resultLambda, bool isQuery, Expression queryExpr) { DryadQueryNode child = this.Visit(source); DryadQueryNode resNode = child; if (HpcLinqExpression.IsAssociative(funcLambda)) { LambdaExpression combinerLambda = HpcLinqExpression.GetAssociativeCombiner(funcLambda); ResourceAttribute attrib = AttributeSystem.GetResourceAttrib(funcLambda); bool funcIsExpensive = (attrib != null && attrib.IsExpensive); resNode = this.PromoteConcat( source, child, delegate(DryadQueryNode x) { DryadQueryNode y = new DryadAggregateNode("AssocAggregate", seed, funcLambda, combinerLambda, resultLambda, 1, isQuery, queryExpr, x, false); return new DryadAggregateNode("AssocTreeAggregate", seed, funcLambda, combinerLambda, resultLambda, 2, isQuery, queryExpr, y, false); }); resNode = new DryadAggregateNode("AssocAggregate", seed, funcLambda, combinerLambda, resultLambda, 3, isQuery, queryExpr, resNode, funcIsExpensive); } else { resNode = new DryadAggregateNode("Aggregate", seed, funcLambda, null, resultLambda, 3, isQuery, queryExpr, child, false); } return resNode; }
internal virtual string Visit(DryadAggregateNode node, CodeMemberMethod vertexMethod, string[] readerNames, string[] writerNames) { return node.AddVertexCode(vertexMethod, readerNames, writerNames); }