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

Function plan_elementwise

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

Source from the content-addressed store, hash-verified

235}
236
237fn plan_elementwise(args: &[ast::Expr], catalog: &dyn SqlCatalog) -> Result<SqlPlan> {
238 if args.len() != 4 {
239 return Err(SqlError::Unsupported {
240 detail: format!(
241 "ARRAY_ELEMENTWISE expects 4 args (left, right, op, attr); got {}",
242 args.len()
243 ),
244 });
245 }
246 let left = require_array_name(args, 0, "ARRAY_ELEMENTWISE", catalog)?;
247 let right = require_array_name(args, 1, "ARRAY_ELEMENTWISE", catalog)?;
248 let lview = catalog
249 .lookup_array(&left)
250 .ok_or_else(|| SqlError::Unsupported {
251 detail: format!("ARRAY_ELEMENTWISE: array '{left}' not found"),
252 })?;
253 let rview = catalog
254 .lookup_array(&right)
255 .ok_or_else(|| SqlError::Unsupported {
256 detail: format!("ARRAY_ELEMENTWISE: array '{right}' not found"),
257 })?;
258 if lview.dims.len() != rview.dims.len() || lview.attrs.len() != rview.attrs.len() {
259 return Err(SqlError::Unsupported {
260 detail: format!(
261 "ARRAY_ELEMENTWISE: arrays '{left}' and '{right}' must share schema shape"
262 ),
263 });
264 }
265 let op_str = expect_string_literal(&args[2], "ARRAY_ELEMENTWISE op")?;
266 let op = ArrayBinaryOpAst::parse(&op_str).ok_or_else(|| SqlError::Unsupported {
267 detail: format!("ARRAY_ELEMENTWISE: unknown op '{op_str}' (want add/sub/mul/div)"),
268 })?;
269 let attr = expect_string_literal(&args[3], "ARRAY_ELEMENTWISE attr")?;
270 if !lview.attrs.iter().any(|a| a.name == attr) {
271 return Err(SqlError::Unsupported {
272 detail: format!("ARRAY_ELEMENTWISE: array '{left}' has no attr '{attr}'"),
273 });
274 }
275 Ok(SqlPlan::ArrayElementwise {
276 left,
277 right,
278 op,
279 attr,
280 })
281}

Callers 1

try_plan_array_table_fnFunction · 0.85

Calls 6

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

Tested by

no test coverage detected