hamelin_translation 0.9.7

Lowering and IR for Hamelin query language
Documentation
//! Pipeline-level normalization passes.
//!
//! These passes transform a single `TypedPipeline` without generating CTEs.
//!
//! Contract: `Arc<TypedPipeline> -> Result<Arc<TypedPipeline>, Arc<TranslationError>>`
//!
//! Passes (in order):
//! - `lower_broadcast_apply` - BroadcastApply → transform(array, lambda)
//! - `normalize_within` - WITHIN → WHERE with explicit timestamp bounds
//! - `lower_distinct` - DISTINCT → AGG (group-only)
//! - `normalize_agg` - AGG compound identifiers → flat AGG + SET/DROP
//! - `extract_agg_aggregates` - AGG nested aggregates (scalar wrappers) → flat AGG + SET/DROP
//! - `normalize_window` - WINDOW compound identifiers → flat WINDOW + SET/DROP
//! - `extract_window_aggregates` - WINDOW nested aggregates → flat WINDOW + SET/DROP
//! - `normalize_explode` - EXPLODE compound identifiers → flat EXPLODE + SET/DROP
//! - `lower_unnest` - UNNEST → EXPLODE (if array) + SET + DROP
//! - `lower_parse` - PARSE → SET + WHERE (regex extraction + filter)
//! - `lower_nest` - NEST → SELECT with struct literal
//! - `expand_array_literals` - Expands array literal elements to match element type
//! - `desugar_in_array_literals` - Rewrites `x IN [1,2,3]` to `x IN (1,2,3)` for scalar literals
//! - `lower_ts_trunc_interval` - Rewrites `TsTrunc(interval)` → `TsTrunc(now() + interval)`
//! - `dedup_append_source` - Deduplicates source rows by DISTINCT keys before APPEND
//! - `align_append_schema` - Inserts SELECT before APPEND to align to target schema (main pipeline only)
//! - `lower_filter` - filter(arr, lambda) → flatten(transform(arr, ...)) (conditional, for backends without native filter)
//! - `recognize_transform_values` - Folds `map(map_keys(m), transform(map_values(m), λ))` → `transform_values(m, λ)`
//! - `rewrite_transform_values` - `transform_values(m, λ)` → vectorized fast path or generic unfold
//! - `lower_transform` - `transform(arr, λ)` → EXPLODE + AGG (conditional, DataFusion)
//! - `fuse_projections` - Fuses SET/DROP/SELECT into minimal SELECT commands (must be last)

mod align_append_schema;
mod dedup_append_source;
mod desugar_in_array_literals;
mod desugar_map_from_arrays;
mod expand_array_literals;
mod extract_agg_aggregates;
mod extract_window_aggregates;
mod fuse_projections;
mod lower_broadcast_apply;
mod lower_distinct;
mod lower_filter;
mod lower_nest;
mod lower_parse;
mod lower_transform;
mod lower_ts_trunc_interval;
mod lower_unnest;
mod normalize_agg;
mod normalize_explode;
mod normalize_window;
mod normalize_within;
mod recognize_transform_values;
mod rewrite_transform_values;

pub use align_append_schema::align_append_schema;
pub use dedup_append_source::dedup_append_source;
pub use desugar_in_array_literals::desugar_in_array_literals;
pub use desugar_map_from_arrays::desugar_map_from_arrays;
pub use expand_array_literals::expand_array_literals;
pub use extract_agg_aggregates::extract_agg_aggregates;
pub use extract_window_aggregates::extract_window_aggregates;
pub use fuse_projections::fuse_projections;
pub use lower_broadcast_apply::lower_broadcast_apply;
pub use lower_distinct::lower_distinct;
pub use lower_filter::lower_filter;
pub use lower_nest::lower_nest;
pub use lower_parse::lower_parse;
pub use lower_transform::lower_transform;
pub use lower_ts_trunc_interval::lower_ts_trunc_interval;
pub use lower_unnest::lower_unnest;
pub use normalize_agg::normalize_agg;
pub use normalize_explode::normalize_explode;
pub use normalize_window::normalize_window;
pub use normalize_within::normalize_within;
pub use recognize_transform_values::recognize_transform_values;
pub use rewrite_transform_values::rewrite_transform_values;