/// <inheritdoc/> protected override Provider VisitAggregate(AggregateProvider provider) { OnRecursionEntrance(provider); var source = VisitCompilable(provider.Source); var resultParameters = OnRecursionExit(provider); if (source == provider.Source) { return(provider); } if (resultParameters == null) { var acd = new List <AggregateColumnDescriptor>(provider.AggregateColumns.Length); acd.AddRange(provider.AggregateColumns.Select(ac => new AggregateColumnDescriptor(ac.Name, ac.SourceIndex, ac.AggregateType))); return(new AggregateProvider(source, provider.GroupColumnIndexes, acd.ToArray())); } var result = (Pair <int[], AggregateColumnDescriptor[]>)resultParameters; return(new AggregateProvider(source, result.First, result.Second)); }
/// <summary> /// Visits <see cref="AggregateProvider"/>. /// </summary> /// <param name="provider">Aggregate provider.</param> /// <returns></returns> protected abstract Provider VisitAggregate(AggregateProvider provider);