diff --git a/Cargo.lock b/Cargo.lock index 943595fa..b09d2af0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -343,7 +343,7 @@ dependencies = [ [[package]] name = "asap-aware-mapping" version = "0.1.0" -source = "git+https://github.com/ProjectASAP/ASAPPlanner?rev=cb50219c582d43f53ab77d3a595bd1ea4a9aa119#cb50219c582d43f53ab77d3a595bd1ea4a9aa119" +source = "git+https://github.com/ProjectASAP/ASAPPlanner?rev=d0701dd4d4f0acb267b004c42ba30b2c9547ff7c#d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" dependencies = [ "asap-types", "serde", @@ -354,7 +354,7 @@ dependencies = [ [[package]] name = "asap-frontend-promql" version = "0.1.0" -source = "git+https://github.com/ProjectASAP/ASAPPlanner?rev=cb50219c582d43f53ab77d3a595bd1ea4a9aa119#cb50219c582d43f53ab77d3a595bd1ea4a9aa119" +source = "git+https://github.com/ProjectASAP/ASAPPlanner?rev=d0701dd4d4f0acb267b004c42ba30b2c9547ff7c#d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" dependencies = [ "asap-types", "promql-parser 0.10.0", @@ -374,7 +374,7 @@ dependencies = [ [[package]] name = "asap-types" version = "0.1.0" -source = "git+https://github.com/ProjectASAP/ASAPPlanner?rev=cb50219c582d43f53ab77d3a595bd1ea4a9aa119#cb50219c582d43f53ab77d3a595bd1ea4a9aa119" +source = "git+https://github.com/ProjectASAP/ASAPPlanner?rev=d0701dd4d4f0acb267b004c42ba30b2c9547ff7c#d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" dependencies = [ "serde", "serde_json", diff --git a/control_plane/Cargo.toml b/control_plane/Cargo.toml index 033c0d2a..f058a840 100644 --- a/control_plane/Cargo.toml +++ b/control_plane/Cargo.toml @@ -93,8 +93,8 @@ asap_types.workspace = true # scaffolding, unaware that `data_plane`'s `summary_executor.rs` in *this* # repo is a real one. Vendored locally instead of chased upstream -- see # `data_plane/src/query_engines/asap_query_engine/summary_exec.rs`. -planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cb50219c582d43f53ab77d3a595bd1ea4a9aa119" } -asap-aware-mapping = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cb50219c582d43f53ab77d3a595bd1ea4a9aa119" } +planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" } +asap-aware-mapping = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" } # L1 adoption (design-target-architecture.md Part B): the PromQL front # end itself, replacing control_plane's own query_parser/promql.rs. @@ -102,7 +102,7 @@ asap-aware-mapping = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = # `planner-types`/`asap-aware-mapping` above -- these three MUST move # together (two revs of the same upstream repo's types in one workspace # resolve to distinct Rust types that won't unify). -asap-frontend-promql = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cb50219c582d43f53ab77d3a595bd1ea4a9aa119" } +asap-frontend-promql = { git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" } [dev-dependencies] tokio = { version = "1", features = ["full", "test-util"] } diff --git a/control_plane/src/asap_tier_implement.rs b/control_plane/src/asap_tier_implement.rs index 627fc91d..02809866 100644 --- a/control_plane/src/asap_tier_implement.rs +++ b/control_plane/src/asap_tier_implement.rs @@ -134,7 +134,7 @@ fn collect_aggregate_roots<'a>(expr: &'a QueryExpr, out: &mut Vec<&'a QueryExpr> | QueryExpr::Sort { child, .. } | QueryExpr::Limit { child, .. } | QueryExpr::PromqlSubquery { child, .. } => collect_aggregate_roots(child, out), - QueryExpr::Concat { children } => { + QueryExpr::Concat { children, .. } => { for c in children { collect_aggregate_roots(c, out); } diff --git a/control_plane/src/emit/mod.rs b/control_plane/src/emit/mod.rs index b4731ae1..fd6cb80e 100644 --- a/control_plane/src/emit/mod.rs +++ b/control_plane/src/emit/mod.rs @@ -321,7 +321,8 @@ fn extract_from_node(node: &Rc) -> Option { SummaryExpr::SummaryMerge { children } => children.iter().find_map(extract_from_node), // Not surfaced by any `Bind*` path yet (gated on rules that // haven't landed — see `deployment_expr.rs`'s module docs). - SummaryExpr::SummaryJoin { .. } + SummaryExpr::BinaryOp { .. } + | SummaryExpr::SummaryJoin { .. } | SummaryExpr::SummarySubtract { .. } | SummaryExpr::SummaryDelete { .. } | SummaryExpr::KeepPreAsap(_) => None, diff --git a/control_plane/src/physical/allocator.rs b/control_plane/src/physical/allocator.rs index 31e3fa80..a5055da8 100644 --- a/control_plane/src/physical/allocator.rs +++ b/control_plane/src/physical/allocator.rs @@ -263,7 +263,10 @@ impl SketchAllocator { } // ── Merge — Backend ─────────────────────────────────────────── - QueryExpr::Concat { children: inputs } => { + QueryExpr::Concat { + children: inputs, + discriminator_unique_key, + } => { let children: Vec = inputs .into_iter() .map(|inp| self.alloc_node(inp, budget)) @@ -272,6 +275,7 @@ impl SketchAllocator { PlanNode { expr: QueryExpr::Concat { children: children.iter().map(|c| c.expr.clone()).collect(), + discriminator_unique_key, }, stage: PipelineStage::Backend, mode: ExecutionMode::Passthrough, @@ -952,6 +956,7 @@ mod tests { fn merge_goes_to_backend() { let expr = QueryExpr::Concat { children: vec![scan("a"), scan("b")], + discriminator_unique_key: None, }; let node = alloc(unlimited(), expr); assert_eq!(node.stage, PipelineStage::Backend); diff --git a/control_plane/src/physical/colored_dag/allocator.rs b/control_plane/src/physical/colored_dag/allocator.rs index ae260412..ced8118b 100644 --- a/control_plane/src/physical/colored_dag/allocator.rs +++ b/control_plane/src/physical/colored_dag/allocator.rs @@ -177,6 +177,13 @@ impl ThreeStageWalker { // (scrape locality); `Ref` resolves through the lexical // scope map. SummaryExpr::KeepPreAsap(qe) => self.colour_logical(qe)?, + SummaryExpr::BinaryOp { lhs, rhs, .. } => { + for child in [lhs, rhs] { + let (cid, _) = self.visit_l4node(child)?; + self.dag.edges.push((id, cid)); + } + StageId::Backend + } // ── SummaryAgg: always edge per design.md §6 batched-queries // table — true for both approximate sketches (the old diff --git a/control_plane/src/physical/colored_dag/emitter.rs b/control_plane/src/physical/colored_dag/emitter.rs index 026e1c7a..e7966843 100644 --- a/control_plane/src/physical/colored_dag/emitter.rs +++ b/control_plane/src/physical/colored_dag/emitter.rs @@ -113,7 +113,8 @@ fn classify(expr: &PhysicalExpr) -> NodeKind<'_> { SummaryExpr::SummaryAgg { .. } => NodeKind::Other, SummaryExpr::SummaryEstimate { query, .. } => NodeKind::SketchEstimate { query }, SummaryExpr::SummaryMerge { .. } => NodeKind::SketchMerge, - SummaryExpr::SummaryJoin { .. } + SummaryExpr::BinaryOp { .. } + | SummaryExpr::SummaryJoin { .. } | SummaryExpr::SummarySubtract { .. } | SummaryExpr::SummaryDelete { .. } => NodeKind::Other, }, @@ -1125,7 +1126,7 @@ fn extract_edge_facts(qe: &planner_types::pre_asap::QueryExpr, edge: &mut EdgeSt | QE::Sort { child, .. } | QE::Limit { child, .. } | QE::PromqlSubquery { child, .. } => extract_edge_facts(child, edge), - QE::Concat { children } => { + QE::Concat { children, .. } => { for c in children { extract_edge_facts(c, edge); } diff --git a/control_plane/src/physical/colored_dag/tests.rs b/control_plane/src/physical/colored_dag/tests.rs index 8257711d..44f785e2 100644 --- a/control_plane/src/physical/colored_dag/tests.rs +++ b/control_plane/src/physical/colored_dag/tests.rs @@ -109,7 +109,10 @@ fn sketch_agg_l4( SketchKind::new(kind, params), GroupingStrategy::default(), ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column(ColumnRef::SampleValue), + }, reduction: Reduction::by(vec![]), grouping: GroupingStrategy::default(), }, diff --git a/control_plane/src/physical/compiler.rs b/control_plane/src/physical/compiler.rs index e8c8e620..961e5d8c 100644 --- a/control_plane/src/physical/compiler.rs +++ b/control_plane/src/physical/compiler.rs @@ -42,7 +42,7 @@ use crate::query_plan::{ use crate::types_v2::AccuracyTarget; use planner_types::pre_asap::Source; -pub const PLANNER_REVISION: &str = "cb50219c582d43f53ab77d3a595bd1ea4a9aa119"; +pub const PLANNER_REVISION: &str = "d0701dd4d4f0acb267b004c42ba30b2c9547ff7c"; #[derive(Debug, Clone)] pub struct PlanningQuery { @@ -2009,6 +2009,10 @@ fn summary_agg_metric(node: &SummaryNode) -> Option { walk(right, metrics); } SummaryExpr::SummaryDelete { summary_input, .. } => walk(summary_input, metrics), + SummaryExpr::BinaryOp { lhs, rhs, .. } => { + walk(lhs, metrics); + walk(rhs, metrics); + } } } let mut metrics = BTreeSet::new(); @@ -2366,7 +2370,8 @@ fn collect_selected_materializations( parameters: Value::Object(Default::default()), }); } - SummaryExpr::KeepPreAsap(_) + SummaryExpr::BinaryOp { .. } + | SummaryExpr::KeepPreAsap(_) | SummaryExpr::SummaryAgg { .. } | SummaryExpr::SummaryJoin { .. } | SummaryExpr::SummarySubtract { .. } diff --git a/control_plane/src/physical/planner.rs b/control_plane/src/physical/planner.rs index ff0532ca..9cd263bd 100644 --- a/control_plane/src/physical/planner.rs +++ b/control_plane/src/physical/planner.rs @@ -351,7 +351,7 @@ fn plan_node(expr: &QueryExpr, config: &PhysicalPlannerConfig) -> PhysicalNode { // (`intent_algebra::lower`), so the `HashAggregate { keys }` this // arm used to build now comes straight out of the `Aggregate` // arm above. - QueryExpr::Concat { children } => { + QueryExpr::Concat { children, .. } => { let children: Vec = children.iter().map(|c| plan_node(c, config)).collect(); let sketch_type = children @@ -774,6 +774,7 @@ mod tests { having: None, child: QueryExpr::Concat { children: vec![windowed_agg(default_frequency(), 60, "requests")], + discriminator_unique_key: None, } .into(), }; diff --git a/control_plane/src/physical/post_asap/cost_model.rs b/control_plane/src/physical/post_asap/cost_model.rs index 244322bf..f5282fa9 100644 --- a/control_plane/src/physical/post_asap/cost_model.rs +++ b/control_plane/src/physical/post_asap/cost_model.rs @@ -252,6 +252,7 @@ impl CostModel for ControlPlaneCostModel { .min_by(|left, right| left.1 .0.total_cmp(&right.1 .0)) .map( |(framework, physical_cost)| CompleteSummaryCandidateEstimate { + physical_plan_id: None, cost: Cost(lifecycle_cost + physical_cost.0), window_frameworks: vec![Some(framework.clone()); deployments.len()], window_accuracy_guarantee: Some( diff --git a/control_plane/src/physical/post_asap/tests.rs b/control_plane/src/physical/post_asap/tests.rs index 324f710c..31eef49d 100644 --- a/control_plane/src/physical/post_asap/tests.rs +++ b/control_plane/src/physical/post_asap/tests.rs @@ -119,6 +119,7 @@ fn node_is_archive(node: &Rc) -> bool { node_is_archive(left) || node_is_archive(right) } SummaryExpr::SummaryDelete { summary_input, .. } => node_is_archive(summary_input), + SummaryExpr::BinaryOp { lhs, rhs, .. } => node_is_archive(lhs) || node_is_archive(rhs), } } @@ -774,7 +775,16 @@ fn phase_b_e2e_topk_well_formed() { let accuracy = AccuracyTarget::Epsilon(0.05); let expr = crate::query_parser::parse_query_expr_canonical(query, accuracy.clone()) .expect("TopK parses"); - assert!(bind_query_expr(&expr, accuracy).is_err()); + let bound = bind_query_expr(&expr, accuracy); + assert!( + bound.is_err() + || matches!( + &bound, + Ok(PhysicalExpr::Committed(PostAsapPlan::Summary(node))) + if matches!(node.expr, SummaryExpr::KeepPreAsap(_)) + ), + "unevidenced TopK must remain exact or unavailable: {bound:?}" + ); } /// Archive-only routing through the full L1→L3→L4 pipeline. Asserts the diff --git a/control_plane/src/query_parser/mod.rs b/control_plane/src/query_parser/mod.rs index 5b452424..f5721c8f 100644 --- a/control_plane/src/query_parser/mod.rs +++ b/control_plane/src/query_parser/mod.rs @@ -147,7 +147,7 @@ fn root_scan_schema(qe: &QueryExpr) -> Option<&planner_types::pre_asap::Schema> | QueryExpr::Sort { child, .. } | QueryExpr::Limit { child, .. } | QueryExpr::PromqlSubquery { child, .. } => root_scan_schema(child), - QueryExpr::Concat { children } => children.iter().find_map(root_scan_schema), + QueryExpr::Concat { children, .. } => children.iter().find_map(root_scan_schema), QueryExpr::Join { left, right, .. } | QueryExpr::SetOp { left, right, .. } | QueryExpr::BinaryOp { @@ -257,7 +257,7 @@ impl QeCollector { self.visit(child, schema); } QueryExpr::Dedup { child, .. } => self.visit(child, schema), - QueryExpr::Concat { children } => { + QueryExpr::Concat { children, .. } => { for c in children { self.visit(c, schema); } diff --git a/control_plane/src/query_plan.rs b/control_plane/src/query_plan.rs index 61e5796e..ac1dbf78 100644 --- a/control_plane/src/query_plan.rs +++ b/control_plane/src/query_plan.rs @@ -331,9 +331,11 @@ where self.next_id += 1; self.seen.insert(identity, id); let physical = match &node.expr { - SummaryExpr::KeepPreAsap(_) => QueryPlanNode::ExactFallback { - reason: "post-ASAP node requires exact execution".into(), - }, + SummaryExpr::BinaryOp { .. } | SummaryExpr::KeepPreAsap(_) => { + QueryPlanNode::ExactFallback { + reason: "post-ASAP node requires exact execution".into(), + } + } SummaryExpr::SummaryAgg { family, reduction, diff --git a/control_plane/src/workload.rs b/control_plane/src/workload.rs index ae4f053a..29af1072 100644 --- a/control_plane/src/workload.rs +++ b/control_plane/src/workload.rs @@ -194,7 +194,7 @@ fn collect_agg_intents(expr: &planner_types::pre_asap::QueryExpr, out: &mut Vec< | QueryExpr::TimeRange { child, .. } | QueryExpr::TimeShift { child, .. } | QueryExpr::SQLWindowFunc { child, .. } => collect_agg_intents(child, out), - QueryExpr::Concat { children } => { + QueryExpr::Concat { children, .. } => { for child in children { collect_agg_intents(child, out); } diff --git a/crates/asap_types/Cargo.toml b/crates/asap_types/Cargo.toml index fe3a0270..a7337d45 100644 --- a/crates/asap_types/Cargo.toml +++ b/crates/asap_types/Cargo.toml @@ -30,4 +30,4 @@ xxhash-rust = { version = "0.8", features = ["xxh64"] } # exactly (`control_plane/Cargo.toml`) -- two different revs of the same # git dependency in one workspace resolve to two distinct Rust types that # won't unify. -planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cb50219c582d43f53ab77d3a595bd1ea4a9aa119" } +planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" } diff --git a/data_plane/Cargo.toml b/data_plane/Cargo.toml index a424258b..0fdfaf3a 100644 --- a/data_plane/Cargo.toml +++ b/data_plane/Cargo.toml @@ -38,7 +38,7 @@ control_plane = { path = "../control_plane" } # reduction: Reduction, .. }`) are `pre_asap` types, in the same crate now # (not a separate `asap-ir` import). Query serving consumes the compiled # QueryPlan; these types are used at physical-plan compilation boundaries. -planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "cb50219c582d43f53ab77d3a595bd1ea4a9aa119" } +planner-types = { package = "asap-types", git = "https://github.com/ProjectASAP/ASAPPlanner", rev = "d0701dd4d4f0acb267b004c42ba30b2c9547ff7c" } # Shared external (workspace) serde.workspace = true diff --git a/data_plane/src/query_engines/asap_query_engine/post_asap_planner.rs b/data_plane/src/query_engines/asap_query_engine/post_asap_planner.rs index e2b351b8..fb9fc4d3 100644 --- a/data_plane/src/query_engines/asap_query_engine/post_asap_planner.rs +++ b/data_plane/src/query_engines/asap_query_engine/post_asap_planner.rs @@ -386,7 +386,7 @@ fn query_expr_contains_time_range(qe: &planner_types::pre_asap::QueryExpr) -> bo | QueryExpr::PromqlSubquery { child, .. } | QueryExpr::TimeShift { child, .. } | QueryExpr::SQLWindowFunc { child, .. } => query_expr_contains_time_range(child), - QueryExpr::Concat { children } => children.iter().any(query_expr_contains_time_range), + QueryExpr::Concat { children, .. } => children.iter().any(query_expr_contains_time_range), QueryExpr::Join { left, right, .. } | QueryExpr::SetOp { left, right, .. } | QueryExpr::BinaryOp { @@ -415,7 +415,7 @@ fn query_expr_contains_rate(qe: &planner_types::pre_asap::QueryExpr) -> bool { | QueryExpr::TimeRange { child, .. } | QueryExpr::TimeShift { child, .. } | QueryExpr::SQLWindowFunc { child, .. } => query_expr_contains_rate(child), - QueryExpr::Concat { children } => children.iter().any(query_expr_contains_rate), + QueryExpr::Concat { children, .. } => children.iter().any(query_expr_contains_rate), QueryExpr::Join { left, right, .. } | QueryExpr::SetOp { left, right, .. } | QueryExpr::BinaryOp { @@ -441,7 +441,7 @@ fn query_expr_has_filter(qe: &planner_types::pre_asap::QueryExpr) -> bool { | QueryExpr::TimeRange { child, .. } | QueryExpr::TimeShift { child, .. } | QueryExpr::SQLWindowFunc { child, .. } => query_expr_has_filter(child), - QueryExpr::Concat { children } => children.iter().any(query_expr_has_filter), + QueryExpr::Concat { children, .. } => children.iter().any(query_expr_has_filter), QueryExpr::Join { left, right, .. } | QueryExpr::SetOp { left, right, .. } | QueryExpr::BinaryOp { @@ -472,7 +472,7 @@ fn query_expr_max_time_range_ms(qe: &planner_types::pre_asap::QueryExpr) -> Opti | QueryExpr::Limit { child, .. } | QueryExpr::TimeShift { child, .. } | QueryExpr::SQLWindowFunc { child, .. } => child_max(child), - QueryExpr::Concat { children } => children + QueryExpr::Concat { children, .. } => children .iter() .filter_map(query_expr_max_time_range_ms) .max(), diff --git a/data_plane/src/query_engines/asap_query_engine/summary_exec.rs b/data_plane/src/query_engines/asap_query_engine/summary_exec.rs index 13ce252e..dc4d0cbe 100644 --- a/data_plane/src/query_engines/asap_query_engine/summary_exec.rs +++ b/data_plane/src/query_engines/asap_query_engine/summary_exec.rs @@ -154,11 +154,18 @@ pub fn execute( SummaryExpr::SummaryAgg { child, family, - col, + input, reduction, .. } => { - let tagged = exec.find_candidates(family, col, reduction, child)?; + let col = match input.item.as_ref().unwrap_or(&input.weight) { + planner_types::post_asap::SummaryInputExpr::Column(col) => col.clone(), + planner_types::post_asap::SummaryInputExpr::Constant(value) if *value == 1.0 => { + ColumnRef::SampleValue + } + _ => return Err(ExecError::NotYetSupported("summary update expression")), + }; + let tagged = exec.find_candidates(family, &col, reduction, child)?; if tagged.is_empty() { return Err(ExecError::NoCandidates); } @@ -233,6 +240,7 @@ pub fn execute( } SummaryExpr::SummaryJoin { .. } => Err(ExecError::NotYetSupported("SummaryJoin")), + SummaryExpr::BinaryOp { .. } => Err(ExecError::NotYetSupported("BinaryOp")), SummaryExpr::SummarySubtract { .. } => Err(ExecError::NotYetSupported("SummarySubtract")), SummaryExpr::SummaryDelete { .. } => Err(ExecError::NotYetSupported("SummaryDelete")), } @@ -325,7 +333,12 @@ mod tests { expr: SummaryExpr::SummaryAgg { child, family, - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction, grouping: planner_types::post_asap::GroupingStrategy::default(), }, diff --git a/data_plane/src/query_engines/asap_query_engine/summary_executor.rs b/data_plane/src/query_engines/asap_query_engine/summary_executor.rs index 025005cf..722eac4c 100644 --- a/data_plane/src/query_engines/asap_query_engine/summary_executor.rs +++ b/data_plane/src/query_engines/asap_query_engine/summary_executor.rs @@ -1142,7 +1142,7 @@ pub(crate) fn find_metric_in_query_expr(qe: &QueryExpr) -> Option { | QueryExpr::TimeRange { child, .. } | QueryExpr::TimeShift { child, .. } | QueryExpr::SQLWindowFunc { child, .. } => find_metric_in_query_expr(child), - QueryExpr::Concat { children } => children.iter().find_map(find_metric_in_query_expr), + QueryExpr::Concat { children, .. } => children.iter().find_map(find_metric_in_query_expr), QueryExpr::Join { left, .. } | QueryExpr::SetOp { left, .. } => { find_metric_in_query_expr(left) } @@ -1221,7 +1221,12 @@ mod tests { planner_types::post_asap::SketchAlgorithm::Kll, planner_types::post_asap::SketchParams::Kll { k: 200 }, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction, grouping: planner_types::post_asap::GroupingStrategy::default(), }, @@ -1245,7 +1250,12 @@ mod tests { planner_types::post_asap::SketchAlgorithm::Hll, planner_types::post_asap::SketchParams::Hll { precision: 10 }, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction, grouping: planner_types::post_asap::GroupingStrategy::default(), }, @@ -1395,7 +1405,12 @@ mod tests { depth: 4, }, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction: Reduction::by(vec![]), grouping: planner_types::post_asap::GroupingStrategy::default(), }, @@ -1458,7 +1473,12 @@ mod tests { heap_size: 10, }, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction: Reduction::by(vec![]), grouping: planner_types::post_asap::GroupingStrategy::default(), }, @@ -1502,7 +1522,12 @@ mod tests { planner_types::post_asap::ExactKind::Sum, planner_types::post_asap::ExactParams::Sum, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, // Sum is a genuine PromQL aggregation operator -- an empty // `by` always means "reduce fully," never `PerEntity` (see // `resolve_group_key`'s doc). @@ -2327,7 +2352,12 @@ mod tests { planner_types::post_asap::SketchAlgorithm::Kll, planner_types::post_asap::SketchParams::Kll { k: 500 }, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction: Reduction::by(vec![]), grouping: planner_types::post_asap::GroupingStrategy::default(), }, @@ -2788,7 +2818,12 @@ mod tests { planner_types::post_asap::ExactKind::MinMax, planner_types::post_asap::ExactParams::MinMax, ), - col: ColumnRef::SampleValue, + input: planner_types::post_asap::SummaryUpdate { + item: None, + weight: planner_types::post_asap::SummaryInputExpr::Column( + ColumnRef::SampleValue, + ), + }, reduction: Reduction::by(vec![]), grouping: planner_types::post_asap::GroupingStrategy::default(), }, diff --git a/docs/examples/asapquery-compatibility-demo-snapshot.json b/docs/examples/asapquery-compatibility-demo-snapshot.json index 2870e543..eb62b192 100644 --- a/docs/examples/asapquery-compatibility-demo-snapshot.json +++ b/docs/examples/asapquery-compatibility-demo-snapshot.json @@ -1,7 +1,7 @@ { "snapshot_version": 1, "query_workload": { - "language": "prom_q_l", + "language": "promql", "query_batch": null, "repeating_queries": [ { diff --git a/docs/examples/asapquery-planning-snapshot.json b/docs/examples/asapquery-planning-snapshot.json index b7a3bcb4..fb032673 100644 --- a/docs/examples/asapquery-planning-snapshot.json +++ b/docs/examples/asapquery-planning-snapshot.json @@ -1,7 +1,7 @@ { "snapshot_version": 1, "query_workload": { - "language": "prom_q_l", + "language": "promql", "query_batch": null, "repeating_queries": [ {