MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / aggregate_v_slice

Function aggregate_v_slice

nodedb-query/src/window/value_agg.rs:172–245  ·  view source on GitHub ↗
(
    all_vals: &[Option<f64>],
    indices: &[usize],
    rows: &[Vec<Value>],
    column_index: &HashMap<String, usize>,
    spec: &WindowFuncSpec,
    start_idx: usize,
    end_idx: usize,
)

Source from the content-addressed store, hash-verified

170}
171
172fn aggregate_v_slice(
173 all_vals: &[Option<f64>],
174 indices: &[usize],
175 rows: &[Vec<Value>],
176 column_index: &HashMap<String, usize>,
177 spec: &WindowFuncSpec,
178 start_idx: usize,
179 end_idx: usize,
180) -> Value {
181 let slice_vals: Vec<f64> = all_vals[start_idx..=end_idx]
182 .iter()
183 .filter_map(|v| *v)
184 .collect();
185 let slice_count = end_idx - start_idx + 1;
186
187 match spec.func_name.as_str() {
188 "sum" => {
189 let rt = simd_agg::ts_runtime();
190 Value::Float((rt.sum_f64)(&slice_vals))
191 }
192 "count" => Value::Integer(slice_count as i64),
193 "avg" => {
194 if slice_vals.is_empty() {
195 Value::Null
196 } else {
197 let rt = simd_agg::ts_runtime();
198 Value::Float((rt.sum_f64)(&slice_vals) / slice_vals.len() as f64)
199 }
200 }
201 "min" => {
202 if slice_vals.is_empty() {
203 Value::Null
204 } else {
205 let rt = simd_agg::ts_runtime();
206 Value::Float((rt.min_f64)(&slice_vals))
207 }
208 }
209 "max" => {
210 if slice_vals.is_empty() {
211 Value::Null
212 } else {
213 let rt = simd_agg::ts_runtime();
214 Value::Float((rt.max_f64)(&slice_vals))
215 }
216 }
217 "first_value" => indices
218 .get(start_idx)
219 .and_then(|&i| rows.get(i))
220 .map(|row| {
221 eval_arg_for_row(
222 spec.args
223 .first()
224 .unwrap_or(&crate::expr::types::SqlExpr::Literal(Value::Null)),
225 row,
226 column_index,
227 )
228 })
229 .unwrap_or(Value::Null),

Callers 1

Calls 9

ts_runtimeFunction · 0.85
eval_arg_for_rowFunction · 0.85
collectMethod · 0.80
firstMethod · 0.80
iterMethod · 0.45
as_strMethod · 0.45
is_emptyMethod · 0.45
lenMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected