Skip to main content

MergeAggregateNode

  • Namespace: PPDS.Dataverse.Query.Planning.Nodes
  • Assembly: PPDS.Dataverse
  • Kind: Class
  • Implements: IQueryPlanNode

Summary

Merges partial aggregate results from parallel partitions. Handles COUNT (sum), SUM (sum), AVG (weighted), MIN, MAX.

NOTE: COUNT(DISTINCT) cannot be parallel-partitioned because summing partial distinct counts would double-count values that appear in multiple partitions. COUNT(DISTINCT) must be handled by a single aggregate query or a different strategy (e.g., client-side DISTINCT followed by COUNT).

Members

Constructors

MergeAggregateNode(IQueryPlanNode input, IReadOnlyList<MergeAggregateColumn> aggregateColumns, IReadOnlyList<string> groupByColumns)

MergeAggregateNode(IQueryPlanNode input, IReadOnlyList<MergeAggregateColumn> aggregateColumns, IReadOnlyList<string> groupByColumns)

Initializes a new instance of the PPDS.Dataverse.Query.Planning.Nodes.MergeAggregateNode class.

Methods

ExecuteAsync

IAsyncEnumerable<QueryRow> ExecuteAsync(QueryPlanContext context, CancellationToken cancellationToken)

Execute this node, producing rows.

Properties

AggregateColumns

IReadOnlyList<MergeAggregateColumn> AggregateColumns { get; }

The aggregate columns to merge across partitions.

Children

IReadOnlyList<IQueryPlanNode> Children { get; }

Child nodes (inputs to this operator).

Description

string Description { get; }

Human-readable description for EXPLAIN output.

EstimatedRows

long EstimatedRows { get; }

Estimated row count (for cost-based decisions). -1 if unknown.

GroupByColumns

IReadOnlyList<string> GroupByColumns { get; }

The column names used for grouping aggregated results.

Input

IQueryPlanNode Input { get; }

The child node providing partial aggregate rows from partitions.