reifydb-engine 0.8.0

Query execution and processing engine for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2026 ReifyDB

use reifydb_core::error::diagnostic::flow::flow_unsupported_aggregate_expression;
use reifydb_routine::routine::registry::Routines;
use reifydb_rql::expression::{Expression, name::display_label};
use reifydb_value::{Result, error::Error};

use crate::flow::aggregate::{AggregateContext, is_representable};

pub(crate) fn validate_flow_aggregations(
	routines: &Routines,
	aggregations: &[Expression],
	context: AggregateContext,
) -> Result<()> {
	if aggregations.is_empty() {
		return Err(Error(Box::new(flow_unsupported_aggregate_expression("<none>"))));
	}
	for expr in aggregations {
		if !is_representable(routines, expr, context) {
			let output = display_label(expr).text().to_string();
			return Err(Error(Box::new(flow_unsupported_aggregate_expression(&output))));
		}
	}
	Ok(())
}