import type { AgAggregationFunction } from '../../api/agAggregationFunction'; import type { DataType } from '../../api/agDataType'; import type { AgFieldIdentifier } from '../../api/agField'; import type { EngineFieldExpression, EngineFieldWindowExpression } from '../engineField'; import type { FieldKey, SourceId } from '../fieldKey'; import type { DataQuery, WindowDefinition } from './dataQuery'; /** Structural field descriptor used throughout hydrated query definitions and logical plan nodes. */ export interface HydratedField { readonly key: FieldKey; readonly fieldId: AgFieldIdentifier; readonly sourceId: SourceId; readonly dataType: DataType; readonly aggregation?: AgAggregationFunction; } /** Field with optional expression metadata — used in plan compute nodes and aggregated field construction. */ export interface HydratedComputedField extends HydratedField { readonly expression?: EngineFieldExpression; readonly sourceField?: HydratedComputedField; } export interface HydratedQuery { fields: HydratedField[]; group?: HydratedGroupDefinition; sort?: HydratedSortDefinition[]; filter?: HydratedFilterDefinition; window?: HydratedWindowDefinition[]; computed?: HydratedComputedField[]; limit?: DataQuery['limit']; from?: DataQuery; } export interface HydratedGroupDefinition { groupFields: HydratedField[]; aggFields: HydratedComputedField[]; } export interface HydratedSortDefinition { field: HydratedField; direction: 'asc' | 'desc'; } export interface HydratedWindowDefinition { field: HydratedField; functionType: WindowDefinition['functionType']; orderBy?: HydratedSortDefinition[]; options?: WindowDefinition['options']; expression?: EngineFieldWindowExpression; } export type HydratedFilterDefinition = HydratedConditionDefinition | HydratedLogicalDefinition; export interface HydratedConditionDefinition { field: HydratedField; operator: string; value: any; options?: Record; } export interface HydratedLogicalDefinition { operator: 'AND' | 'OR'; conditions: HydratedFilterDefinition[]; }