//! Chain of SQL-rendering nodes assembled by `SqlNodesFactory` and
//! consumed by `SqlEvaluatorVisitor`. Each node decides — for a
//! given `MemberSymbol` — whether to handle the rendering itself
//! or to delegate to its `input`, so the chain progressively wraps
//! the base SQL with cube prefixing, parenthesisation, CASE
//! expressions, masking, aggregation, window functions, and
//! pre-aggregation reference substitution.

pub mod auto_prefix;
pub mod calendar_time_shift;
pub mod case;
pub mod evaluate_sql;
pub mod factory;
pub mod final_measure;
pub mod final_pre_aggregation_measure;
pub mod geo_dimension;
pub mod masked;
pub mod measure_filter;
pub mod measure_render_modifier;
pub mod multi_stage_rank;
pub mod multi_stage_window;
pub mod parenthesize;
pub mod render_references;
pub mod rolling_window;
pub mod root_processor;
pub mod segment_dimension;
pub mod sql_node;
pub mod time_dimension;
pub mod time_shift;
pub mod ungroupped_measure;
pub mod ungroupped_query_final_measure;
pub mod window_partition;

pub use auto_prefix::AutoPrefixSqlNode;
pub use case::CaseSqlNode;
pub use evaluate_sql::EvaluateSqlNode;
pub use factory::SqlNodesFactory;
pub use final_measure::FinalMeasureSqlNode;
pub use final_pre_aggregation_measure::FinalPreAggregationMeasureSqlNode;
pub use geo_dimension::GeoDimensionSqlNode;
pub use masked::MaskedSqlNode;
pub use measure_filter::MeasureFilterSqlNode;
pub use measure_render_modifier::MeasureRenderModifierSqlNode;
pub use multi_stage_rank::MultiStageRankNode;
pub use multi_stage_window::MultiStageWindowNode;
pub use parenthesize::ParenthesizeSqlNode;
pub use render_references::*;
pub use rolling_window::RollingWindowNode;
pub use root_processor::RootSqlNode;
pub use segment_dimension::SegmentDimensionSqlNode;
pub use sql_node::SqlNode;
pub use time_dimension::TimeDimensionNode;
pub use time_shift::TimeShiftSqlNode;
pub use ungroupped_measure::UngroupedMeasureSqlNode;
pub use ungroupped_query_final_measure::UngroupedQueryFinalMeasureSqlNode;
