private static CardinalityEstimate EstimateStreamAggregatesRelation(BoundStreamAggregatesRelation relation) { if (!relation.Groups.Any()) { return(CardinalityEstimate.SingleRow); } return(CardinalityEstimate.Unknown); }
protected override BoundRelation RewriteStreamAggregatesRelation(BoundStreamAggregatesRelation node) { var aggregates = RemoveUnusedSlots(node.Aggregates, a => a.Output); node = node.Update(node.Input, node.Groups, aggregates); _recorder.Record(node.Aggregates); _recorder.Record(node.Groups); return(base.RewriteStreamAggregatesRelation(node)); }
private Iterator BuildStreamAggregatesRelation(BoundStreamAggregatesRelation relation) { var input = BuildRelation(relation.Input); var allocation = BuildRowBufferAllocation(relation.Input, input.RowBuffer); var aggregators = relation.Aggregates .Select(a => a.Aggregatable.CreateAggregator()) .ToImmutableArray(); var argumentFunctions = relation.Aggregates .Select(a => BuildFunction(a.Argument, allocation)) .ToImmutableArray(); var groupEntries = relation.Groups .Select(g => allocation[g.ValueSlot]) .ToImmutableArray(); var comparers = relation.Groups.Select(v => v.Comparer).ToImmutableArray(); return(new StreamAggregateIterator(input, groupEntries, comparers, aggregators, argumentFunctions)); }