@@ -548,12 +548,14 @@ impl QueryExecutionContext<'_> {
548548 Ok ( result)
549549 }
550550
551+ /// `group` is the state's stored group labels, as `read_bound_materialization` returns them.
551552 pub fn readout_bound (
552553 & self ,
554+ group : & BTreeMap < String , String > ,
553555 state : & GroupState ,
554556 query : & SketchQuery ,
555557 ) -> Result < SummaryValue , SummaryExecutorError > {
556- self . readout ( state, query)
558+ self . readout ( group , state, query)
557559 }
558560
559561 pub fn merge_bound_states (
@@ -618,16 +620,17 @@ impl QueryExecutionContext<'_> {
618620
619621 fn readout (
620622 & self ,
623+ group : & BTreeMap < String , String > ,
621624 state : & GroupState ,
622625 query : & SketchQuery ,
623626 ) -> Result < SummaryValue , SummaryExecutorError > {
624627 let GroupState :: Sketch { entries, kind } = state else {
625628 return Err ( SummaryExecutorError :: UnsupportedFamily ) ;
626629 } ;
627630 if self . is_cumulative {
628- readout_cumulative ( entries, * kind, query, self . t1_ms as i64 )
631+ readout_cumulative ( entries, * kind, query, self . t1_ms as i64 , group )
629632 } else {
630- readout_per_window ( entries, * kind, query, self . t0_ms as i64 )
633+ readout_per_window ( entries, * kind, query, self . t0_ms as i64 , group )
631634 }
632635 }
633636}
@@ -640,6 +643,7 @@ fn readout_cumulative(
640643 kind : DeltaSketchKind ,
641644 query : & SketchQuery ,
642645 t1_ms : i64 ,
646+ group : & BTreeMap < String , String > ,
643647) -> Result < SummaryValue , SummaryExecutorError > {
644648 let mut merged: Option < SummaryState > = None ;
645649 let mut latest_window_end: Option < i64 > = None ;
@@ -675,7 +679,7 @@ fn readout_cumulative(
675679 let w_end = latest_window_end. unwrap_or ( t1_ms) ;
676680 if let SketchQuery :: TopK { k } = query {
677681 Ok ( SummaryValue :: TopK (
678- vec ! [ ( w_end, topk_ranked( & merged, * k) ?) ] ,
682+ vec ! [ ( w_end, topk_ranked( & merged, * k, group ) ?) ] ,
679683 coverage,
680684 ) )
681685 } else {
@@ -697,6 +701,7 @@ fn readout_per_window(
697701 kind : DeltaSketchKind ,
698702 query : & SketchQuery ,
699703 t0_ms : i64 ,
704+ group : & BTreeMap < String , String > ,
700705) -> Result < SummaryValue , SummaryExecutorError > {
701706 let mut by_window: BTreeMap < i64 , SummaryState > = BTreeMap :: new ( ) ;
702707 // Tracked from RAW window-ends, before the `w_end < t0_ms` carry-in
@@ -738,7 +743,7 @@ fn readout_per_window(
738743 if let SketchQuery :: TopK { k } = query {
739744 let points = by_window
740745 . into_iter ( )
741- . map ( |( w_end, rs) | topk_ranked ( & rs, * k) . map ( |items| ( w_end, items) ) )
746+ . map ( |( w_end, rs) | topk_ranked ( & rs, * k, group ) . map ( |items| ( w_end, items) ) )
742747 . collect :: < Result < Vec < _ > , _ > > ( ) ?;
743748 Ok ( SummaryValue :: TopK ( points, coverage) )
744749 } else {
@@ -763,8 +768,12 @@ fn sketch_query_value(
763768 } ,
764769 )
765770}
766- fn topk_ranked ( state : & SummaryState , k : usize ) -> Result < Vec < ( String , f64 ) > , SummaryExecutorError > {
767- asap_summary_state:: stored_state:: readout:: topk_ranked ( state, k) . map_err (
771+ fn topk_ranked (
772+ state : & SummaryState ,
773+ k : usize ,
774+ group : & BTreeMap < String , String > ,
775+ ) -> Result < Vec < ( String , f64 ) > , SummaryExecutorError > {
776+ asap_summary_state:: stored_state:: readout:: topk_ranked ( state, k, group) . map_err (
768777 |asap_summary_state:: stored_state:: readout:: Error :: Unsupported ( reason) | {
769778 SummaryExecutorError :: Unsupported ( reason)
770779 } ,
@@ -1187,7 +1196,11 @@ mod tests {
11871196 } ;
11881197 let states = context. read_bound_materialization ( & binding) . unwrap ( ) ;
11891198 let SummaryValue :: Points ( points, coverage) = context
1190- . readout_bound ( & states[ 0 ] . 1 , & SketchQuery :: Quantile { q : 0.5 } )
1199+ . readout_bound (
1200+ & states[ 0 ] . 0 ,
1201+ & states[ 0 ] . 1 ,
1202+ & SketchQuery :: Quantile { q : 0.5 } ,
1203+ )
11911204 . unwrap ( )
11921205 else {
11931206 panic ! ( "expected points" ) ;
@@ -1267,8 +1280,9 @@ mod tests {
12671280 ( SketchQuery :: FrequencyL2 , 6.0f64 . sqrt ( ) ) ,
12681281 ( SketchQuery :: FrequencyEntropy , 1.5 ) ,
12691282 ] {
1270- let SummaryValue :: Points ( points, _) =
1271- context. readout_bound ( & states[ 0 ] . 1 , & query) . unwrap ( )
1283+ let SummaryValue :: Points ( points, _) = context
1284+ . readout_bound ( & states[ 0 ] . 0 , & states[ 0 ] . 1 , & query)
1285+ . unwrap ( )
12721286 else {
12731287 panic ! ( "expected scalar points" )
12741288 } ;
0 commit comments