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

Function plan_agg

nodedb-sql/src/planner/array_fn/table_fn.rs:184–235  ·  view source on GitHub ↗
(
    args: &[ast::Expr],
    catalog: &dyn SqlCatalog,
    temporal: TemporalScope,
)

Source from the content-addressed store, hash-verified

182}
183
184fn plan_agg(
185 args: &[ast::Expr],
186 catalog: &dyn SqlCatalog,
187 temporal: TemporalScope,
188) -> Result<SqlPlan> {
189 if args.len() < 3 || args.len() > 4 {
190 return Err(SqlError::Unsupported {
191 detail: format!(
192 "ARRAY_AGG expects 3..=4 args (name, attr, reducer, [group_by_dim]); got {}",
193 args.len()
194 ),
195 });
196 }
197 let name = require_array_name(args, 0, "ARRAY_AGG", catalog)?;
198 let view = catalog
199 .lookup_array(&name)
200 .ok_or_else(|| SqlError::Unsupported {
201 detail: format!("ARRAY_AGG: array '{name}' not found"),
202 })?;
203
204 let attr = expect_string_literal(&args[1], "ARRAY_AGG attr")?;
205 if !view.attrs.iter().any(|a| a.name == attr) {
206 return Err(SqlError::Unsupported {
207 detail: format!("ARRAY_AGG: array '{name}' has no attr '{attr}'"),
208 });
209 }
210
211 let reducer_str = expect_string_literal(&args[2], "ARRAY_AGG reducer")?;
212 let reducer = ArrayReducerAst::parse(&reducer_str).ok_or_else(|| SqlError::Unsupported {
213 detail: format!("ARRAY_AGG: unknown reducer '{reducer_str}' (want sum/count/min/max/mean)"),
214 })?;
215
216 let group_by_dim = if args.len() == 4 && !is_null_literal(&args[3]) {
217 let dim = expect_string_literal(&args[3], "ARRAY_AGG group_by_dim")?;
218 if !view.dims.iter().any(|d| d.name == dim) {
219 return Err(SqlError::Unsupported {
220 detail: format!("ARRAY_AGG: array '{name}' has no dim '{dim}'"),
221 });
222 }
223 Some(dim)
224 } else {
225 None
226 };
227
228 Ok(SqlPlan::ArrayAgg {
229 name,
230 attr,
231 reducer,
232 group_by_dim,
233 temporal,
234 })
235}
236
237fn plan_elementwise(args: &[ast::Expr], catalog: &dyn SqlCatalog) -> Result<SqlPlan> {
238 if args.len() != 4 {

Callers 1

try_plan_array_table_fnFunction · 0.85

Calls 7

require_array_nameFunction · 0.85
expect_string_literalFunction · 0.85
is_null_literalFunction · 0.85
parseFunction · 0.50
lenMethod · 0.45
lookup_arrayMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected