Пример #1
0
        private static CardinalityEstimate EstimateStreamAggregatesRelation(BoundStreamAggregatesRelation relation)
        {
            if (!relation.Groups.Any())
            {
                return(CardinalityEstimate.SingleRow);
            }

            return(CardinalityEstimate.Unknown);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }